diff --git a/.circleci/continue_config.yml b/.circleci/continue_config.yml index 0b58819e3..c4bb61322 100644 --- a/.circleci/continue_config.yml +++ b/.circleci/continue_config.yml @@ -16,7 +16,7 @@ parameters: executors: golang-executor: docker: - - image: 889010145541.dkr.ecr.us-east-1.amazonaws.com/cicd/golang:1.22.5 + - image: 889010145541.dkr.ecr.us-east-1.amazonaws.com/cicd/golang:1.22.11 aws_auth: oidc_role_arn: arn:aws:iam::889010145541:role/circleci-project-dev-kube-arangodb machine-executor: @@ -27,21 +27,32 @@ executors: jobs: check-code: executor: golang-executor + environment: + GOCACHE: "/tmp/go/cache" + GOPATH: "/tmp/go/path" + GO111MODULES: off + KEEP_GOPATH: 1 steps: + - run: apt-get update && apt-get install -y unzip - setup_remote_docker: docker_layer_caching: true - checkout - run: - name: Install deps - command: | - if [ -z "$CIRCLE_PULL_REQUEST" ]; then - make vendor - make tools-min - exit 0 - fi - apt-get update - apt-get install -y unzip - make init + name: Calculate cache + command: bash ./scripts/cache.sh . + - restore_cache: + keys: + - build-mod-{{ checksum ".checksum.mod" }} + - restore_cache: + keys: + - build-code-{{ checksum ".checksum.mod" }} + - run: + name: Run Vendor + command: make vendor tools-min init + - save_cache: + key: build-mod-{{ checksum ".checksum.mod" }} + paths: + - /tmp/go/path - run: name: License check command: | @@ -71,6 +82,7 @@ jobs: make bin - run: name: vulncheck + no_output_timeout: 1.5h command: | if [ -z "$CIRCLE_PULL_REQUEST" ]; then echo "This is not a pull request. Skipping..." @@ -85,8 +97,10 @@ jobs: exit 0 fi make ci-check - environment: - GO111MODULES: off + - save_cache: + key: build-code-{{ checksum ".checksum.mod" }} + paths: + - /tmp/go/cache manifests_verify: executor: machine-executor diff --git a/.gitattributes b/.gitattributes index c7d74c7a6..d64eb70de 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,4 @@ pkg/generated/** linguist-generated **/zz_generated.deepcopy.go linguist-generated -pkg/api/** linguist-generated \ No newline at end of file +pkg/api/** linguist-generated +**/*.generated.go linguist-generated \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2b66d5b04..8082bf663 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,7 @@ license-header.enterprise.txt local/ kustomize_test/ -tools/codegen/boilerplate.go.txt \ No newline at end of file +tools/codegen/boilerplate.go.txt + +.checksum.code +.checksum.mod \ No newline at end of file diff --git a/.golangci.yaml b/.golangci.yaml index 506e35a75..fe0d7f620 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -1,7 +1,8 @@ run: issues-exit-code: 3 timeout: 30m - skip-dirs: +issues: + exclude-dirs: - vendor - .gobuild - deps @@ -20,6 +21,15 @@ linters: - importas - gci linters-settings: + govet: + disable: + - printf + staticcheck: + checks: + - all + - -SA1019 + unparam: + check-exported: false importas: no-unaliased: true alias: @@ -45,6 +55,10 @@ linters-settings: pkg: github.com/arangodb/kube-arangodb/integrations/scheduler/v1 - alias: pbSchedulerV1 pkg: github.com/arangodb/kube-arangodb/integrations/scheduler/v1/definition + - alias: pbImplSchedulerV2 + pkg: github.com/arangodb/kube-arangodb/integrations/scheduler/v2 + - alias: pbSchedulerV2 + pkg: github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition - alias: pbImplSharedV1 pkg: github.com/arangodb/kube-arangodb/integrations/shared/v1 - alias: pbSharedV1 @@ -53,6 +67,22 @@ linters-settings: pkg: github.com/arangodb/kube-arangodb/integrations/shutdown/v1 - alias: pbShutdownV1 pkg: github.com/arangodb/kube-arangodb/integrations/shutdown/v1/definition + - alias: pbImplStorageV1 + pkg: github.com/arangodb/kube-arangodb/integrations/storage/v1 + - alias: pbImplStorageV1Shared + pkg: github.com/arangodb/kube-arangodb/integrations/storage/v1/shared + - alias: pbImplStorageV1SharedS3 + pkg: github.com/arangodb/kube-arangodb/integrations/storage/v1/shared/s3 + - alias: pbStorageV1 + pkg: github.com/arangodb/kube-arangodb/integrations/storage/v1/definition + - alias: pbImplStorageV2 + pkg: github.com/arangodb/kube-arangodb/integrations/storage/v2 + - alias: pbImplStorageV2Shared + pkg: github.com/arangodb/kube-arangodb/integrations/storage/v2/shared + - alias: pbImplStorageV2SharedS3 + pkg: github.com/arangodb/kube-arangodb/integrations/storage/v2/shared/s3 + - alias: pbStorageV2 + pkg: github.com/arangodb/kube-arangodb/integrations/storage/v2/definition - alias: analyticsApi pkg: github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1 - alias: mlApiv1alpha1 @@ -61,6 +91,8 @@ linters-settings: pkg: github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1 - alias: networkingApi pkg: github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1 + - alias: platformApi + pkg: github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1 - alias: schedulerApiv1alpha1 pkg: github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1 - alias: schedulerContainerApiv1alpha1 @@ -115,14 +147,20 @@ linters-settings: pkg: k8s.io/api/batch/v1 - alias: core pkg: k8s.io/api/core/v1 + - alias: admission + pkg: k8s.io/api/admission/v1 - alias: policy pkg: k8s.io/api/policy/v1 - alias: storage pkg: k8s.io/api/storage/v1 - alias: meta pkg: k8s.io/apimachinery/pkg/apis/meta/v1 + - alias: autoscaling + pkg: k8s.io/api/autoscaling/v1 - alias: typedCore pkg: k8s.io/client-go/kubernetes/typed/core/v1 + - alias: ugrpc + pkg: github.com/arangodb/kube-arangodb/pkg/util/grpc gci: sections: - standard diff --git a/CHANGELOG.md b/CHANGELOG.md index 5606cde79..12bb2d199 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,62 @@ ## [master](https://github.com/arangodb/kube-arangodb/tree/master) (N/A) +## [1.2.44](https://github.com/arangodb/kube-arangodb/tree/1.2.44) (2025-02-03) +- (Maintenance) Kubernetes 1.31.1 libraries +- (Feature) Helm Client Support +- (Feature) Helm Client Extension +- (Feature) (Integration) SchedulerV2 Definition +- (Maintenance) Proto Lint +- (Feature) (Integration) SchedulerV2 +- (Feature) (Integration) Basic Envs +- (Maintenance) Inspector Generics +- (Bugfix) Fix Gateway Options +- (Feature) StorageV2 Integration Service Definition +- (Feature) AWS Client +- (Feature) (Platform) Storage V1Alpha1 +- (Feature) StorageV2 Integration Service Implementation +- (Feature) (Platform) Storage V1Alpha1 RC +- (Feature) (Networking) ArangoRotue WebSocket Support +- (Feature) (Scheduler) Helm Driver Param +- (Feature) (Integration) Services Endpoint +- (Feature) (Platform) Storage +- (Maintenance) Extract GRPC Client Package +- (Feature) (Platform) Chart +- (Feature) (Scheduler) Deployment Scale Functionality +- (Feature) (Platform) Chart Integration +- (Maintenance) Switch to google.golang.org/protobuf +- (Feature) Add DebugPackage to the OPS Binary +- (Feature) (Networking) ArangoRoute Protocol +- (Feature) (Platform) Platform Requirements support +- (Improvement) Drop slash requirement from ArangoRoute +- (Feature) (Networking) Pass through Server Header +- (Feature) (Platform) Shutdown migration to CE +- (Feature) (Scheduler) Shutdown Integration +- (Feature) CertManager Integration +- (Feature) (Networking) Gateway Options sync +- (Feature) Webhooks +- (Feature) (Platform) Add CA Integration propagation +- (Maintenance) Use GoPretty for the Documentation +- (Maintenance) Bump Kubernetes dependency to 1.31.2 +- (Documentation) Remove Interactive args for the DebugPackage command +- (Maintenance) PropagationMode Enum docs +- (Feature) Deprecate AF Mode +- (Maintenance) Switch License to 2025 +- (Feature) Migrate Storage V1 to CE +- (Feature) Improve Helm Chart Manager +- (Bugfix) (Platform) Proper Path handler in StorageV2 +- (Feature) Helm Chart Values merge methods +- (Feature) (Platform) Expose Route Name via Header +- (Feature) (Platform) Route Upstream Timeout +- (Maintenance) Fix CRD Generation and golangci version +- (Feature) (ML) Allow to use PlatformStorage +- (Maintenance) Bump Go Image to 1.22.11 +- (Feature) Split Helm and KClient +- (Bugfix) Fix ArangoRoute Target switch in case of temporary error +- (Bugfix) Fix IntOrString Schema Type +- (Feature) Enable Operator Handler StackTraces +- (Feature) Add spec validation for MLExtension + ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD - (Feature) ArangoRoute Operator @@ -128,7 +184,7 @@ - (Maintenance) Bump Go to 1.21.6 - (Bugfix) Enable LazyLoader for CRD & CRD Schemas - (Feature) (ML) Restore ReadinessProbe for ML Storage sidecar -- (Feature) AutoDelete for ArangoBackup +- (Feature) AutoDelete for ArangoBackup ## [1.2.36](https://github.com/arangodb/kube-arangodb/tree/1.2.36) (2024-01-08) - (Documentation) Improvements and fixes for rendered documentation (GH pages) diff --git a/Dockerfile b/Dockerfile index 0c5d1c196..704847ef8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ARG IMAGE=ubuntu:24.04 -ARG ENVOY_IMAGE=envoyproxy/envoy:v1.31.0 +ARG ENVOY_IMAGE=envoyproxy/envoy:v1.32.1 # Build Steps diff --git a/Makefile b/Makefile index ca462de78..8b7d0dd69 100644 --- a/Makefile +++ b/Makefile @@ -9,8 +9,8 @@ ifeq ($(shell uname),Darwin) REALPATH ?= grealpath endif -KUBERNETES_VERSION_MINOR:=29 -KUBERNETES_VERSION_PATCH:=6 +KUBERNETES_VERSION_MINOR:=31 +KUBERNETES_VERSION_PATCH:=2 PROJECT := arangodb_operator SCRIPTDIR := $(shell pwd) @@ -25,7 +25,13 @@ RELEASE_MODE ?= community MAIN_DIR := $(ROOT)/pkg/entry/$(RELEASE_MODE) -GOBUILDDIR := $(SCRIPTDIR)/.gobuild +ifndef KEEP_GOPATH + GOBUILDDIR := $(SCRIPTDIR)/.gobuild + GOPATH := $(GOBUILDDIR) +else + GOBUILDDIR := $(GOPATH) +endif + SRCDIR := $(SCRIPTDIR) CACHEVOL := $(PROJECT)-gocache BINDIR := $(ROOTDIR)/bin @@ -42,10 +48,6 @@ REPOPATH := $(ORGPATH)/$(REPONAME) include $(ROOT)/$(RELEASE_MODE).mk -ifndef KEEP_GOPATH - GOPATH := $(GOBUILDDIR) -endif - TEST_BUILD ?= 0 GOBUILDARGS ?= GOBASEVERSION := 1.22.3 @@ -427,34 +429,8 @@ update-vendor: .PHONY: update-generated update-generated: - @rm -fr $(ORGDIR) - @mkdir -p $(ORGDIR) - @ln -s -f $(SCRIPTDIR) $(ORGDIR)/kube-arangodb @$(SED) -e 's/^/\/\/ /' -e 's/ *$$//' $(ROOTDIR)/tools/codegen/license-header.txt > $(ROOTDIR)/tools/codegen/boilerplate.go.txt - GOPATH=$(GOBUILDDIR) $(VENDORDIR)/k8s.io/code-generator/generate-groups.sh \ - "client lister informer deepcopy" \ - "github.com/arangodb/kube-arangodb/pkg/generated" \ - "github.com/arangodb/kube-arangodb/pkg/apis" \ - "deployment:v1 deployment:v2alpha1 \ - replication:v1 replication:v2alpha1 \ - storage:v1alpha \ - backup:v1 \ - apps:v1 \ - ml:v1alpha1 ml:v1beta1 \ - scheduler:v1alpha1 scheduler:v1beta1 \ - analytics:v1alpha1 \ - networking:v1alpha1" \ - --go-header-file "./tools/codegen/boilerplate.go.txt" \ - $(VERIFYARGS) - GOPATH=$(GOBUILDDIR) $(VENDORDIR)/k8s.io/code-generator/generate-groups.sh \ - "deepcopy" \ - "github.com/arangodb/kube-arangodb/pkg/generated" \ - "github.com/arangodb/kube-arangodb/pkg/apis" \ - "shared:v1 \ - scheduler:v1alpha1/container scheduler:v1alpha1/container/resources scheduler:v1alpha1/pod scheduler:v1alpha1/pod/resources \ - scheduler:v1beta1/integration scheduler:v1beta1/policy scheduler:v1beta1/container scheduler:v1beta1/container/resources scheduler:v1beta1/pod scheduler:v1beta1/pod/resources" \ - --go-header-file "./tools/codegen/boilerplate.go.txt" \ - $(VERIFYARGS) + bash "${ROOTDIR}/scripts/codegen.sh" "${ROOTDIR}" dashboard/assets.go: cd $(DASHBOARDDIR) && docker build -t $(DASHBOARDBUILDIMAGE) -f Dockerfile.build $(DASHBOARDDIR) @@ -551,7 +527,8 @@ $(eval $(call manifest-generator, deployment, kube-arangodb, \ --set "operator.features.ml=false" \ --set "operator.features.analytics=false" \ --set "operator.features.networking=true" \ - --set "operator.features.scheduler=true")) + --set "operator.features.scheduler=true" \ + --set "operator.features.platform=true")) $(eval $(call manifest-generator, deployment-replication, kube-arangodb, \ --set "operator.features.deployment=false" \ @@ -563,7 +540,8 @@ $(eval $(call manifest-generator, deployment-replication, kube-arangodb, \ --set "operator.features.ml=false" \ --set "operator.features.analytics=false" \ --set "operator.features.networking=false" \ - --set "operator.features.scheduler=false")) + --set "operator.features.scheduler=false" \ + --set "operator.features.platform=false")) $(eval $(call manifest-generator, storage, kube-arangodb, \ --set "operator.features.deployment=false" \ @@ -575,7 +553,8 @@ $(eval $(call manifest-generator, storage, kube-arangodb, \ --set "operator.features.ml=false" \ --set "operator.features.analytics=false" \ --set "operator.features.networking=false" \ - --set "operator.features.scheduler=false")) + --set "operator.features.scheduler=false" \ + --set "operator.features.platform=false")) $(eval $(call manifest-generator, backup, kube-arangodb, \ --set "operator.features.deployment=false" \ @@ -587,7 +566,8 @@ $(eval $(call manifest-generator, backup, kube-arangodb, \ --set "operator.features.ml=false" \ --set "operator.features.analytics=false" \ --set "operator.features.networking=false" \ - --set "operator.features.scheduler=false")) + --set "operator.features.scheduler=false" \ + --set "operator.features.platform=false")) $(eval $(call manifest-generator, apps, kube-arangodb, \ --set "operator.features.deployment=false" \ @@ -599,7 +579,8 @@ $(eval $(call manifest-generator, apps, kube-arangodb, \ --set "operator.features.ml=false" \ --set "operator.features.analytics=false" \ --set "operator.features.networking=false" \ - --set "operator.features.scheduler=false")) + --set "operator.features.scheduler=false" \ + --set "operator.features.platform=false")) $(eval $(call manifest-generator, ml, kube-arangodb, \ --set "operator.features.deployment=false" \ @@ -611,7 +592,8 @@ $(eval $(call manifest-generator, ml, kube-arangodb, \ --set "operator.features.ml=true" \ --set "operator.features.analytics=false" \ --set "operator.features.networking=false" \ - --set "operator.features.scheduler=false")) + --set "operator.features.scheduler=false" \ + --set "operator.features.platform=false")) $(eval $(call manifest-generator, k2kclustersync, kube-arangodb, \ --set "operator.features.deployment=false" \ @@ -623,7 +605,8 @@ $(eval $(call manifest-generator, k2kclustersync, kube-arangodb, \ --set "operator.features.ml=false" \ --set "operator.features.analytics=false" \ --set "operator.features.networking=false" \ - --set "operator.features.scheduler=false")) + --set "operator.features.scheduler=false" \ + --set "operator.features.platform=false")) $(eval $(call manifest-generator, all, kube-arangodb, \ --set "operator.features.deployment=true" \ @@ -635,7 +618,8 @@ $(eval $(call manifest-generator, all, kube-arangodb, \ --set "operator.features.ml=true" \ --set "operator.features.analytics=true" \ --set "operator.features.networking=true" \ - --set "operator.features.scheduler=true")) + --set "operator.features.scheduler=true" \ + --set "operator.features.platform=true")) .PHONY: chart-crd chart-crd: export CHART_NAME := kube-arangodb-crd @@ -790,11 +774,11 @@ init: vendor tools update-generated $(BIN) .PHONY: tools-min tools-min: update-vendor @echo ">> Fetching golangci-lint linter" - @GOBIN=$(GOPATH)/bin go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.56.2 + @GOBIN=$(GOPATH)/bin go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.63.4 @echo ">> Fetching goimports" @GOBIN=$(GOPATH)/bin go install golang.org/x/tools/cmd/goimports@v0.19.0 @echo ">> Fetching license check" - @GOBIN=$(GOPATH)/bin go install github.com/google/addlicense@6d92264d717064f28b32464f0f9693a5b4ef0239 + @GOBIN=$(GOPATH)/bin go install github.com/google/addlicense@v1.1.1 @echo ">> Fetching yamlfmt" @GOBIN=$(GOPATH)/bin go install github.com/google/yamlfmt/cmd/yamlfmt@v0.10.0 @echo ">> Fetching protolinter" @@ -815,7 +799,7 @@ tools: tools-min @GOBIN=$(GOPATH)/bin go install github.com/golang/protobuf/protoc-gen-go@v1.5.2 @GOBIN=$(GOPATH)/bin go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2 @echo ">> Fetching govulncheck" - @GOBIN=$(GOPATH)/bin go install golang.org/x/vuln/cmd/govulncheck@v1.0.4 + @GOBIN=$(GOPATH)/bin go install golang.org/x/vuln/cmd/govulncheck@v1.1.3 .PHONY: vendor vendor: @@ -859,6 +843,7 @@ set-api-version/%: "$(ROOT)/pkg/apis/backup/" \ "$(ROOT)/pkg/apis/networking/" \ "$(ROOT)/pkg/apis/scheduler/" \ + "$(ROOT)/pkg/apis/platform/" \ "$(ROOT)/pkg/upgrade/" \ | cut -d ':' -f 1 | sort | uniq \ | xargs -n 1 $(SED) -i "s#github.com/arangodb/kube-arangodb/pkg/apis/$*/v[A-Za-z0-9]\+#github.com/arangodb/kube-arangodb/pkg/apis/$*/v$(API_VERSION)#g" @@ -874,6 +859,7 @@ set-api-version/%: "$(ROOT)/pkg/apis/backup/" \ "$(ROOT)/pkg/apis/networking/" \ "$(ROOT)/pkg/apis/scheduler/" \ + "$(ROOT)/pkg/apis/platform/" \ "$(ROOT)/pkg/upgrade/" \ | cut -d ':' -f 1 | sort | uniq \ | xargs -n 1 $(SED) -i "s#DatabaseV[A-Za-z0-9]\+()\.#DatabaseV$(API_VERSION)().#g" @@ -889,6 +875,7 @@ set-api-version/%: "$(ROOT)/pkg/apis/backup/" \ "$(ROOT)/pkg/apis/networking/" \ "$(ROOT)/pkg/apis/scheduler/" \ + "$(ROOT)/pkg/apis/platform/" \ "$(ROOT)/pkg/upgrade/" \ | cut -d ':' -f 1 | sort | uniq \ | xargs -n 1 $(SED) -i "s#ReplicationV[A-Za-z0-9]\+()\.#ReplicationV$(API_VERSION)().#g" @@ -917,7 +904,7 @@ check-community: _check: sync-crds @$(MAKE) fmt yamlfmt license-verify linter run-unit-tests bin-all vulncheck-optional -generate: generate-internal generate-proto fmt yamlfmt +generate: generate-internal generate-proto fmt yamlfmt license generate-internal: ROOT=$(ROOT) go test --count=1 "$(REPOPATH)/internal/..." @@ -938,7 +925,8 @@ CRDS:=apps-job \ ml-storage ml-extension ml-job-batch ml-job-cron \ scheduler-profile scheduler-pod scheduler-deployment scheduler-batchjob scheduler-cronjob \ analytics-graphanalyticsengine \ - networking-route + networking-route \ + platform-storage platform-chart .PHONY: sync sync: @@ -951,18 +939,18 @@ sync: sync-crds .PHONY: sync-charts sync-charts: - @(cd "$(ROOT)/chart/kube-arangodb"; find . -type d -not -name values.yaml -exec mkdir -p "$(ROOT)/chart/kube-arangodb-enterprise/{}" \;) - @(cd "$(ROOT)/chart/kube-arangodb"; find . -type f -not -name values.yaml -not -name Chart.yaml -exec cp "$(ROOT)/chart/kube-arangodb/{}" "$(ROOT)/chart/kube-arangodb-enterprise/{}" \;) + @(cd "$(ROOT)/chart/kube-arangodb"; find . -type d -not -name values.yaml -and -not -name README.md -exec mkdir -p "$(ROOT)/chart/kube-arangodb-enterprise/{}" \;) + @(cd "$(ROOT)/chart/kube-arangodb"; find . -type f -not -name values.yaml -and -not -name README.md -not -name Chart.yaml -exec cp "$(ROOT)/chart/kube-arangodb/{}" "$(ROOT)/chart/kube-arangodb-enterprise/{}" \;) - @(cd "$(ROOT)/chart/kube-arangodb"; find . -type d -not -name values.yaml -exec mkdir -p "$(ROOT)/chart/kube-arangodb-enterprise-arm64/{}" \;) - @(cd "$(ROOT)/chart/kube-arangodb"; find . -type f -not -name values.yaml -not -name Chart.yaml -exec cp "$(ROOT)/chart/kube-arangodb/{}" "$(ROOT)/chart/kube-arangodb-enterprise-arm64/{}" \;) + @(cd "$(ROOT)/chart/kube-arangodb"; find . -type d -not -name values.yaml -and -not -name README.md -exec mkdir -p "$(ROOT)/chart/kube-arangodb-enterprise-arm64/{}" \;) + @(cd "$(ROOT)/chart/kube-arangodb"; find . -type f -not -name values.yaml -and -not -name README.md -not -name Chart.yaml -exec cp "$(ROOT)/chart/kube-arangodb/{}" "$(ROOT)/chart/kube-arangodb-enterprise-arm64/{}" \;) - @(cd "$(ROOT)/chart/kube-arangodb"; find . -type d -not -name values.yaml -exec mkdir -p "$(ROOT)/chart/kube-arangodb-arm64/{}" \;) - @(cd "$(ROOT)/chart/kube-arangodb"; find . -type f -not -name values.yaml -not -name Chart.yaml -exec cp "$(ROOT)/chart/kube-arangodb/{}" "$(ROOT)/chart/kube-arangodb-arm64/{}" \;) + @(cd "$(ROOT)/chart/kube-arangodb"; find . -type d -not -name values.yaml -and -not -name README.md -exec mkdir -p "$(ROOT)/chart/kube-arangodb-arm64/{}" \;) + @(cd "$(ROOT)/chart/kube-arangodb"; find . -type f -not -name values.yaml -and -not -name README.md -not -name Chart.yaml -exec cp "$(ROOT)/chart/kube-arangodb/{}" "$(ROOT)/chart/kube-arangodb-arm64/{}" \;) sync: sync-charts ci-check: - @$(MAKE) tidy vendor generate update-generated synchronize-v2alpha1-with-v1 sync fmt yamlfmt license + @$(MAKE) tidy vendor generate update-generated synchronize-v2alpha1-with-v1 sync fmt yamlfmt license protolint @git checkout -- go.sum # ignore changes in go.sum - @if [ ! -z "$(git status --porcelain)" ]; then echo "There are uncommited changes!"; git status; exit 1; fi \ No newline at end of file + @if [ ! -z "$$(git status --porcelain)" ]; then echo "There are uncommited changes!"; git status; exit 1; fi \ No newline at end of file diff --git a/README.md b/README.md index 6970c8817..938640750 100644 --- a/README.md +++ b/README.md @@ -29,9 +29,9 @@ The ArangoDB Kubernetes Operator is Production ready. [START_INJECT]: # (limits) -| Limit | Description | Community | Enterprise | -|:-------------------|:-----------------------------------------------------------------------------|:----------|:-----------| -| Cluster size limit | Limits of the nodes (DBServers & Coordinators) supported in the Cluster mode | 64 | 1024 | +| Limit | Description | Community | Enterprise | +|:--- |:--- |:--- |:--- | +| Cluster size limit | Limits of the nodes (DBServers & Coordinators) supported in the Cluster mode | 64 | 1024 | [END_INJECT]: # (limits) @@ -52,32 +52,32 @@ covers individual newer features separately. [START_INJECT]: # (kubernetesVersionsTable) -| Platform | State | Kubernetes Version | ArangoDB Version | Remarks | Provider Remarks | -|:--------------------|:-------------|:-------------------|:-----------------|:----------------------|:-----------------------------------| -| Google GKE | Production | 1.28-1.31 | >= 3.11.0 | Don't use micro nodes | | -| | EOL | 1.25-1.27 | 3.9.0-3.10.0 | Don't use micro nodes | | -| | NotSupported | < 1.25 | < 3.8.0 | Don't use micro nodes | | -| Azure AKS | Production | 1.28-1.32 | >= 3.11.0 | | | -| | EOL | 1.25-1.27 | 3.9.0-3.10.0 | | | -| | NotSupported | < 1.25 | < 3.8.0 | | | -| Amazon EKS | Production | 1.28-1.31 | >= 3.11.0 | | [Amazon EKS](./docs/providers/eks) | -| | EOL | 1.25-1.27 | 3.9.0-3.10.0 | | [Amazon EKS](./docs/providers/eks) | -| | NotSupported | < 1.25 | < 3.8.0 | | [Amazon EKS](./docs/providers/eks) | -| IBM Cloud | Production | 1.29-1.31 | >= 3.11.0 | | | -| | EOL | 1.25-1.28 | 3.9.0-3.10.0 | | | -| | NotSupported | < 1.25 | < 3.8.0 | | | -| OpenShift | Production | 4.11-4.17 | >= 3.11.0 | | | -| | EOL | 4.2-4.11 | 3.9.0-3.10.0 | | | -| | NotSupported | < 4.2 | < 3.8.0 | | | -| BareMetal (kubeadm) | Production | 1.28-1.31 | >= 3.11.0 | | | -| | EOL | 1.25-1.27 | 3.9.0-3.10.0 | | | -| | NotSupported | < 1.25 | < 3.8.0 | | | -| Minikube | Devel Only | 1.28-1.31 | >= 3.11.0 | | | -| | EOL | 1.25-1.27 | 3.9.0-3.10.0 | | | -| | NotSupported | < 1.25 | < 3.8.0 | | | -| Other | Production | 1.28-1.31 | >= 3.11.0 | | | -| | EOL | 1.25-1.27 | 3.9.0-3.10.0 | | | -| | NotSupported | < 1.25 | < 3.8.0 | | | +| Platform | State | Kubernetes Version | ArangoDB Version | Remarks | Provider Remarks | +|:--- |:--- |:--- |:--- |:--- |:--- | +| Google GKE | Production | 1.28-1.31 | >= 3.11.0 | Don't use micro nodes | | +| | EOL | 1.25-1.27 | 3.9.0-3.10.0 | Don't use micro nodes | | +| | NotSupported | < 1.25 | < 3.8.0 | Don't use micro nodes | | +| Azure AKS | Production | 1.28-1.32 | >= 3.11.0 | | | +| | EOL | 1.25-1.27 | 3.9.0-3.10.0 | | | +| | NotSupported | < 1.25 | < 3.8.0 | | | +| Amazon EKS | Production | 1.28-1.31 | >= 3.11.0 | | [Amazon EKS](./docs/providers/eks) | +| | EOL | 1.25-1.27 | 3.9.0-3.10.0 | | [Amazon EKS](./docs/providers/eks) | +| | NotSupported | < 1.25 | < 3.8.0 | | [Amazon EKS](./docs/providers/eks) | +| IBM Cloud | Production | 1.29-1.31 | >= 3.11.0 | | | +| | EOL | 1.25-1.28 | 3.9.0-3.10.0 | | | +| | NotSupported | < 1.25 | < 3.8.0 | | | +| OpenShift | Production | 4.11-4.17 | >= 3.11.0 | | | +| | EOL | 4.2-4.11 | 3.9.0-3.10.0 | | | +| | NotSupported | < 4.2 | < 3.8.0 | | | +| BareMetal (kubeadm) | Production | 1.28-1.31 | >= 3.11.0 | | | +| | EOL | 1.25-1.27 | 3.9.0-3.10.0 | | | +| | NotSupported | < 1.25 | < 3.8.0 | | | +| Minikube | Devel Only | 1.28-1.31 | >= 3.11.0 | | | +| | EOL | 1.25-1.27 | 3.9.0-3.10.0 | | | +| | NotSupported | < 1.25 | < 3.8.0 | | | +| Other | Production | 1.28-1.31 | >= 3.11.0 | | | +| | EOL | 1.25-1.27 | 3.9.0-3.10.0 | | | +| | NotSupported | < 1.25 | < 3.8.0 | | | [END_INJECT]: # (kubernetesVersionsTable) @@ -85,37 +85,38 @@ covers individual newer features separately. [START_INJECT]: # (featuresCommunityTable) -| Feature | Operator Version | Introduced | ArangoDB Version | ArangoDB Edition | State | Enabled | Flag | Remarks | -|:------------------------------------------------------------------------------|:-----------------|:-----------|:-----------------|:----------------------|:-------------|:--------|:-------------------------------------------------------|:------------------------------------------------------------------------------------------| -| Gateway | 1.2.43 | 1.2.43 | >= 3.8.0 | Community, Enterprise | Alpha | True | N/A | Support for ArangoDeployment Gateway Group | -| Cleanup Imported Backups | 1.2.41 | 1.2.41 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.backup-cleanup | Cleanup backups created outside of the Operator and imported into Kubernetes ArangoBackup | -| Upscale resources spec in init containers | 1.2.36 | 1.2.36 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.init-containers-upscale-resources | Upscale resources spec to built-in init containers if they are not specified or lower | -| Create backups asynchronously | 1.2.35 | 1.2.41 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.async-backup-creation | Create backups asynchronously to avoid blocking the operator and reaching the timeout | -| Enforced ResignLeadership | 1.2.34 | 1.2.34 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.enforced-resign-leadership | Enforce ResignLeadership and ensure that Leaders are moved from restarted DBServer | -| Copy resources spec to init containers | 1.2.33 | 1.2.33 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.init-containers-copy-resources | Copy resources spec to built-in init containers if they are not specified | -| [Rebalancer V2](docs/features/rebalancer_v2.md) | 1.2.31 | 1.2.31 | >= 3.10.0 | Community, Enterprise | Alpha | False | --deployment.feature.rebalancer-v2 | N/A | -| [Secured containers](docs/features/secured_containers.md) | 1.2.31 | 1.2.31 | >= 3.8.0 | Community, Enterprise | Alpha | False | --deployment.feature.secured-containers | If set to True Operator will run containers in secure mode | -| Version Check V2 | 1.2.31 | 1.2.31 | >= 3.8.0 | Community, Enterprise | Alpha | False | --deployment.feature.upgrade-version-check-V2 | N/A | -| [Operator Ephemeral Volumes](docs/features/ephemeral_volumes.md) | 1.2.31 | 1.2.2 | >= 3.8.0 | Community, Enterprise | Beta | False | --deployment.feature.ephemeral-volumes | N/A | -| [Force Rebuild Out Synced Shards](docs/features/rebuild_out_synced_shards.md) | 1.2.27 | 1.2.27 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.force-rebuild-out-synced-shards | It should be used only if user is aware of the risks. | -| [Spec Default Restore](docs/features/deployment_spec_defaults.md) | 1.2.25 | 1.2.21 | >= 3.8.0 | Community, Enterprise | Beta | True | --deployment.feature.deployment-spec-defaults-restore | If set to False Operator will not change ArangoDeployment Spec | -| Version Check | 1.2.23 | 1.1.4 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.upgrade-version-check | N/A | -| [Failover Leader service](docs/features/failover_leader_service.md) | 1.2.13 | 1.2.13 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.failover-leadership | N/A | -| Graceful Restart | 1.2.5 | 1.0.7 | >= 3.8.0 | Community, Enterprise | Production | True | ---deployment.feature.graceful-shutdown | N/A | -| Optional Graceful Restart | 1.2.0 | 1.2.5 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.optional-graceful-shutdown | N/A | -| Operator Internal Metrics Exporter | 1.2.0 | 1.2.0 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.metrics-exporter | N/A | -| Operator Maintenance Management Support | 1.2.0 | 1.0.7 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.maintenance | N/A | -| Encryption Key Rotation Support | 1.2.0 | 1.0.3 | >= 3.8.0 | Enterprise | NotSupported | False | --deployment.feature.encryption-rotation | N/A | -| TLS Runtime Rotation Support | 1.1.0 | 1.0.4 | >= 3.8.0 | Enterprise | Production | True | --deployment.feature.tls-rotation | N/A | -| JWT Rotation Support | 1.1.0 | 1.0.3 | >= 3.8.0 | Enterprise | Production | True | --deployment.feature.jwt-rotation | N/A | -| Operator Single Mode | 1.0.4 | 1.0.4 | >= 3.8.0 | Community, Enterprise | Production | False | --mode.single | Only 1 instance of Operator allowed in namespace when feature is enabled | -| TLS SNI Support | 1.0.3 | 1.0.3 | >= 3.8.0 | Enterprise | Production | True | --deployment.feature.tls-sni | N/A | -| Disabling of liveness probes | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | -| Pod Disruption Budgets | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | -| Prometheus Metrics Exporter | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | Prometheus required | -| Sidecar Containers | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | -| Volume Claim Templates | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | -| Volume Resizing | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | +| Feature | Operator Version | Introduced | ArangoDB Version | ArangoDB Edition | State | Enabled | Flag | Remarks | +|:--- |:--- |:--- |:--- |:--- |:--- |:--- |:--- |:--- | +| Gateway | 1.2.43 | 1.2.43 | >= 3.8.0 | Community, Enterprise | Alpha | True | N/A | Support for ArangoDeployment Gateway Group | +| Cleanup Imported Backups | 1.2.41 | 1.2.41 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.backup-cleanup | Cleanup backups created outside of the Operator and imported into Kubernetes ArangoBackup | +| Upscale resources spec in init containers | 1.2.36 | 1.2.36 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.init-containers-upscale-resources | Upscale resources spec to built-in init containers if they are not specified or lower | +| Create backups asynchronously | 1.2.35 | 1.2.41 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.async-backup-creation | Create backups asynchronously to avoid blocking the operator and reaching the timeout | +| Enforced ResignLeadership | 1.2.34 | 1.2.34 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.enforced-resign-leadership | Enforce ResignLeadership and ensure that Leaders are moved from restarted DBServer | +| Copy resources spec to init containers | 1.2.33 | 1.2.33 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.init-containers-copy-resources | Copy resources spec to built-in init containers if they are not specified | +| [Rebalancer V2](docs/features/rebalancer_v2.md) | 1.2.31 | 1.2.31 | >= 3.10.0 | Community, Enterprise | Alpha | False | --deployment.feature.rebalancer-v2 | N/A | +| [Secured containers](docs/features/secured_containers.md) | 1.2.31 | 1.2.31 | >= 3.8.0 | Community, Enterprise | Alpha | False | --deployment.feature.secured-containers | If set to True Operator will run containers in secure mode | +| Version Check V2 | 1.2.31 | 1.2.31 | >= 3.8.0 | Community, Enterprise | Alpha | False | --deployment.feature.upgrade-version-check-V2 | N/A | +| [Operator Ephemeral Volumes](docs/features/ephemeral_volumes.md) | 1.2.31 | 1.2.2 | >= 3.8.0 | Community, Enterprise | Beta | False | --deployment.feature.ephemeral-volumes | N/A | +| [Force Rebuild Out Synced Shards](docs/features/rebuild_out_synced_shards.md) | 1.2.27 | 1.2.27 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.force-rebuild-out-synced-shards | It should be used only if user is aware of the risks. | +| [Spec Default Restore](docs/features/deployment_spec_defaults.md) | 1.2.25 | 1.2.21 | >= 3.8.0 | Community, Enterprise | Beta | True | --deployment.feature.deployment-spec-defaults-restore | If set to False Operator will not change ArangoDeployment Spec | +| Version Check | 1.2.23 | 1.1.4 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.upgrade-version-check | N/A | +| [Failover Leader service](docs/features/failover_leader_service.md) | 1.2.13 | 1.2.13 | < 3.12.0 | Community, Enterprise | Production | False | --deployment.feature.failover-leadership | N/A | +| Graceful Restart | 1.2.5 | 1.0.7 | >= 3.8.0 | Community, Enterprise | Production | True | ---deployment.feature.graceful-shutdown | N/A | +| Optional Graceful Restart | 1.2.0 | 1.2.5 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.optional-graceful-shutdown | N/A | +| Operator Internal Metrics Exporter | 1.2.0 | 1.2.0 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.metrics-exporter | N/A | +| Operator Maintenance Management Support | 1.2.0 | 1.0.7 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.maintenance | N/A | +| Encryption Key Rotation Support | 1.2.0 | 1.0.3 | >= 3.8.0 | Enterprise | NotSupported | False | --deployment.feature.encryption-rotation | N/A | +| TLS Runtime Rotation Support | 1.1.0 | 1.0.4 | >= 3.8.0 | Enterprise | Production | True | --deployment.feature.tls-rotation | N/A | +| JWT Rotation Support | 1.1.0 | 1.0.3 | >= 3.8.0 | Enterprise | Production | True | --deployment.feature.jwt-rotation | N/A | +| Operator Single Mode | 1.0.4 | 1.0.4 | >= 3.8.0 | Community, Enterprise | Production | False | --mode.single | Only 1 instance of Operator allowed in namespace when feature is enabled | +| TLS SNI Support | 1.0.3 | 1.0.3 | >= 3.8.0 | Enterprise | Production | True | --deployment.feature.tls-sni | N/A | +| ActiveFailover Support | 1.0.0 | 1.0.0 | < 3.12.0 | Community, Enterprise | Production | True | --deployment.feature.active-failover | N/A | +| Disabling of liveness probes | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | +| Pod Disruption Budgets | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | +| Prometheus Metrics Exporter | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | Prometheus required | +| Sidecar Containers | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | +| Volume Claim Templates | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | +| Volume Resizing | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | [END_INJECT]: # (featuresCommunityTable) @@ -125,13 +126,13 @@ To upgrade to the Enterprise Edition, you need to get in touch with the ArangoDB [START_INJECT]: # (featuresEnterpriseTable) -| Feature | Operator Version | Introduced | ArangoDB Version | ArangoDB Edition | State | Enabled | Flag | Remarks | -|:-------------------------------------------------------|:-----------------|:-----------|:-----------------|:-----------------|:-----------|:--------|:-----|:----------------------------------------------------------------------------| -| ArangoML integration | 1.2.36 | 1.2.36 | >= 3.8.0 | Enterprise | Alpha | True | N/A | Support for ArangoML CRDs | -| AgencyCache | 1.2.30 | 1.2.30 | >= 3.8.0 | Enterprise | Production | True | N/A | Enable Agency Cache mechanism in the Operator (Increase limit of the nodes) | -| Member Maintenance Support | 1.2.25 | 1.2.16 | >= 3.8.0 | Enterprise | Production | True | N/A | Enable Member Maintenance during planned restarts | -| [Rebalancer](docs/features/rebalancer.md) | 1.2.15 | 1.2.5 | >= 3.8.0 | Enterprise | Production | True | N/A | N/A | -| [TopologyAwareness](docs/design/topology_awareness.md) | 1.2.4 | 1.2.4 | >= 3.8.0 | Enterprise | Production | True | N/A | N/A | +| Feature | Operator Version | Introduced | ArangoDB Version | ArangoDB Edition | State | Enabled | Flag | Remarks | +|:--- |:--- |:--- |:--- |:--- |:--- |:--- |:--- |:--- | +| ArangoML integration | 1.2.36 | 1.2.36 | >= 3.8.0 | Enterprise | Alpha | True | N/A | Support for ArangoML CRDs | +| AgencyCache | 1.2.30 | 1.2.30 | >= 3.8.0 | Enterprise | Production | True | N/A | Enable Agency Cache mechanism in the Operator (Increase limit of the nodes) | +| Member Maintenance Support | 1.2.25 | 1.2.16 | >= 3.8.0 | Enterprise | Production | True | N/A | Enable Member Maintenance during planned restarts | +| [Rebalancer](docs/features/rebalancer.md) | 1.2.15 | 1.2.5 | >= 3.8.0 | Enterprise | Production | True | N/A | N/A | +| [TopologyAwareness](docs/design/topology_awareness.md) | 1.2.4 | 1.2.4 | >= 3.8.0 | Enterprise | Production | True | N/A | N/A | [END_INJECT]: # (featuresEnterpriseTable) @@ -157,28 +158,29 @@ Flags: --crd.install Install missing CRD if access is possible (default true) --crd.preserve-unknown-fields stringArray Controls which CRD should have enabled preserve unknown fields in validation schema =. To apply for all, use crd-name 'all'. --crd.validation-schema stringArray Overrides default set of CRDs which should have validation schema enabled =. To apply for all, use crd-name 'all'. - --deployment.feature.agency-poll Enable Agency Poll for Enterprise deployments - Required ArangoDB 3.8.0 or higher (default true) + --deployment.feature.active-failover Support for ActiveFailover mode - Required ArangoDB >= 3.8.0, < 3.12 (default true) + --deployment.feature.agency-poll Enable Agency Poll for Enterprise deployments - Required ArangoDB >= 3.8.0 (default true) --deployment.feature.all Enable ALL Features - --deployment.feature.async-backup-creation Create backups asynchronously to avoid blocking the operator and reaching the timeout - Required ArangoDB 3.8.0 or higher (default true) - --deployment.feature.backup-cleanup Cleanup imported backups if required - Required ArangoDB 3.8.0 or higher - --deployment.feature.deployment-spec-defaults-restore Restore defaults from last accepted state of deployment - Required ArangoDB 3.8.0 or higher (default true) - --deployment.feature.enforced-resign-leadership Enforce ResignLeadership and ensure that Leaders are moved from restarted DBServer - Required ArangoDB 3.8.0 or higher (default true) - --deployment.feature.ephemeral-volumes Enables ephemeral volumes for apps and tmp directory - Required ArangoDB 3.8.0 or higher - --deployment.feature.failover-leadership Support for leadership in fail-over mode - Required ArangoDB 3.8.0 or higher - --deployment.feature.init-containers-copy-resources Copy resources spec to built-in init containers if they are not specified - Required ArangoDB 3.8.0 or higher (default true) - --deployment.feature.init-containers-upscale-resources Copy resources spec to built-in init containers if they are not specified or lower - Required ArangoDB 3.8.0 or higher (default true) - --deployment.feature.local-storage.pass-reclaim-policy [LocalStorage] Pass ReclaimPolicy from StorageClass instead of using hardcoded Retain - Required ArangoDB 3.8.0 or higher - --deployment.feature.local-volume-replacement-check Replace volume for local-storage if volume is unschedulable (ex. node is gone) - Required ArangoDB 3.8.0 or higher - --deployment.feature.random-pod-names Enables generating random pod names - Required ArangoDB 3.8.0 or higher - --deployment.feature.rebalancer-v2 Rebalancer V2 feature - Required ArangoDB 3.10.0 or higher - --deployment.feature.restart-policy-always Allow to restart containers with always restart policy - Required ArangoDB 3.8.0 or higher - --deployment.feature.secured-containers Create server's containers with non root privileges. It enables 'ephemeral-volumes' feature implicitly - Required ArangoDB 3.8.0 or higher - --deployment.feature.sensitive-information-protection Hide sensitive information from metrics and logs - Required ArangoDB 3.8.0 or higher - --deployment.feature.short-pod-names Enable Short Pod Names - Required ArangoDB 3.8.0 or higher - --deployment.feature.timezone-management Enable timezone management for pods - Required ArangoDB 3.8.0 or higher - --deployment.feature.tls-sni TLS SNI Support - Required ArangoDB EE 3.8.0 or higher (default true) - --deployment.feature.upgrade-version-check Enable initContainer with pre version check - Required ArangoDB 3.8.0 or higher (default true) - --deployment.feature.upgrade-version-check-v2 Enable initContainer with pre version check based by Operator - Required ArangoDB 3.8.0 or higher + --deployment.feature.async-backup-creation Create backups asynchronously to avoid blocking the operator and reaching the timeout - Required ArangoDB >= 3.8.0 (default true) + --deployment.feature.backup-cleanup Cleanup imported backups if required - Required ArangoDB >= 3.8.0 + --deployment.feature.deployment-spec-defaults-restore Restore defaults from last accepted state of deployment - Required ArangoDB >= 3.8.0 (default true) + --deployment.feature.enforced-resign-leadership Enforce ResignLeadership and ensure that Leaders are moved from restarted DBServer - Required ArangoDB >= 3.8.0 (default true) + --deployment.feature.ephemeral-volumes Enables ephemeral volumes for apps and tmp directory - Required ArangoDB >= 3.8.0 + --deployment.feature.failover-leadership Support for leadership in fail-over mode - Required ArangoDB >= 3.8.0, < 3.12 + --deployment.feature.init-containers-copy-resources Copy resources spec to built-in init containers if they are not specified - Required ArangoDB >= 3.8.0 (default true) + --deployment.feature.init-containers-upscale-resources Copy resources spec to built-in init containers if they are not specified or lower - Required ArangoDB >= 3.8.0 (default true) + --deployment.feature.local-storage.pass-reclaim-policy [LocalStorage] Pass ReclaimPolicy from StorageClass instead of using hardcoded Retain - Required ArangoDB >= 3.8.0 + --deployment.feature.local-volume-replacement-check Replace volume for local-storage if volume is unschedulable (ex. node is gone) - Required ArangoDB >= 3.8.0 + --deployment.feature.random-pod-names Enables generating random pod names - Required ArangoDB >= 3.8.0 + --deployment.feature.rebalancer-v2 Rebalancer V2 feature - Required ArangoDB >= 3.10.0 + --deployment.feature.restart-policy-always Allow to restart containers with always restart policy - Required ArangoDB >= 3.8.0 + --deployment.feature.secured-containers Create server's containers with non root privileges. It enables 'ephemeral-volumes' feature implicitly - Required ArangoDB >= 3.8.0 + --deployment.feature.sensitive-information-protection Hide sensitive information from metrics and logs - Required ArangoDB >= 3.8.0 + --deployment.feature.short-pod-names Enable Short Pod Names - Required ArangoDB >= 3.8.0 + --deployment.feature.timezone-management Enable timezone management for pods - Required ArangoDB >= 3.8.0 + --deployment.feature.tls-sni TLS SNI Support - Required ArangoDB EE >= 3.8.0 (default true) + --deployment.feature.upgrade-version-check Enable initContainer with pre version check - Required ArangoDB >= 3.8.0 (default true) + --deployment.feature.upgrade-version-check-v2 Enable initContainer with pre version check based by Operator - Required ArangoDB >= 3.8.0 --features-config-map-name string Name of the Feature Map ConfigMap (default "arangodb-operator-feature-config-map") --http1.keep-alive If false, disables HTTP keep-alives and will only use the connection to the server for a single HTTP request (default true) --http1.transport.dial-timeout duration Maximum amount of time a dial will wait for a connect to complete (default 30s) @@ -195,7 +197,7 @@ Flags: --kubernetes.max-batch-size int Size of batch during objects read (default 256) --kubernetes.qps float32 Number of queries per second for k8s API (default 15) --log.format string Set log format. Allowed values: 'pretty', 'JSON'. If empty, default format is used (default "pretty") - --log.level stringArray Set log levels in format or =. Possible loggers: action, agency, api-server, assertion, backup-operator, chaos-monkey, crd, deployment, deployment-ci, deployment-reconcile, deployment-replication, deployment-resilience, deployment-resources, deployment-storage, deployment-storage-pc, deployment-storage-service, generic-parent-operator, http, inspector, integration-config-v1, integration-envoy-auth-v3, integrations, k8s-client, kubernetes-informer, monitor, networking-route-operator, operator, operator-arangojob-handler, operator-v2, operator-v2-event, operator-v2-worker, panics, pod_compare, root, root-event-recorder, scheduler-batchjob-operator, scheduler-cronjob-operator, scheduler-deployment-operator, scheduler-pod-operator, scheduler-profile-operator, server, server-authentication (default [info]) + --log.level stringArray Set log levels in format or =. Possible loggers: action, agency, api-server, assertion, backup-operator, chaos-monkey, crd, deployment, deployment-ci, deployment-reconcile, deployment-replication, deployment-resilience, deployment-resources, deployment-storage, deployment-storage-pc, deployment-storage-service, generic-parent-operator, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, integration-storage-v1-s3, integration-storage-v2, integrations, k8s-client, kubernetes-informer, monitor, networking-route-operator, operator, operator-arangojob-handler, operator-v2, operator-v2-event, operator-v2-worker, panics, platform-chart-operator, platform-pod-shutdown, platform-storage-operator, pod_compare, root, root-event-recorder, scheduler-batchjob-operator, scheduler-cronjob-operator, scheduler-deployment-operator, scheduler-pod-operator, scheduler-profile-operator, server, server-authentication, webhook (default [info]) --log.sampling If true, operator will try to minimize duplication of logging events (default true) --memory-limit uint Define memory limit for hard shutdown and the dump of goroutines. Used for testing --metrics.excluded-prefixes stringArray List of the excluded metrics prefixes @@ -207,6 +209,7 @@ Flags: --operator.deployment-replication Enable to run the ArangoDeploymentReplication operator --operator.ml Enable to run the ArangoML operator --operator.networking Enable to run the Networking operator + --operator.platform Enable to run the Platform operator --operator.reconciliation.retry.count int Count of retries during Object Update operations in the Reconciliation loop (default 25) --operator.reconciliation.retry.delay duration Delay between Object Update operations in the Reconciliation loop (default 1s) --operator.scheduler Enable to run the Scheduler operator @@ -239,8 +242,8 @@ Flags: ### Installation and Usage Docker images: -- Community Edition: `arangodb/kube-arangodb:1.2.43` -- Enterprise Edition: `arangodb/kube-arangodb-enterprise:1.2.43` +- Community Edition: `arangodb/kube-arangodb:1.2.44` +- Enterprise Edition: `arangodb/kube-arangodb-enterprise:1.2.44` ### Installation of latest release using Kubectl @@ -249,22 +252,22 @@ running ArangoDB deployments. ##### Community Edition ```bash -kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.43/manifests/arango-crd.yaml -kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.43/manifests/arango-deployment.yaml +kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.44/manifests/arango-crd.yaml +kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.44/manifests/arango-deployment.yaml # To use `ArangoLocalStorage`, also run -kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.43/manifests/arango-storage.yaml +kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.44/manifests/arango-storage.yaml # To use `ArangoDeploymentReplication`, also run -kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.43/manifests/arango-deployment-replication.yaml +kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.44/manifests/arango-deployment-replication.yaml ``` ##### Enterprise Edition ```bash -kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.43/manifests/enterprise-crd.yaml -kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.43/manifests/enterprise-deployment.yaml +kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.44/manifests/enterprise-crd.yaml +kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.44/manifests/enterprise-deployment.yaml # To use `ArangoLocalStorage`, also run -kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.43/manifests/enterprise-storage.yaml +kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.44/manifests/enterprise-storage.yaml # To use `ArangoDeploymentReplication`, also run -kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.43/manifests/enterprise-deployment-replication.yaml +kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/1.2.44/manifests/enterprise-deployment-replication.yaml ``` ### Installation of latest release using kustomize @@ -283,8 +286,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: my-custom-namespace resources: - - https://github.com/arangodb/kube-arangodb/manifests/kustomize/crd?ref=1.2.36 - - https://github.com/arangodb/kube-arangodb/manifests/kustomize/deployment?ref=1.2.36 + - https://github.com/arangodb/kube-arangodb/manifests/kustomize/crd?ref=1.2.44 + - https://github.com/arangodb/kube-arangodb/manifests/kustomize/deployment?ref=1.2.44 ``` ##### Enterprise Edition example @@ -293,8 +296,8 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: my-custom-namespace resources: - - https://github.com/arangodb/kube-arangodb/manifests/kustomize-enterprise/crd?ref=1.2.36 - - https://github.com/arangodb/kube-arangodb/manifests/kustomize-enterprise/deployment?ref=1.2.36 + - https://github.com/arangodb/kube-arangodb/manifests/kustomize-enterprise/crd?ref=1.2.44 + - https://github.com/arangodb/kube-arangodb/manifests/kustomize-enterprise/deployment?ref=1.2.44 ``` ### Installation of latest release using Helm @@ -330,17 +333,17 @@ helm install --generate-name kube-arangodb/kube-arangodb-enterprise --set "opera ##### Community Edition ```bash # The following will install the operator and basic CRDs resources. -helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.43/kube-arangodb-1.2.43.tgz +helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.44/kube-arangodb-1.2.44.tgz # To use `ArangoLocalStorage`, set field `operator.features.storage` to true -helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.43/kube-arangodb-1.2.43.tgz --set "operator.features.storage=true" +helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.44/kube-arangodb-1.2.44.tgz --set "operator.features.storage=true" ``` ##### Enterprise Edition ```bash # The following will install the operator and basic CRDs resources. -helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.43/kube-arangodb-enterprise-1.2.43.tgz +helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.44/kube-arangodb-enterprise-1.2.44.tgz # To use `ArangoLocalStorage`, set field `operator.features.storage` to true -helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.43/kube-arangodb-enterprise-1.2.43.tgz --set "operator.features.storage=true" +helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.44/kube-arangodb-enterprise-1.2.44.tgz --set "operator.features.storage=true" ``` ### Upgrading the operator using Helm @@ -369,17 +372,17 @@ Then you can install the new version with `helm install` as normal: ##### Community Edition ```bash # The following will install the operator and basic CRDs resources. -helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.43/kube-arangodb-1.2.43.tgz +helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.44/kube-arangodb-1.2.44.tgz # To use `ArangoLocalStorage`, set field `operator.features.storage` to true -helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.43/kube-arangodb-1.2.43.tgz --set "operator.features.storage=true" +helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.44/kube-arangodb-1.2.44.tgz --set "operator.features.storage=true" ``` ##### Enterprise Edition ```bash # The following will install the operator and basic CRDs resources. -helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.43/kube-arangodb-enterprise-1.2.43.tgz +helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.44/kube-arangodb-enterprise-1.2.44.tgz # To use `ArangoLocalStorage`, set field `operator.features.storage` to true -helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.43/kube-arangodb-enterprise-1.2.43.tgz --set "operator.features.storage=true" +helm install --generate-name https://github.com/arangodb/kube-arangodb/releases/download/1.2.44/kube-arangodb-enterprise-1.2.44.tgz --set "operator.features.storage=true" ``` ## Building diff --git a/VERSION b/VERSION index bb3653fe5..457d1be03 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.43 \ No newline at end of file +1.2.44 \ No newline at end of file diff --git a/chart/kube-arangodb-arm64/Chart.yaml b/chart/kube-arangodb-arm64/Chart.yaml index 0623b1c69..2273ff5f7 100644 --- a/chart/kube-arangodb-arm64/Chart.yaml +++ b/chart/kube-arangodb-arm64/Chart.yaml @@ -1,5 +1,5 @@ # do not switch to V2 yet - we still need to support Helm 2 apiVersion: v1 name: kube-arangodb-arm64 -version: 1.2.43 +version: 1.2.44 description: "ArangoDB Kubernetes Operator with ARM64 defaults" diff --git a/chart/kube-arangodb-arm64/README.md b/chart/kube-arangodb-arm64/README.md index a912db933..1ec288ed0 100644 --- a/chart/kube-arangodb-arm64/README.md +++ b/chart/kube-arangodb-arm64/README.md @@ -189,6 +189,30 @@ Define if ArangoClusterSynchronization Operator should be enabled. Default: `false` +### `operator.features.ml` + +Define if ML Operator should be enabled. + +Default: `false` + +### `operator.features.analytics` + +Define if GAE Operator should be enabled. + +Default: `false` + +### `operator.features.networking` + +Define if ArangoNetworking Operator should be enabled. + +Default: `true` + +### `operator.features.scheduler` + +Define if ArangoScheduler Operator should be enabled. + +Default: `true` + ### `rbac.enabled` Define if RBAC should be enabled. @@ -199,7 +223,7 @@ Default: `true` List of supported architectures. -Default: `[]string{"amd64"}` +Default: `[]string{"arm64"}` # Limitations diff --git a/chart/kube-arangodb-arm64/crds/backups-backup.yaml b/chart/kube-arangodb-arm64/crds/backups-backup.yaml index 577574362..16625a363 100644 --- a/chart/kube-arangodb-arm64/crds/backups-backup.yaml +++ b/chart/kube-arangodb-arm64/crds/backups-backup.yaml @@ -57,47 +57,3 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.policyName - description: Policy name - name: Policy - type: string - - jsonPath: .spec.deployment.name - description: Deployment name - name: Deployment - type: string - - jsonPath: .status.backup.version - description: Backup Version - name: Version - type: string - - jsonPath: .status.backup.createdAt - description: Backup Creation Timestamp - name: Created - type: string - - jsonPath: .status.backup.sizeInBytes - description: Backup Size in Bytes - name: Size - type: integer - format: byte - - jsonPath: .status.backup.numberOfDBServers - description: Backup Number of the DB Servers - name: DBServers - type: integer - - jsonPath: .status.state - description: The actual state of the ArangoBackup - name: State - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackup object - name: Message - type: string - subresources: - status: {} diff --git a/chart/kube-arangodb-arm64/crds/backups-backuppolicy.yaml b/chart/kube-arangodb-arm64/crds/backups-backuppolicy.yaml index e0ca6c623..c0d759199 100644 --- a/chart/kube-arangodb-arm64/crds/backups-backuppolicy.yaml +++ b/chart/kube-arangodb-arm64/crds/backups-backuppolicy.yaml @@ -37,26 +37,3 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.schedule - description: Schedule - name: Schedule - type: string - - jsonPath: .status.scheduled - description: Scheduled - name: Scheduled - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackupPolicy object - name: Message - type: string - subresources: - status: {} diff --git a/chart/kube-arangodb-arm64/crds/database-deployment.yaml b/chart/kube-arangodb-arm64/crds/database-deployment.yaml index 22f9d1acf..5fc5a3883 100644 --- a/chart/kube-arangodb-arm64/crds/database-deployment.yaml +++ b/chart/kube-arangodb-arm64/crds/database-deployment.yaml @@ -21,13 +21,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/chart/kube-arangodb-arm64/crds/database-task.yaml b/chart/kube-arangodb-arm64/crds/database-task.yaml index 85d452000..ccab9cbad 100644 --- a/chart/kube-arangodb-arm64/crds/database-task.yaml +++ b/chart/kube-arangodb-arm64/crds/database-task.yaml @@ -18,13 +18,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/chart/kube-arangodb-arm64/crds/platform-chart.yaml b/chart/kube-arangodb-arm64/crds/platform-chart.yaml new file mode 100644 index 000000000..eb217d6b7 --- /dev/null +++ b/chart/kube-arangodb-arm64/crds/platform-chart.yaml @@ -0,0 +1,25 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformcharts.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformChart + listKind: ArangoPlatformChartList + plural: arangoplatformcharts + singular: arangoplatformchart + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas diff --git a/chart/kube-arangodb-arm64/crds/platform-storage.yaml b/chart/kube-arangodb-arm64/crds/platform-storage.yaml new file mode 100644 index 000000000..300226c85 --- /dev/null +++ b/chart/kube-arangodb-arm64/crds/platform-storage.yaml @@ -0,0 +1,22 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformstorages.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformStorage + listKind: ArangoPlatformStorageList + plural: arangoplatformstorages + singular: arangoplatformstorage + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} diff --git a/chart/kube-arangodb-arm64/crds/replication-deploymentreplication.yaml b/chart/kube-arangodb-arm64/crds/replication-deploymentreplication.yaml index e3918b355..26633936d 100644 --- a/chart/kube-arangodb-arm64/crds/replication-deploymentreplication.yaml +++ b/chart/kube-arangodb-arm64/crds/replication-deploymentreplication.yaml @@ -20,13 +20,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/chart/kube-arangodb-arm64/crds/scheduler-deployment.yaml b/chart/kube-arangodb-arm64/crds/scheduler-deployment.yaml index 0178e1c89..00464fb64 100644 --- a/chart/kube-arangodb-arm64/crds/scheduler-deployment.yaml +++ b/chart/kube-arangodb-arm64/crds/scheduler-deployment.yaml @@ -20,3 +20,6 @@ spec: storage: true subresources: status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas diff --git a/chart/kube-arangodb-arm64/templates/certificates/ca.yaml b/chart/kube-arangodb-arm64/templates/certificates/ca.yaml new file mode 100644 index 000000000..4755661e4 --- /dev/null +++ b/chart/kube-arangodb-arm64/templates/certificates/ca.yaml @@ -0,0 +1,22 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-ca + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + secretName: {{ template "kube-arangodb.operatorName" . }}-ca + duration: {{ .Values.certificate.ca.duration }} + issuerRef: + name: {{ template "kube-arangodb.operatorName" . }}-ca + commonName: {{ .Values.certificate.ca.commonName }} + isCA: true + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-arm64/templates/certificates/certificate.yaml b/chart/kube-arangodb-arm64/templates/certificates/certificate.yaml new file mode 100644 index 000000000..41e464054 --- /dev/null +++ b/chart/kube-arangodb-arm64/templates/certificates/certificate.yaml @@ -0,0 +1,24 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + secretName: {{ template "kube-arangodb.operatorName" . }}-cert + duration: {{ .Values.certificate.cert.duration }} + issuerRef: + name: {{ template "kube-arangodb.operatorName" . }} + dnsNames: + - {{ template "kube-arangodb.operatorName" . }} + - {{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }} + - {{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }}.svc + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-arm64/templates/certificates/issuer.ca.yaml b/chart/kube-arangodb-arm64/templates/certificates/issuer.ca.yaml new file mode 100644 index 000000000..0b3f33291 --- /dev/null +++ b/chart/kube-arangodb-arm64/templates/certificates/issuer.ca.yaml @@ -0,0 +1,17 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-ca + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + selfSigned: {} + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-arm64/templates/certificates/issuer.yaml b/chart/kube-arangodb-arm64/templates/certificates/issuer.yaml new file mode 100644 index 000000000..70957d54e --- /dev/null +++ b/chart/kube-arangodb-arm64/templates/certificates/issuer.yaml @@ -0,0 +1,18 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + ca: + secretName: {{ template "kube-arangodb.operatorName" . }}-ca + +{{- end }} diff --git a/chart/kube-arangodb-arm64/templates/deployment-operator/role.yaml b/chart/kube-arangodb-arm64/templates/deployment-operator/role.yaml index 18d5e8582..1452d38b5 100644 --- a/chart/kube-arangodb-arm64/templates/deployment-operator/role.yaml +++ b/chart/kube-arangodb-arm64/templates/deployment-operator/role.yaml @@ -16,9 +16,6 @@ rules: - apiGroups: ["database.arangodb.com"] resources: ["arangodeployments", "arangodeployments/status","arangomembers", "arangomembers/status"] verbs: ["*"] - - apiGroups: ["networking.arangodb.com"] - resources: ["arangoroutes", "arangoroutes/status"] - verbs: ["*"] {{- if .Values.rbac.extensions.acs }} - apiGroups: ["database.arangodb.com"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] @@ -41,6 +38,9 @@ rules: - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["*"] + - apiGroups: ["platform.arangodb.com"] + resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + verbs: ["get", "list", "watch"] - apiGroups: ["backup.arangodb.com"] resources: ["arangobackuppolicies", "arangobackups"] verbs: ["get", "list", "watch"] diff --git a/chart/kube-arangodb-arm64/templates/deployment.yaml b/chart/kube-arangodb-arm64/templates/deployment.yaml index 3488df768..a5d679039 100644 --- a/chart/kube-arangodb-arm64/templates/deployment.yaml +++ b/chart/kube-arangodb-arm64/templates/deployment.yaml @@ -93,6 +93,10 @@ spec: image: {{ .Values.operator.image }} args: - --scope={{ .Values.operator.scope }} +{{- if .Values.certificate.enabled }} + - --server.tls-secret-name={{ template "kube-arangodb.operatorName" . }}-cert + - --api.tls-secret-name={{ template "kube-arangodb.operatorName" . }}-cert +{{- end -}} {{- if .Values.operator.features.deployment }} - --operator.deployment {{- end -}} @@ -123,6 +127,9 @@ spec: {{ if .Values.operator.features.scheduler }} - --operator.scheduler {{- end }} +{{ if .Values.operator.features.platform }} + - --operator.platform +{{- end }} {{ if .Values.operator.features.k8sToK8sClusterSync }} - --operator.k2k-cluster-sync {{- end }} @@ -184,6 +191,67 @@ spec: scheme: HTTPS initialDelaySeconds: 5 periodSeconds: 10 +{{- end }} +{{ if .Values.webhooks.enabled }} + - name: webhooks + imagePullPolicy: {{ .Values.operator.imagePullPolicy }} + image: {{ .Values.operator.image }} + args: + - webhook +{{- if .Values.certificate.enabled }} + - --ssl.secret.name={{ template "kube-arangodb.operatorName" . }}-webhook-cert + - --ssl.secret.namespace={{ .Release.Namespace }} +{{- end -}} +{{- if .Values.webhooks.args }} +{{- range .Values.webhooks.args }} + - {{ . | quote }} +{{- end }} +{{- end }} + env: + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_CONTAINER_NAME + value: "webhooks" + - name: MY_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + ports: + - name: webhooks + containerPort: 8828 + securityContext: + privileged: false + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + capabilities: + drop: + - 'ALL' +{{- if .Values.webhooks.resources }} + resources: +{{ toYaml .Values.webhooks.resources | indent 22 }} +{{- end }} +{{- if not .Values.webhooks.debug }} + livenessProbe: + httpGet: + path: /health + port: 8828 + scheme: HTTPS + initialDelaySeconds: 5 + periodSeconds: 10 + readinessProbe: + httpGet: + path: /ready + port: 8828 + scheme: HTTPS + initialDelaySeconds: 5 + periodSeconds: 10 +{{- end }} {{- end }} tolerations: - key: "node.kubernetes.io/unreachable" diff --git a/chart/kube-arangodb-arm64/templates/networking-operator/role.yaml b/chart/kube-arangodb-arm64/templates/networking-operator/role.yaml index 38339a312..3da6b9dff 100644 --- a/chart/kube-arangodb-arm64/templates/networking-operator/role.yaml +++ b/chart/kube-arangodb-arm64/templates/networking-operator/role.yaml @@ -13,56 +13,11 @@ metadata: app.kubernetes.io/instance: {{ .Release.Name }} release: {{ .Release.Name }} rules: - - apiGroups: - - "ml.arangodb.com" - resources: - - "arangomlextensions" - - "arangomlextensions/status" - - "arangomlbatchjobs" - - "arangomlbatchjobs/status" - - "arangomlcronjobs" - - "arangomlcronjobs/status" - - "arangomlstorages" - - "arangomlstorages/status" - verbs: - - "*" - - apiGroups: - - "scheduler.arangodb.com" - resources: - - "arangoprofiles" - - "arangoprofiles/status" - verbs: - - "*" - - apiGroups: - - "database.arangodb.com" - resources: - - "arangodeployments" - verbs: - - "get" - - "list" - - "watch" - - apiGroups: - - "rbac.authorization.k8s.io" - resources: - - "roles" - - "rolebindings" - verbs: ["*"] - - apiGroups: - - "batch" - resources: - - "cronjobs" - - "jobs" - verbs: ["*"] - - apiGroups: ["apps"] - resources: - - "statefulsets" - verbs: ["*"] - - apiGroups: [""] - resources: - - "pods" - - "secrets" - - "services" - - "serviceaccounts" - verbs: ["*"] + - apiGroups: ["networking.arangodb.com"] + resources: ["arangoroutes", "arangoroutes/status"] + verbs: ["*"] + - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] {{- end }} {{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-arm64/templates/platform-operator/cluster-role-binding.yaml b/chart/kube-arangodb-arm64/templates/platform-operator/cluster-role-binding.yaml new file mode 100644 index 000000000..200625d04 --- /dev/null +++ b/chart/kube-arangodb-arm64/templates/platform-operator/cluster-role-binding.yaml @@ -0,0 +1,26 @@ +{{ if .Values.rbac.enabled -}} +{{ if not (eq .Values.operator.scope "namespaced") -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "kube-arangodb.rbac-cluster" . }}-platform + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "kube-arangodb.rbac-cluster" . }}-platform +subjects: + - kind: ServiceAccount + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + +{{- end }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-arm64/templates/platform-operator/cluster-role.yaml b/chart/kube-arangodb-arm64/templates/platform-operator/cluster-role.yaml new file mode 100644 index 000000000..ee3202c4d --- /dev/null +++ b/chart/kube-arangodb-arm64/templates/platform-operator/cluster-role.yaml @@ -0,0 +1,22 @@ +{{ if .Values.rbac.enabled -}} +{{ if not (eq .Values.operator.scope "namespaced") -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "kube-arangodb.rbac-cluster" . }}-platform + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +rules: + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["get", "list", "watch"] + +{{- end }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-arm64/templates/platform-operator/role-binding.yaml b/chart/kube-arangodb-arm64/templates/platform-operator/role-binding.yaml new file mode 100644 index 000000000..7eae42709 --- /dev/null +++ b/chart/kube-arangodb-arm64/templates/platform-operator/role-binding.yaml @@ -0,0 +1,25 @@ +{{ if .Values.rbac.enabled -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ template "kube-arangodb.rbac" . }}-platform + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ template "kube-arangodb.rbac" . }}-platform +subjects: + - kind: ServiceAccount + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-arm64/templates/platform-operator/role.yaml b/chart/kube-arangodb-arm64/templates/platform-operator/role.yaml new file mode 100644 index 000000000..dbcd866fe --- /dev/null +++ b/chart/kube-arangodb-arm64/templates/platform-operator/role.yaml @@ -0,0 +1,24 @@ +{{ if .Values.rbac.enabled -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ template "kube-arangodb.rbac" . }}-platform + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +rules: + - apiGroups: ["platform.arangodb.com"] + resources: + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/status" + verbs: ["*"] +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-arm64/templates/service-webhooks.yaml b/chart/kube-arangodb-arm64/templates/service-webhooks.yaml new file mode 100644 index 000000000..7d186845c --- /dev/null +++ b/chart/kube-arangodb-arm64/templates/service-webhooks.yaml @@ -0,0 +1,31 @@ +{{ if .Values.webhooks.enabled }} + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-webhook + namespace: {{ .Release.Namespace }} +{{- if .Values.operator.annotations }} + annotations: +{{ toYaml .Values.operator.annotations | indent 8 }} +{{- end }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + ports: + - name: webhooks + port: 443 + protocol: TCP + targetPort: webhooks + selector: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} + type: ClusterIP + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-arm64/templates/webhook/certificate.yaml b/chart/kube-arangodb-arm64/templates/webhook/certificate.yaml new file mode 100644 index 000000000..371ce5b29 --- /dev/null +++ b/chart/kube-arangodb-arm64/templates/webhook/certificate.yaml @@ -0,0 +1,24 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-webhook + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + secretName: {{ template "kube-arangodb.operatorName" . }}-webhook-cert + duration: {{ .Values.certificate.cert.duration }} + issuerRef: + name: {{ template "kube-arangodb.operatorName" . }} + dnsNames: + - {{ template "kube-arangodb.operatorName" . }}-webhook + - {{ template "kube-arangodb.operatorName" . }}-webhook.{{ .Release.Namespace }} + - {{ template "kube-arangodb.operatorName" . }}-webhook.{{ .Release.Namespace }}.svc + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-arm64/templates/webhook/mutation.yaml b/chart/kube-arangodb-arm64/templates/webhook/mutation.yaml new file mode 100644 index 000000000..27efd0821 --- /dev/null +++ b/chart/kube-arangodb-arm64/templates/webhook/mutation.yaml @@ -0,0 +1,67 @@ +{{ if .Values.webhooks.enabled }} + +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + name: "{{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }}.operator.arangodb.com" + annotations: + cert-manager.io/inject-ca-from: "{{ .Release.Namespace }}/{{ template "kube-arangodb.operatorName" . }}-ca" + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +webhooks: + - name: "pods.policies.scheduler.arangodb.com" + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: In + values: + - {{ .Release.Namespace }} + objectSelector: + matchExpressions: + - key: profiles.arangodb.com/deployment + operator: Exists + rules: + - apiGroups: [""] + apiVersions: ["v1"] + operations: ["CREATE"] + resources: ["pods"] + scope: "Namespaced" + clientConfig: + service: + namespace: {{ .Release.Namespace }} + name: {{ template "kube-arangodb.operatorName" . }}-webhook + path: /webhook/core/v1/pods/policies/mutate + admissionReviewVersions: ["v1"] + sideEffects: None + timeoutSeconds: 5 + - name: "generic.pod.policies.scheduler.arangodb.com" + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: In + values: + - {{ .Release.Namespace }} + objectSelector: + matchExpressions: + - key: profiles.arangodb.com/apply + operator: Exists + rules: + - apiGroups: [""] + apiVersions: ["v1"] + operations: ["CREATE"] + resources: ["pods"] + scope: "Namespaced" + clientConfig: + service: + namespace: {{ .Release.Namespace }} + name: {{ template "kube-arangodb.operatorName" . }}-webhook + path: /webhook/core/v1/pods/policies/mutate + admissionReviewVersions: ["v1"] + sideEffects: None + timeoutSeconds: 5 + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-arm64/templates/webhook/validation.yaml b/chart/kube-arangodb-arm64/templates/webhook/validation.yaml new file mode 100644 index 000000000..0c791cacc --- /dev/null +++ b/chart/kube-arangodb-arm64/templates/webhook/validation.yaml @@ -0,0 +1,17 @@ +{{ if .Values.webhooks.enabled }} + +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + name: "{{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }}.operator.arangodb.com" + annotations: + cert-manager.io/inject-ca-from: "{{ .Release.Namespace }}/{{ template "kube-arangodb.operatorName" . }}-ca" + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +webhooks: [] + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-arm64/values.yaml b/chart/kube-arangodb-arm64/values.yaml index 72ec93fbb..75a577455 100644 --- a/chart/kube-arangodb-arm64/values.yaml +++ b/chart/kube-arangodb-arm64/values.yaml @@ -1,5 +1,5 @@ operator: - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 imagePullPolicy: IfNotPresent imagePullSecrets: [] scope: legacy @@ -34,6 +34,8 @@ operator: k8sToK8sClusterSync: false ml: false analytics: false + networking: true + scheduler: true tolerations: [] rbac: enabled: true @@ -42,3 +44,20 @@ rbac: acs: true at: true debug: false +webhooks: + enabled: false + args: [] + resources: + limits: + cpu: 1 + memory: 128Mi + requests: + cpu: 250m + memory: 128Mi +certificate: + enabled: false + ca: + duration: 43800h + commonName: "kube-arangodb.operator.cert" + cert: + duration: 8760h diff --git a/chart/kube-arangodb-crd/Chart.yaml b/chart/kube-arangodb-crd/Chart.yaml index ae6470d0c..29a237353 100644 --- a/chart/kube-arangodb-crd/Chart.yaml +++ b/chart/kube-arangodb-crd/Chart.yaml @@ -1,5 +1,5 @@ name: kube-arangodb-crd -version: 1.2.43 +version: 1.2.44 description: "ArangoDB Kubernetes Custom Resource Definitions (Deprecated)" tillerVersion: ">2.7" appVersion: 3.5.0 diff --git a/chart/kube-arangodb-enterprise-arm64/Chart.yaml b/chart/kube-arangodb-enterprise-arm64/Chart.yaml index d059fd986..65fbdde17 100644 --- a/chart/kube-arangodb-enterprise-arm64/Chart.yaml +++ b/chart/kube-arangodb-enterprise-arm64/Chart.yaml @@ -1,5 +1,5 @@ # do not switch to V2 yet - we still need to support Helm 2 apiVersion: v1 name: kube-arangodb-enterprise-arm64 -version: 1.2.43 +version: 1.2.44 description: "ArangoDB Kubernetes Enterprise Operator with ARM64 defaults" diff --git a/chart/kube-arangodb-enterprise-arm64/README.md b/chart/kube-arangodb-enterprise-arm64/README.md index a912db933..1ec288ed0 100644 --- a/chart/kube-arangodb-enterprise-arm64/README.md +++ b/chart/kube-arangodb-enterprise-arm64/README.md @@ -189,6 +189,30 @@ Define if ArangoClusterSynchronization Operator should be enabled. Default: `false` +### `operator.features.ml` + +Define if ML Operator should be enabled. + +Default: `false` + +### `operator.features.analytics` + +Define if GAE Operator should be enabled. + +Default: `false` + +### `operator.features.networking` + +Define if ArangoNetworking Operator should be enabled. + +Default: `true` + +### `operator.features.scheduler` + +Define if ArangoScheduler Operator should be enabled. + +Default: `true` + ### `rbac.enabled` Define if RBAC should be enabled. @@ -199,7 +223,7 @@ Default: `true` List of supported architectures. -Default: `[]string{"amd64"}` +Default: `[]string{"arm64"}` # Limitations diff --git a/chart/kube-arangodb-enterprise-arm64/crds/backups-backup.yaml b/chart/kube-arangodb-enterprise-arm64/crds/backups-backup.yaml index 577574362..16625a363 100644 --- a/chart/kube-arangodb-enterprise-arm64/crds/backups-backup.yaml +++ b/chart/kube-arangodb-enterprise-arm64/crds/backups-backup.yaml @@ -57,47 +57,3 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.policyName - description: Policy name - name: Policy - type: string - - jsonPath: .spec.deployment.name - description: Deployment name - name: Deployment - type: string - - jsonPath: .status.backup.version - description: Backup Version - name: Version - type: string - - jsonPath: .status.backup.createdAt - description: Backup Creation Timestamp - name: Created - type: string - - jsonPath: .status.backup.sizeInBytes - description: Backup Size in Bytes - name: Size - type: integer - format: byte - - jsonPath: .status.backup.numberOfDBServers - description: Backup Number of the DB Servers - name: DBServers - type: integer - - jsonPath: .status.state - description: The actual state of the ArangoBackup - name: State - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackup object - name: Message - type: string - subresources: - status: {} diff --git a/chart/kube-arangodb-enterprise-arm64/crds/backups-backuppolicy.yaml b/chart/kube-arangodb-enterprise-arm64/crds/backups-backuppolicy.yaml index e0ca6c623..c0d759199 100644 --- a/chart/kube-arangodb-enterprise-arm64/crds/backups-backuppolicy.yaml +++ b/chart/kube-arangodb-enterprise-arm64/crds/backups-backuppolicy.yaml @@ -37,26 +37,3 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.schedule - description: Schedule - name: Schedule - type: string - - jsonPath: .status.scheduled - description: Scheduled - name: Scheduled - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackupPolicy object - name: Message - type: string - subresources: - status: {} diff --git a/chart/kube-arangodb-enterprise-arm64/crds/database-deployment.yaml b/chart/kube-arangodb-enterprise-arm64/crds/database-deployment.yaml index 22f9d1acf..5fc5a3883 100644 --- a/chart/kube-arangodb-enterprise-arm64/crds/database-deployment.yaml +++ b/chart/kube-arangodb-enterprise-arm64/crds/database-deployment.yaml @@ -21,13 +21,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/chart/kube-arangodb-enterprise-arm64/crds/database-task.yaml b/chart/kube-arangodb-enterprise-arm64/crds/database-task.yaml index 85d452000..ccab9cbad 100644 --- a/chart/kube-arangodb-enterprise-arm64/crds/database-task.yaml +++ b/chart/kube-arangodb-enterprise-arm64/crds/database-task.yaml @@ -18,13 +18,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/chart/kube-arangodb-enterprise-arm64/crds/platform-chart.yaml b/chart/kube-arangodb-enterprise-arm64/crds/platform-chart.yaml new file mode 100644 index 000000000..eb217d6b7 --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/crds/platform-chart.yaml @@ -0,0 +1,25 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformcharts.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformChart + listKind: ArangoPlatformChartList + plural: arangoplatformcharts + singular: arangoplatformchart + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas diff --git a/chart/kube-arangodb-enterprise-arm64/crds/platform-storage.yaml b/chart/kube-arangodb-enterprise-arm64/crds/platform-storage.yaml new file mode 100644 index 000000000..300226c85 --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/crds/platform-storage.yaml @@ -0,0 +1,22 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformstorages.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformStorage + listKind: ArangoPlatformStorageList + plural: arangoplatformstorages + singular: arangoplatformstorage + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} diff --git a/chart/kube-arangodb-enterprise-arm64/crds/replication-deploymentreplication.yaml b/chart/kube-arangodb-enterprise-arm64/crds/replication-deploymentreplication.yaml index e3918b355..26633936d 100644 --- a/chart/kube-arangodb-enterprise-arm64/crds/replication-deploymentreplication.yaml +++ b/chart/kube-arangodb-enterprise-arm64/crds/replication-deploymentreplication.yaml @@ -20,13 +20,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/chart/kube-arangodb-enterprise-arm64/crds/scheduler-deployment.yaml b/chart/kube-arangodb-enterprise-arm64/crds/scheduler-deployment.yaml index 0178e1c89..00464fb64 100644 --- a/chart/kube-arangodb-enterprise-arm64/crds/scheduler-deployment.yaml +++ b/chart/kube-arangodb-enterprise-arm64/crds/scheduler-deployment.yaml @@ -20,3 +20,6 @@ spec: storage: true subresources: status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas diff --git a/chart/kube-arangodb-enterprise-arm64/templates/certificates/ca.yaml b/chart/kube-arangodb-enterprise-arm64/templates/certificates/ca.yaml new file mode 100644 index 000000000..4755661e4 --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/templates/certificates/ca.yaml @@ -0,0 +1,22 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-ca + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + secretName: {{ template "kube-arangodb.operatorName" . }}-ca + duration: {{ .Values.certificate.ca.duration }} + issuerRef: + name: {{ template "kube-arangodb.operatorName" . }}-ca + commonName: {{ .Values.certificate.ca.commonName }} + isCA: true + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise-arm64/templates/certificates/certificate.yaml b/chart/kube-arangodb-enterprise-arm64/templates/certificates/certificate.yaml new file mode 100644 index 000000000..41e464054 --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/templates/certificates/certificate.yaml @@ -0,0 +1,24 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + secretName: {{ template "kube-arangodb.operatorName" . }}-cert + duration: {{ .Values.certificate.cert.duration }} + issuerRef: + name: {{ template "kube-arangodb.operatorName" . }} + dnsNames: + - {{ template "kube-arangodb.operatorName" . }} + - {{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }} + - {{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }}.svc + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise-arm64/templates/certificates/issuer.ca.yaml b/chart/kube-arangodb-enterprise-arm64/templates/certificates/issuer.ca.yaml new file mode 100644 index 000000000..0b3f33291 --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/templates/certificates/issuer.ca.yaml @@ -0,0 +1,17 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-ca + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + selfSigned: {} + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise-arm64/templates/certificates/issuer.yaml b/chart/kube-arangodb-enterprise-arm64/templates/certificates/issuer.yaml new file mode 100644 index 000000000..70957d54e --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/templates/certificates/issuer.yaml @@ -0,0 +1,18 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + ca: + secretName: {{ template "kube-arangodb.operatorName" . }}-ca + +{{- end }} diff --git a/chart/kube-arangodb-enterprise-arm64/templates/deployment-operator/role.yaml b/chart/kube-arangodb-enterprise-arm64/templates/deployment-operator/role.yaml index 18d5e8582..1452d38b5 100644 --- a/chart/kube-arangodb-enterprise-arm64/templates/deployment-operator/role.yaml +++ b/chart/kube-arangodb-enterprise-arm64/templates/deployment-operator/role.yaml @@ -16,9 +16,6 @@ rules: - apiGroups: ["database.arangodb.com"] resources: ["arangodeployments", "arangodeployments/status","arangomembers", "arangomembers/status"] verbs: ["*"] - - apiGroups: ["networking.arangodb.com"] - resources: ["arangoroutes", "arangoroutes/status"] - verbs: ["*"] {{- if .Values.rbac.extensions.acs }} - apiGroups: ["database.arangodb.com"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] @@ -41,6 +38,9 @@ rules: - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["*"] + - apiGroups: ["platform.arangodb.com"] + resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + verbs: ["get", "list", "watch"] - apiGroups: ["backup.arangodb.com"] resources: ["arangobackuppolicies", "arangobackups"] verbs: ["get", "list", "watch"] diff --git a/chart/kube-arangodb-enterprise-arm64/templates/deployment.yaml b/chart/kube-arangodb-enterprise-arm64/templates/deployment.yaml index 3488df768..a5d679039 100644 --- a/chart/kube-arangodb-enterprise-arm64/templates/deployment.yaml +++ b/chart/kube-arangodb-enterprise-arm64/templates/deployment.yaml @@ -93,6 +93,10 @@ spec: image: {{ .Values.operator.image }} args: - --scope={{ .Values.operator.scope }} +{{- if .Values.certificate.enabled }} + - --server.tls-secret-name={{ template "kube-arangodb.operatorName" . }}-cert + - --api.tls-secret-name={{ template "kube-arangodb.operatorName" . }}-cert +{{- end -}} {{- if .Values.operator.features.deployment }} - --operator.deployment {{- end -}} @@ -123,6 +127,9 @@ spec: {{ if .Values.operator.features.scheduler }} - --operator.scheduler {{- end }} +{{ if .Values.operator.features.platform }} + - --operator.platform +{{- end }} {{ if .Values.operator.features.k8sToK8sClusterSync }} - --operator.k2k-cluster-sync {{- end }} @@ -184,6 +191,67 @@ spec: scheme: HTTPS initialDelaySeconds: 5 periodSeconds: 10 +{{- end }} +{{ if .Values.webhooks.enabled }} + - name: webhooks + imagePullPolicy: {{ .Values.operator.imagePullPolicy }} + image: {{ .Values.operator.image }} + args: + - webhook +{{- if .Values.certificate.enabled }} + - --ssl.secret.name={{ template "kube-arangodb.operatorName" . }}-webhook-cert + - --ssl.secret.namespace={{ .Release.Namespace }} +{{- end -}} +{{- if .Values.webhooks.args }} +{{- range .Values.webhooks.args }} + - {{ . | quote }} +{{- end }} +{{- end }} + env: + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_CONTAINER_NAME + value: "webhooks" + - name: MY_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + ports: + - name: webhooks + containerPort: 8828 + securityContext: + privileged: false + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + capabilities: + drop: + - 'ALL' +{{- if .Values.webhooks.resources }} + resources: +{{ toYaml .Values.webhooks.resources | indent 22 }} +{{- end }} +{{- if not .Values.webhooks.debug }} + livenessProbe: + httpGet: + path: /health + port: 8828 + scheme: HTTPS + initialDelaySeconds: 5 + periodSeconds: 10 + readinessProbe: + httpGet: + path: /ready + port: 8828 + scheme: HTTPS + initialDelaySeconds: 5 + periodSeconds: 10 +{{- end }} {{- end }} tolerations: - key: "node.kubernetes.io/unreachable" diff --git a/chart/kube-arangodb-enterprise-arm64/templates/networking-operator/role.yaml b/chart/kube-arangodb-enterprise-arm64/templates/networking-operator/role.yaml index 38339a312..3da6b9dff 100644 --- a/chart/kube-arangodb-enterprise-arm64/templates/networking-operator/role.yaml +++ b/chart/kube-arangodb-enterprise-arm64/templates/networking-operator/role.yaml @@ -13,56 +13,11 @@ metadata: app.kubernetes.io/instance: {{ .Release.Name }} release: {{ .Release.Name }} rules: - - apiGroups: - - "ml.arangodb.com" - resources: - - "arangomlextensions" - - "arangomlextensions/status" - - "arangomlbatchjobs" - - "arangomlbatchjobs/status" - - "arangomlcronjobs" - - "arangomlcronjobs/status" - - "arangomlstorages" - - "arangomlstorages/status" - verbs: - - "*" - - apiGroups: - - "scheduler.arangodb.com" - resources: - - "arangoprofiles" - - "arangoprofiles/status" - verbs: - - "*" - - apiGroups: - - "database.arangodb.com" - resources: - - "arangodeployments" - verbs: - - "get" - - "list" - - "watch" - - apiGroups: - - "rbac.authorization.k8s.io" - resources: - - "roles" - - "rolebindings" - verbs: ["*"] - - apiGroups: - - "batch" - resources: - - "cronjobs" - - "jobs" - verbs: ["*"] - - apiGroups: ["apps"] - resources: - - "statefulsets" - verbs: ["*"] - - apiGroups: [""] - resources: - - "pods" - - "secrets" - - "services" - - "serviceaccounts" - verbs: ["*"] + - apiGroups: ["networking.arangodb.com"] + resources: ["arangoroutes", "arangoroutes/status"] + verbs: ["*"] + - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] {{- end }} {{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/cluster-role-binding.yaml b/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/cluster-role-binding.yaml new file mode 100644 index 000000000..200625d04 --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/cluster-role-binding.yaml @@ -0,0 +1,26 @@ +{{ if .Values.rbac.enabled -}} +{{ if not (eq .Values.operator.scope "namespaced") -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "kube-arangodb.rbac-cluster" . }}-platform + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "kube-arangodb.rbac-cluster" . }}-platform +subjects: + - kind: ServiceAccount + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + +{{- end }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/cluster-role.yaml b/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/cluster-role.yaml new file mode 100644 index 000000000..ee3202c4d --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/cluster-role.yaml @@ -0,0 +1,22 @@ +{{ if .Values.rbac.enabled -}} +{{ if not (eq .Values.operator.scope "namespaced") -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "kube-arangodb.rbac-cluster" . }}-platform + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +rules: + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["get", "list", "watch"] + +{{- end }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/role-binding.yaml b/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/role-binding.yaml new file mode 100644 index 000000000..7eae42709 --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/role-binding.yaml @@ -0,0 +1,25 @@ +{{ if .Values.rbac.enabled -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ template "kube-arangodb.rbac" . }}-platform + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ template "kube-arangodb.rbac" . }}-platform +subjects: + - kind: ServiceAccount + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/role.yaml b/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/role.yaml new file mode 100644 index 000000000..dbcd866fe --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/role.yaml @@ -0,0 +1,24 @@ +{{ if .Values.rbac.enabled -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ template "kube-arangodb.rbac" . }}-platform + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +rules: + - apiGroups: ["platform.arangodb.com"] + resources: + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/status" + verbs: ["*"] +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise-arm64/templates/service-webhooks.yaml b/chart/kube-arangodb-enterprise-arm64/templates/service-webhooks.yaml new file mode 100644 index 000000000..7d186845c --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/templates/service-webhooks.yaml @@ -0,0 +1,31 @@ +{{ if .Values.webhooks.enabled }} + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-webhook + namespace: {{ .Release.Namespace }} +{{- if .Values.operator.annotations }} + annotations: +{{ toYaml .Values.operator.annotations | indent 8 }} +{{- end }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + ports: + - name: webhooks + port: 443 + protocol: TCP + targetPort: webhooks + selector: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} + type: ClusterIP + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise-arm64/templates/webhook/certificate.yaml b/chart/kube-arangodb-enterprise-arm64/templates/webhook/certificate.yaml new file mode 100644 index 000000000..371ce5b29 --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/templates/webhook/certificate.yaml @@ -0,0 +1,24 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-webhook + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + secretName: {{ template "kube-arangodb.operatorName" . }}-webhook-cert + duration: {{ .Values.certificate.cert.duration }} + issuerRef: + name: {{ template "kube-arangodb.operatorName" . }} + dnsNames: + - {{ template "kube-arangodb.operatorName" . }}-webhook + - {{ template "kube-arangodb.operatorName" . }}-webhook.{{ .Release.Namespace }} + - {{ template "kube-arangodb.operatorName" . }}-webhook.{{ .Release.Namespace }}.svc + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise-arm64/templates/webhook/mutation.yaml b/chart/kube-arangodb-enterprise-arm64/templates/webhook/mutation.yaml new file mode 100644 index 000000000..27efd0821 --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/templates/webhook/mutation.yaml @@ -0,0 +1,67 @@ +{{ if .Values.webhooks.enabled }} + +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + name: "{{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }}.operator.arangodb.com" + annotations: + cert-manager.io/inject-ca-from: "{{ .Release.Namespace }}/{{ template "kube-arangodb.operatorName" . }}-ca" + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +webhooks: + - name: "pods.policies.scheduler.arangodb.com" + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: In + values: + - {{ .Release.Namespace }} + objectSelector: + matchExpressions: + - key: profiles.arangodb.com/deployment + operator: Exists + rules: + - apiGroups: [""] + apiVersions: ["v1"] + operations: ["CREATE"] + resources: ["pods"] + scope: "Namespaced" + clientConfig: + service: + namespace: {{ .Release.Namespace }} + name: {{ template "kube-arangodb.operatorName" . }}-webhook + path: /webhook/core/v1/pods/policies/mutate + admissionReviewVersions: ["v1"] + sideEffects: None + timeoutSeconds: 5 + - name: "generic.pod.policies.scheduler.arangodb.com" + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: In + values: + - {{ .Release.Namespace }} + objectSelector: + matchExpressions: + - key: profiles.arangodb.com/apply + operator: Exists + rules: + - apiGroups: [""] + apiVersions: ["v1"] + operations: ["CREATE"] + resources: ["pods"] + scope: "Namespaced" + clientConfig: + service: + namespace: {{ .Release.Namespace }} + name: {{ template "kube-arangodb.operatorName" . }}-webhook + path: /webhook/core/v1/pods/policies/mutate + admissionReviewVersions: ["v1"] + sideEffects: None + timeoutSeconds: 5 + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise-arm64/templates/webhook/validation.yaml b/chart/kube-arangodb-enterprise-arm64/templates/webhook/validation.yaml new file mode 100644 index 000000000..0c791cacc --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/templates/webhook/validation.yaml @@ -0,0 +1,17 @@ +{{ if .Values.webhooks.enabled }} + +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + name: "{{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }}.operator.arangodb.com" + annotations: + cert-manager.io/inject-ca-from: "{{ .Release.Namespace }}/{{ template "kube-arangodb.operatorName" . }}-ca" + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +webhooks: [] + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise-arm64/values.yaml b/chart/kube-arangodb-enterprise-arm64/values.yaml index 1588dc4c2..32f39c5eb 100644 --- a/chart/kube-arangodb-enterprise-arm64/values.yaml +++ b/chart/kube-arangodb-enterprise-arm64/values.yaml @@ -1,5 +1,5 @@ operator: - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 imagePullPolicy: IfNotPresent imagePullSecrets: [] scope: legacy @@ -34,6 +34,8 @@ operator: k8sToK8sClusterSync: false ml: false analytics: false + networking: true + scheduler: true tolerations: [] rbac: enabled: true @@ -42,3 +44,20 @@ rbac: acs: true at: true debug: false +webhooks: + enabled: false + args: [] + resources: + limits: + cpu: 1 + memory: 128Mi + requests: + cpu: 250m + memory: 128Mi +certificate: + enabled: false + ca: + duration: 43800h + commonName: "kube-arangodb.operator.cert" + cert: + duration: 8760h diff --git a/chart/kube-arangodb-enterprise/Chart.yaml b/chart/kube-arangodb-enterprise/Chart.yaml index 681878d7f..1a839b538 100644 --- a/chart/kube-arangodb-enterprise/Chart.yaml +++ b/chart/kube-arangodb-enterprise/Chart.yaml @@ -1,5 +1,5 @@ # do not switch to V2 yet - we still need to support Helm 2 apiVersion: v1 name: kube-arangodb-enterprise -version: 1.2.43 +version: 1.2.44 description: "ArangoDB Kubernetes Enterprise Operator" diff --git a/chart/kube-arangodb-enterprise/README.md b/chart/kube-arangodb-enterprise/README.md index a912db933..15778bec6 100644 --- a/chart/kube-arangodb-enterprise/README.md +++ b/chart/kube-arangodb-enterprise/README.md @@ -189,6 +189,30 @@ Define if ArangoClusterSynchronization Operator should be enabled. Default: `false` +### `operator.features.ml` + +Define if ML Operator should be enabled. + +Default: `false` + +### `operator.features.analytics` + +Define if GAE Operator should be enabled. + +Default: `false` + +### `operator.features.networking` + +Define if ArangoNetworking Operator should be enabled. + +Default: `true` + +### `operator.features.scheduler` + +Define if ArangoScheduler Operator should be enabled. + +Default: `true` + ### `rbac.enabled` Define if RBAC should be enabled. diff --git a/chart/kube-arangodb-enterprise/crds/backups-backup.yaml b/chart/kube-arangodb-enterprise/crds/backups-backup.yaml index 577574362..16625a363 100644 --- a/chart/kube-arangodb-enterprise/crds/backups-backup.yaml +++ b/chart/kube-arangodb-enterprise/crds/backups-backup.yaml @@ -57,47 +57,3 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.policyName - description: Policy name - name: Policy - type: string - - jsonPath: .spec.deployment.name - description: Deployment name - name: Deployment - type: string - - jsonPath: .status.backup.version - description: Backup Version - name: Version - type: string - - jsonPath: .status.backup.createdAt - description: Backup Creation Timestamp - name: Created - type: string - - jsonPath: .status.backup.sizeInBytes - description: Backup Size in Bytes - name: Size - type: integer - format: byte - - jsonPath: .status.backup.numberOfDBServers - description: Backup Number of the DB Servers - name: DBServers - type: integer - - jsonPath: .status.state - description: The actual state of the ArangoBackup - name: State - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackup object - name: Message - type: string - subresources: - status: {} diff --git a/chart/kube-arangodb-enterprise/crds/backups-backuppolicy.yaml b/chart/kube-arangodb-enterprise/crds/backups-backuppolicy.yaml index e0ca6c623..c0d759199 100644 --- a/chart/kube-arangodb-enterprise/crds/backups-backuppolicy.yaml +++ b/chart/kube-arangodb-enterprise/crds/backups-backuppolicy.yaml @@ -37,26 +37,3 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.schedule - description: Schedule - name: Schedule - type: string - - jsonPath: .status.scheduled - description: Scheduled - name: Scheduled - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackupPolicy object - name: Message - type: string - subresources: - status: {} diff --git a/chart/kube-arangodb-enterprise/crds/database-deployment.yaml b/chart/kube-arangodb-enterprise/crds/database-deployment.yaml index 22f9d1acf..5fc5a3883 100644 --- a/chart/kube-arangodb-enterprise/crds/database-deployment.yaml +++ b/chart/kube-arangodb-enterprise/crds/database-deployment.yaml @@ -21,13 +21,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/chart/kube-arangodb-enterprise/crds/database-task.yaml b/chart/kube-arangodb-enterprise/crds/database-task.yaml index 85d452000..ccab9cbad 100644 --- a/chart/kube-arangodb-enterprise/crds/database-task.yaml +++ b/chart/kube-arangodb-enterprise/crds/database-task.yaml @@ -18,13 +18,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/chart/kube-arangodb-enterprise/crds/platform-chart.yaml b/chart/kube-arangodb-enterprise/crds/platform-chart.yaml new file mode 100644 index 000000000..eb217d6b7 --- /dev/null +++ b/chart/kube-arangodb-enterprise/crds/platform-chart.yaml @@ -0,0 +1,25 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformcharts.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformChart + listKind: ArangoPlatformChartList + plural: arangoplatformcharts + singular: arangoplatformchart + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas diff --git a/chart/kube-arangodb-enterprise/crds/platform-storage.yaml b/chart/kube-arangodb-enterprise/crds/platform-storage.yaml new file mode 100644 index 000000000..300226c85 --- /dev/null +++ b/chart/kube-arangodb-enterprise/crds/platform-storage.yaml @@ -0,0 +1,22 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformstorages.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformStorage + listKind: ArangoPlatformStorageList + plural: arangoplatformstorages + singular: arangoplatformstorage + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} diff --git a/chart/kube-arangodb-enterprise/crds/replication-deploymentreplication.yaml b/chart/kube-arangodb-enterprise/crds/replication-deploymentreplication.yaml index e3918b355..26633936d 100644 --- a/chart/kube-arangodb-enterprise/crds/replication-deploymentreplication.yaml +++ b/chart/kube-arangodb-enterprise/crds/replication-deploymentreplication.yaml @@ -20,13 +20,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/chart/kube-arangodb-enterprise/crds/scheduler-deployment.yaml b/chart/kube-arangodb-enterprise/crds/scheduler-deployment.yaml index 0178e1c89..00464fb64 100644 --- a/chart/kube-arangodb-enterprise/crds/scheduler-deployment.yaml +++ b/chart/kube-arangodb-enterprise/crds/scheduler-deployment.yaml @@ -20,3 +20,6 @@ spec: storage: true subresources: status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas diff --git a/chart/kube-arangodb-enterprise/templates/certificates/ca.yaml b/chart/kube-arangodb-enterprise/templates/certificates/ca.yaml new file mode 100644 index 000000000..4755661e4 --- /dev/null +++ b/chart/kube-arangodb-enterprise/templates/certificates/ca.yaml @@ -0,0 +1,22 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-ca + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + secretName: {{ template "kube-arangodb.operatorName" . }}-ca + duration: {{ .Values.certificate.ca.duration }} + issuerRef: + name: {{ template "kube-arangodb.operatorName" . }}-ca + commonName: {{ .Values.certificate.ca.commonName }} + isCA: true + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise/templates/certificates/certificate.yaml b/chart/kube-arangodb-enterprise/templates/certificates/certificate.yaml new file mode 100644 index 000000000..41e464054 --- /dev/null +++ b/chart/kube-arangodb-enterprise/templates/certificates/certificate.yaml @@ -0,0 +1,24 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + secretName: {{ template "kube-arangodb.operatorName" . }}-cert + duration: {{ .Values.certificate.cert.duration }} + issuerRef: + name: {{ template "kube-arangodb.operatorName" . }} + dnsNames: + - {{ template "kube-arangodb.operatorName" . }} + - {{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }} + - {{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }}.svc + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise/templates/certificates/issuer.ca.yaml b/chart/kube-arangodb-enterprise/templates/certificates/issuer.ca.yaml new file mode 100644 index 000000000..0b3f33291 --- /dev/null +++ b/chart/kube-arangodb-enterprise/templates/certificates/issuer.ca.yaml @@ -0,0 +1,17 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-ca + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + selfSigned: {} + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise/templates/certificates/issuer.yaml b/chart/kube-arangodb-enterprise/templates/certificates/issuer.yaml new file mode 100644 index 000000000..70957d54e --- /dev/null +++ b/chart/kube-arangodb-enterprise/templates/certificates/issuer.yaml @@ -0,0 +1,18 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + ca: + secretName: {{ template "kube-arangodb.operatorName" . }}-ca + +{{- end }} diff --git a/chart/kube-arangodb-enterprise/templates/deployment-operator/role.yaml b/chart/kube-arangodb-enterprise/templates/deployment-operator/role.yaml index 18d5e8582..1452d38b5 100644 --- a/chart/kube-arangodb-enterprise/templates/deployment-operator/role.yaml +++ b/chart/kube-arangodb-enterprise/templates/deployment-operator/role.yaml @@ -16,9 +16,6 @@ rules: - apiGroups: ["database.arangodb.com"] resources: ["arangodeployments", "arangodeployments/status","arangomembers", "arangomembers/status"] verbs: ["*"] - - apiGroups: ["networking.arangodb.com"] - resources: ["arangoroutes", "arangoroutes/status"] - verbs: ["*"] {{- if .Values.rbac.extensions.acs }} - apiGroups: ["database.arangodb.com"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] @@ -41,6 +38,9 @@ rules: - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["*"] + - apiGroups: ["platform.arangodb.com"] + resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + verbs: ["get", "list", "watch"] - apiGroups: ["backup.arangodb.com"] resources: ["arangobackuppolicies", "arangobackups"] verbs: ["get", "list", "watch"] diff --git a/chart/kube-arangodb-enterprise/templates/deployment.yaml b/chart/kube-arangodb-enterprise/templates/deployment.yaml index 3488df768..a5d679039 100644 --- a/chart/kube-arangodb-enterprise/templates/deployment.yaml +++ b/chart/kube-arangodb-enterprise/templates/deployment.yaml @@ -93,6 +93,10 @@ spec: image: {{ .Values.operator.image }} args: - --scope={{ .Values.operator.scope }} +{{- if .Values.certificate.enabled }} + - --server.tls-secret-name={{ template "kube-arangodb.operatorName" . }}-cert + - --api.tls-secret-name={{ template "kube-arangodb.operatorName" . }}-cert +{{- end -}} {{- if .Values.operator.features.deployment }} - --operator.deployment {{- end -}} @@ -123,6 +127,9 @@ spec: {{ if .Values.operator.features.scheduler }} - --operator.scheduler {{- end }} +{{ if .Values.operator.features.platform }} + - --operator.platform +{{- end }} {{ if .Values.operator.features.k8sToK8sClusterSync }} - --operator.k2k-cluster-sync {{- end }} @@ -184,6 +191,67 @@ spec: scheme: HTTPS initialDelaySeconds: 5 periodSeconds: 10 +{{- end }} +{{ if .Values.webhooks.enabled }} + - name: webhooks + imagePullPolicy: {{ .Values.operator.imagePullPolicy }} + image: {{ .Values.operator.image }} + args: + - webhook +{{- if .Values.certificate.enabled }} + - --ssl.secret.name={{ template "kube-arangodb.operatorName" . }}-webhook-cert + - --ssl.secret.namespace={{ .Release.Namespace }} +{{- end -}} +{{- if .Values.webhooks.args }} +{{- range .Values.webhooks.args }} + - {{ . | quote }} +{{- end }} +{{- end }} + env: + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_CONTAINER_NAME + value: "webhooks" + - name: MY_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + ports: + - name: webhooks + containerPort: 8828 + securityContext: + privileged: false + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + capabilities: + drop: + - 'ALL' +{{- if .Values.webhooks.resources }} + resources: +{{ toYaml .Values.webhooks.resources | indent 22 }} +{{- end }} +{{- if not .Values.webhooks.debug }} + livenessProbe: + httpGet: + path: /health + port: 8828 + scheme: HTTPS + initialDelaySeconds: 5 + periodSeconds: 10 + readinessProbe: + httpGet: + path: /ready + port: 8828 + scheme: HTTPS + initialDelaySeconds: 5 + periodSeconds: 10 +{{- end }} {{- end }} tolerations: - key: "node.kubernetes.io/unreachable" diff --git a/chart/kube-arangodb-enterprise/templates/networking-operator/role.yaml b/chart/kube-arangodb-enterprise/templates/networking-operator/role.yaml index 38339a312..3da6b9dff 100644 --- a/chart/kube-arangodb-enterprise/templates/networking-operator/role.yaml +++ b/chart/kube-arangodb-enterprise/templates/networking-operator/role.yaml @@ -13,56 +13,11 @@ metadata: app.kubernetes.io/instance: {{ .Release.Name }} release: {{ .Release.Name }} rules: - - apiGroups: - - "ml.arangodb.com" - resources: - - "arangomlextensions" - - "arangomlextensions/status" - - "arangomlbatchjobs" - - "arangomlbatchjobs/status" - - "arangomlcronjobs" - - "arangomlcronjobs/status" - - "arangomlstorages" - - "arangomlstorages/status" - verbs: - - "*" - - apiGroups: - - "scheduler.arangodb.com" - resources: - - "arangoprofiles" - - "arangoprofiles/status" - verbs: - - "*" - - apiGroups: - - "database.arangodb.com" - resources: - - "arangodeployments" - verbs: - - "get" - - "list" - - "watch" - - apiGroups: - - "rbac.authorization.k8s.io" - resources: - - "roles" - - "rolebindings" - verbs: ["*"] - - apiGroups: - - "batch" - resources: - - "cronjobs" - - "jobs" - verbs: ["*"] - - apiGroups: ["apps"] - resources: - - "statefulsets" - verbs: ["*"] - - apiGroups: [""] - resources: - - "pods" - - "secrets" - - "services" - - "serviceaccounts" - verbs: ["*"] + - apiGroups: ["networking.arangodb.com"] + resources: ["arangoroutes", "arangoroutes/status"] + verbs: ["*"] + - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] {{- end }} {{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise/templates/platform-operator/cluster-role-binding.yaml b/chart/kube-arangodb-enterprise/templates/platform-operator/cluster-role-binding.yaml new file mode 100644 index 000000000..200625d04 --- /dev/null +++ b/chart/kube-arangodb-enterprise/templates/platform-operator/cluster-role-binding.yaml @@ -0,0 +1,26 @@ +{{ if .Values.rbac.enabled -}} +{{ if not (eq .Values.operator.scope "namespaced") -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "kube-arangodb.rbac-cluster" . }}-platform + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "kube-arangodb.rbac-cluster" . }}-platform +subjects: + - kind: ServiceAccount + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + +{{- end }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise/templates/platform-operator/cluster-role.yaml b/chart/kube-arangodb-enterprise/templates/platform-operator/cluster-role.yaml new file mode 100644 index 000000000..ee3202c4d --- /dev/null +++ b/chart/kube-arangodb-enterprise/templates/platform-operator/cluster-role.yaml @@ -0,0 +1,22 @@ +{{ if .Values.rbac.enabled -}} +{{ if not (eq .Values.operator.scope "namespaced") -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "kube-arangodb.rbac-cluster" . }}-platform + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +rules: + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["get", "list", "watch"] + +{{- end }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise/templates/platform-operator/role-binding.yaml b/chart/kube-arangodb-enterprise/templates/platform-operator/role-binding.yaml new file mode 100644 index 000000000..7eae42709 --- /dev/null +++ b/chart/kube-arangodb-enterprise/templates/platform-operator/role-binding.yaml @@ -0,0 +1,25 @@ +{{ if .Values.rbac.enabled -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ template "kube-arangodb.rbac" . }}-platform + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ template "kube-arangodb.rbac" . }}-platform +subjects: + - kind: ServiceAccount + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise/templates/platform-operator/role.yaml b/chart/kube-arangodb-enterprise/templates/platform-operator/role.yaml new file mode 100644 index 000000000..dbcd866fe --- /dev/null +++ b/chart/kube-arangodb-enterprise/templates/platform-operator/role.yaml @@ -0,0 +1,24 @@ +{{ if .Values.rbac.enabled -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ template "kube-arangodb.rbac" . }}-platform + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +rules: + - apiGroups: ["platform.arangodb.com"] + resources: + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/status" + verbs: ["*"] +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise/templates/service-webhooks.yaml b/chart/kube-arangodb-enterprise/templates/service-webhooks.yaml new file mode 100644 index 000000000..7d186845c --- /dev/null +++ b/chart/kube-arangodb-enterprise/templates/service-webhooks.yaml @@ -0,0 +1,31 @@ +{{ if .Values.webhooks.enabled }} + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-webhook + namespace: {{ .Release.Namespace }} +{{- if .Values.operator.annotations }} + annotations: +{{ toYaml .Values.operator.annotations | indent 8 }} +{{- end }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + ports: + - name: webhooks + port: 443 + protocol: TCP + targetPort: webhooks + selector: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} + type: ClusterIP + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise/templates/webhook/certificate.yaml b/chart/kube-arangodb-enterprise/templates/webhook/certificate.yaml new file mode 100644 index 000000000..371ce5b29 --- /dev/null +++ b/chart/kube-arangodb-enterprise/templates/webhook/certificate.yaml @@ -0,0 +1,24 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-webhook + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + secretName: {{ template "kube-arangodb.operatorName" . }}-webhook-cert + duration: {{ .Values.certificate.cert.duration }} + issuerRef: + name: {{ template "kube-arangodb.operatorName" . }} + dnsNames: + - {{ template "kube-arangodb.operatorName" . }}-webhook + - {{ template "kube-arangodb.operatorName" . }}-webhook.{{ .Release.Namespace }} + - {{ template "kube-arangodb.operatorName" . }}-webhook.{{ .Release.Namespace }}.svc + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise/templates/webhook/mutation.yaml b/chart/kube-arangodb-enterprise/templates/webhook/mutation.yaml new file mode 100644 index 000000000..27efd0821 --- /dev/null +++ b/chart/kube-arangodb-enterprise/templates/webhook/mutation.yaml @@ -0,0 +1,67 @@ +{{ if .Values.webhooks.enabled }} + +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + name: "{{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }}.operator.arangodb.com" + annotations: + cert-manager.io/inject-ca-from: "{{ .Release.Namespace }}/{{ template "kube-arangodb.operatorName" . }}-ca" + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +webhooks: + - name: "pods.policies.scheduler.arangodb.com" + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: In + values: + - {{ .Release.Namespace }} + objectSelector: + matchExpressions: + - key: profiles.arangodb.com/deployment + operator: Exists + rules: + - apiGroups: [""] + apiVersions: ["v1"] + operations: ["CREATE"] + resources: ["pods"] + scope: "Namespaced" + clientConfig: + service: + namespace: {{ .Release.Namespace }} + name: {{ template "kube-arangodb.operatorName" . }}-webhook + path: /webhook/core/v1/pods/policies/mutate + admissionReviewVersions: ["v1"] + sideEffects: None + timeoutSeconds: 5 + - name: "generic.pod.policies.scheduler.arangodb.com" + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: In + values: + - {{ .Release.Namespace }} + objectSelector: + matchExpressions: + - key: profiles.arangodb.com/apply + operator: Exists + rules: + - apiGroups: [""] + apiVersions: ["v1"] + operations: ["CREATE"] + resources: ["pods"] + scope: "Namespaced" + clientConfig: + service: + namespace: {{ .Release.Namespace }} + name: {{ template "kube-arangodb.operatorName" . }}-webhook + path: /webhook/core/v1/pods/policies/mutate + admissionReviewVersions: ["v1"] + sideEffects: None + timeoutSeconds: 5 + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise/templates/webhook/validation.yaml b/chart/kube-arangodb-enterprise/templates/webhook/validation.yaml new file mode 100644 index 000000000..0c791cacc --- /dev/null +++ b/chart/kube-arangodb-enterprise/templates/webhook/validation.yaml @@ -0,0 +1,17 @@ +{{ if .Values.webhooks.enabled }} + +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + name: "{{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }}.operator.arangodb.com" + annotations: + cert-manager.io/inject-ca-from: "{{ .Release.Namespace }}/{{ template "kube-arangodb.operatorName" . }}-ca" + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +webhooks: [] + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb-enterprise/values.yaml b/chart/kube-arangodb-enterprise/values.yaml index 838e191c3..02d78df5c 100644 --- a/chart/kube-arangodb-enterprise/values.yaml +++ b/chart/kube-arangodb-enterprise/values.yaml @@ -1,5 +1,5 @@ operator: - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 imagePullPolicy: IfNotPresent imagePullSecrets: [] scope: legacy @@ -34,6 +34,8 @@ operator: k8sToK8sClusterSync: false ml: false analytics: false + networking: true + scheduler: true tolerations: [] rbac: enabled: true @@ -42,3 +44,20 @@ rbac: acs: true at: true debug: false +webhooks: + enabled: false + args: [] + resources: + limits: + cpu: 1 + memory: 128Mi + requests: + cpu: 250m + memory: 128Mi +certificate: + enabled: false + ca: + duration: 43800h + commonName: "kube-arangodb.operator.cert" + cert: + duration: 8760h diff --git a/chart/kube-arangodb/Chart.yaml b/chart/kube-arangodb/Chart.yaml index 35fbe6ed1..202b9b972 100644 --- a/chart/kube-arangodb/Chart.yaml +++ b/chart/kube-arangodb/Chart.yaml @@ -1,5 +1,5 @@ # do not switch to V2 yet - we still need to support Helm 2 apiVersion: v1 name: kube-arangodb -version: 1.2.43 +version: 1.2.44 description: "ArangoDB Kubernetes Operator" diff --git a/chart/kube-arangodb/README.md b/chart/kube-arangodb/README.md index a912db933..15778bec6 100644 --- a/chart/kube-arangodb/README.md +++ b/chart/kube-arangodb/README.md @@ -189,6 +189,30 @@ Define if ArangoClusterSynchronization Operator should be enabled. Default: `false` +### `operator.features.ml` + +Define if ML Operator should be enabled. + +Default: `false` + +### `operator.features.analytics` + +Define if GAE Operator should be enabled. + +Default: `false` + +### `operator.features.networking` + +Define if ArangoNetworking Operator should be enabled. + +Default: `true` + +### `operator.features.scheduler` + +Define if ArangoScheduler Operator should be enabled. + +Default: `true` + ### `rbac.enabled` Define if RBAC should be enabled. diff --git a/chart/kube-arangodb/crds/backups-backup.yaml b/chart/kube-arangodb/crds/backups-backup.yaml index 577574362..16625a363 100644 --- a/chart/kube-arangodb/crds/backups-backup.yaml +++ b/chart/kube-arangodb/crds/backups-backup.yaml @@ -57,47 +57,3 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.policyName - description: Policy name - name: Policy - type: string - - jsonPath: .spec.deployment.name - description: Deployment name - name: Deployment - type: string - - jsonPath: .status.backup.version - description: Backup Version - name: Version - type: string - - jsonPath: .status.backup.createdAt - description: Backup Creation Timestamp - name: Created - type: string - - jsonPath: .status.backup.sizeInBytes - description: Backup Size in Bytes - name: Size - type: integer - format: byte - - jsonPath: .status.backup.numberOfDBServers - description: Backup Number of the DB Servers - name: DBServers - type: integer - - jsonPath: .status.state - description: The actual state of the ArangoBackup - name: State - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackup object - name: Message - type: string - subresources: - status: {} diff --git a/chart/kube-arangodb/crds/backups-backuppolicy.yaml b/chart/kube-arangodb/crds/backups-backuppolicy.yaml index e0ca6c623..c0d759199 100644 --- a/chart/kube-arangodb/crds/backups-backuppolicy.yaml +++ b/chart/kube-arangodb/crds/backups-backuppolicy.yaml @@ -37,26 +37,3 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.schedule - description: Schedule - name: Schedule - type: string - - jsonPath: .status.scheduled - description: Scheduled - name: Scheduled - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackupPolicy object - name: Message - type: string - subresources: - status: {} diff --git a/chart/kube-arangodb/crds/database-deployment.yaml b/chart/kube-arangodb/crds/database-deployment.yaml index 22f9d1acf..5fc5a3883 100644 --- a/chart/kube-arangodb/crds/database-deployment.yaml +++ b/chart/kube-arangodb/crds/database-deployment.yaml @@ -21,13 +21,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/chart/kube-arangodb/crds/database-task.yaml b/chart/kube-arangodb/crds/database-task.yaml index 85d452000..ccab9cbad 100644 --- a/chart/kube-arangodb/crds/database-task.yaml +++ b/chart/kube-arangodb/crds/database-task.yaml @@ -18,13 +18,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/chart/kube-arangodb/crds/platform-chart.yaml b/chart/kube-arangodb/crds/platform-chart.yaml new file mode 100644 index 000000000..eb217d6b7 --- /dev/null +++ b/chart/kube-arangodb/crds/platform-chart.yaml @@ -0,0 +1,25 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformcharts.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformChart + listKind: ArangoPlatformChartList + plural: arangoplatformcharts + singular: arangoplatformchart + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas diff --git a/chart/kube-arangodb/crds/platform-storage.yaml b/chart/kube-arangodb/crds/platform-storage.yaml new file mode 100644 index 000000000..300226c85 --- /dev/null +++ b/chart/kube-arangodb/crds/platform-storage.yaml @@ -0,0 +1,22 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformstorages.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformStorage + listKind: ArangoPlatformStorageList + plural: arangoplatformstorages + singular: arangoplatformstorage + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} diff --git a/chart/kube-arangodb/crds/replication-deploymentreplication.yaml b/chart/kube-arangodb/crds/replication-deploymentreplication.yaml index e3918b355..26633936d 100644 --- a/chart/kube-arangodb/crds/replication-deploymentreplication.yaml +++ b/chart/kube-arangodb/crds/replication-deploymentreplication.yaml @@ -20,13 +20,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/chart/kube-arangodb/crds/scheduler-deployment.yaml b/chart/kube-arangodb/crds/scheduler-deployment.yaml index 0178e1c89..00464fb64 100644 --- a/chart/kube-arangodb/crds/scheduler-deployment.yaml +++ b/chart/kube-arangodb/crds/scheduler-deployment.yaml @@ -20,3 +20,6 @@ spec: storage: true subresources: status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas diff --git a/chart/kube-arangodb/templates/certificates/ca.yaml b/chart/kube-arangodb/templates/certificates/ca.yaml new file mode 100644 index 000000000..4755661e4 --- /dev/null +++ b/chart/kube-arangodb/templates/certificates/ca.yaml @@ -0,0 +1,22 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-ca + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + secretName: {{ template "kube-arangodb.operatorName" . }}-ca + duration: {{ .Values.certificate.ca.duration }} + issuerRef: + name: {{ template "kube-arangodb.operatorName" . }}-ca + commonName: {{ .Values.certificate.ca.commonName }} + isCA: true + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb/templates/certificates/certificate.yaml b/chart/kube-arangodb/templates/certificates/certificate.yaml new file mode 100644 index 000000000..41e464054 --- /dev/null +++ b/chart/kube-arangodb/templates/certificates/certificate.yaml @@ -0,0 +1,24 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + secretName: {{ template "kube-arangodb.operatorName" . }}-cert + duration: {{ .Values.certificate.cert.duration }} + issuerRef: + name: {{ template "kube-arangodb.operatorName" . }} + dnsNames: + - {{ template "kube-arangodb.operatorName" . }} + - {{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }} + - {{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }}.svc + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb/templates/certificates/issuer.ca.yaml b/chart/kube-arangodb/templates/certificates/issuer.ca.yaml new file mode 100644 index 000000000..0b3f33291 --- /dev/null +++ b/chart/kube-arangodb/templates/certificates/issuer.ca.yaml @@ -0,0 +1,17 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-ca + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + selfSigned: {} + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb/templates/certificates/issuer.yaml b/chart/kube-arangodb/templates/certificates/issuer.yaml new file mode 100644 index 000000000..70957d54e --- /dev/null +++ b/chart/kube-arangodb/templates/certificates/issuer.yaml @@ -0,0 +1,18 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + ca: + secretName: {{ template "kube-arangodb.operatorName" . }}-ca + +{{- end }} diff --git a/chart/kube-arangodb/templates/deployment-operator/role.yaml b/chart/kube-arangodb/templates/deployment-operator/role.yaml index 18d5e8582..1452d38b5 100644 --- a/chart/kube-arangodb/templates/deployment-operator/role.yaml +++ b/chart/kube-arangodb/templates/deployment-operator/role.yaml @@ -16,9 +16,6 @@ rules: - apiGroups: ["database.arangodb.com"] resources: ["arangodeployments", "arangodeployments/status","arangomembers", "arangomembers/status"] verbs: ["*"] - - apiGroups: ["networking.arangodb.com"] - resources: ["arangoroutes", "arangoroutes/status"] - verbs: ["*"] {{- if .Values.rbac.extensions.acs }} - apiGroups: ["database.arangodb.com"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] @@ -41,6 +38,9 @@ rules: - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["*"] + - apiGroups: ["platform.arangodb.com"] + resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + verbs: ["get", "list", "watch"] - apiGroups: ["backup.arangodb.com"] resources: ["arangobackuppolicies", "arangobackups"] verbs: ["get", "list", "watch"] diff --git a/chart/kube-arangodb/templates/deployment.yaml b/chart/kube-arangodb/templates/deployment.yaml index 3488df768..a5d679039 100644 --- a/chart/kube-arangodb/templates/deployment.yaml +++ b/chart/kube-arangodb/templates/deployment.yaml @@ -93,6 +93,10 @@ spec: image: {{ .Values.operator.image }} args: - --scope={{ .Values.operator.scope }} +{{- if .Values.certificate.enabled }} + - --server.tls-secret-name={{ template "kube-arangodb.operatorName" . }}-cert + - --api.tls-secret-name={{ template "kube-arangodb.operatorName" . }}-cert +{{- end -}} {{- if .Values.operator.features.deployment }} - --operator.deployment {{- end -}} @@ -123,6 +127,9 @@ spec: {{ if .Values.operator.features.scheduler }} - --operator.scheduler {{- end }} +{{ if .Values.operator.features.platform }} + - --operator.platform +{{- end }} {{ if .Values.operator.features.k8sToK8sClusterSync }} - --operator.k2k-cluster-sync {{- end }} @@ -184,6 +191,67 @@ spec: scheme: HTTPS initialDelaySeconds: 5 periodSeconds: 10 +{{- end }} +{{ if .Values.webhooks.enabled }} + - name: webhooks + imagePullPolicy: {{ .Values.operator.imagePullPolicy }} + image: {{ .Values.operator.image }} + args: + - webhook +{{- if .Values.certificate.enabled }} + - --ssl.secret.name={{ template "kube-arangodb.operatorName" . }}-webhook-cert + - --ssl.secret.namespace={{ .Release.Namespace }} +{{- end -}} +{{- if .Values.webhooks.args }} +{{- range .Values.webhooks.args }} + - {{ . | quote }} +{{- end }} +{{- end }} + env: + - name: MY_POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MY_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: MY_CONTAINER_NAME + value: "webhooks" + - name: MY_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + ports: + - name: webhooks + containerPort: 8828 + securityContext: + privileged: false + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + capabilities: + drop: + - 'ALL' +{{- if .Values.webhooks.resources }} + resources: +{{ toYaml .Values.webhooks.resources | indent 22 }} +{{- end }} +{{- if not .Values.webhooks.debug }} + livenessProbe: + httpGet: + path: /health + port: 8828 + scheme: HTTPS + initialDelaySeconds: 5 + periodSeconds: 10 + readinessProbe: + httpGet: + path: /ready + port: 8828 + scheme: HTTPS + initialDelaySeconds: 5 + periodSeconds: 10 +{{- end }} {{- end }} tolerations: - key: "node.kubernetes.io/unreachable" diff --git a/chart/kube-arangodb/templates/networking-operator/role.yaml b/chart/kube-arangodb/templates/networking-operator/role.yaml index 38339a312..3da6b9dff 100644 --- a/chart/kube-arangodb/templates/networking-operator/role.yaml +++ b/chart/kube-arangodb/templates/networking-operator/role.yaml @@ -13,56 +13,11 @@ metadata: app.kubernetes.io/instance: {{ .Release.Name }} release: {{ .Release.Name }} rules: - - apiGroups: - - "ml.arangodb.com" - resources: - - "arangomlextensions" - - "arangomlextensions/status" - - "arangomlbatchjobs" - - "arangomlbatchjobs/status" - - "arangomlcronjobs" - - "arangomlcronjobs/status" - - "arangomlstorages" - - "arangomlstorages/status" - verbs: - - "*" - - apiGroups: - - "scheduler.arangodb.com" - resources: - - "arangoprofiles" - - "arangoprofiles/status" - verbs: - - "*" - - apiGroups: - - "database.arangodb.com" - resources: - - "arangodeployments" - verbs: - - "get" - - "list" - - "watch" - - apiGroups: - - "rbac.authorization.k8s.io" - resources: - - "roles" - - "rolebindings" - verbs: ["*"] - - apiGroups: - - "batch" - resources: - - "cronjobs" - - "jobs" - verbs: ["*"] - - apiGroups: ["apps"] - resources: - - "statefulsets" - verbs: ["*"] - - apiGroups: [""] - resources: - - "pods" - - "secrets" - - "services" - - "serviceaccounts" - verbs: ["*"] + - apiGroups: ["networking.arangodb.com"] + resources: ["arangoroutes", "arangoroutes/status"] + verbs: ["*"] + - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] {{- end }} {{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb/templates/platform-operator/cluster-role-binding.yaml b/chart/kube-arangodb/templates/platform-operator/cluster-role-binding.yaml new file mode 100644 index 000000000..200625d04 --- /dev/null +++ b/chart/kube-arangodb/templates/platform-operator/cluster-role-binding.yaml @@ -0,0 +1,26 @@ +{{ if .Values.rbac.enabled -}} +{{ if not (eq .Values.operator.scope "namespaced") -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "kube-arangodb.rbac-cluster" . }}-platform + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "kube-arangodb.rbac-cluster" . }}-platform +subjects: + - kind: ServiceAccount + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + +{{- end }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb/templates/platform-operator/cluster-role.yaml b/chart/kube-arangodb/templates/platform-operator/cluster-role.yaml new file mode 100644 index 000000000..ee3202c4d --- /dev/null +++ b/chart/kube-arangodb/templates/platform-operator/cluster-role.yaml @@ -0,0 +1,22 @@ +{{ if .Values.rbac.enabled -}} +{{ if not (eq .Values.operator.scope "namespaced") -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "kube-arangodb.rbac-cluster" . }}-platform + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +rules: + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["get", "list", "watch"] + +{{- end }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb/templates/platform-operator/role-binding.yaml b/chart/kube-arangodb/templates/platform-operator/role-binding.yaml new file mode 100644 index 000000000..7eae42709 --- /dev/null +++ b/chart/kube-arangodb/templates/platform-operator/role-binding.yaml @@ -0,0 +1,25 @@ +{{ if .Values.rbac.enabled -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: {{ template "kube-arangodb.rbac" . }}-platform + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ template "kube-arangodb.rbac" . }}-platform +subjects: + - kind: ServiceAccount + name: {{ template "kube-arangodb.operatorName" . }} + namespace: {{ .Release.Namespace }} + +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb/templates/platform-operator/role.yaml b/chart/kube-arangodb/templates/platform-operator/role.yaml new file mode 100644 index 000000000..dbcd866fe --- /dev/null +++ b/chart/kube-arangodb/templates/platform-operator/role.yaml @@ -0,0 +1,24 @@ +{{ if .Values.rbac.enabled -}} +{{ if .Values.operator.features.platform -}} + +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: {{ template "kube-arangodb.rbac" . }}-platform + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +rules: + - apiGroups: ["platform.arangodb.com"] + resources: + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/status" + verbs: ["*"] +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb/templates/service-webhooks.yaml b/chart/kube-arangodb/templates/service-webhooks.yaml new file mode 100644 index 000000000..7d186845c --- /dev/null +++ b/chart/kube-arangodb/templates/service-webhooks.yaml @@ -0,0 +1,31 @@ +{{ if .Values.webhooks.enabled }} + +apiVersion: v1 +kind: Service +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-webhook + namespace: {{ .Release.Namespace }} +{{- if .Values.operator.annotations }} + annotations: +{{ toYaml .Values.operator.annotations | indent 8 }} +{{- end }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + ports: + - name: webhooks + port: 443 + protocol: TCP + targetPort: webhooks + selector: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} + type: ClusterIP + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb/templates/webhook/certificate.yaml b/chart/kube-arangodb/templates/webhook/certificate.yaml new file mode 100644 index 000000000..371ce5b29 --- /dev/null +++ b/chart/kube-arangodb/templates/webhook/certificate.yaml @@ -0,0 +1,24 @@ +{{ if .Values.certificate.enabled -}} + +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ template "kube-arangodb.operatorName" . }}-webhook + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +spec: + secretName: {{ template "kube-arangodb.operatorName" . }}-webhook-cert + duration: {{ .Values.certificate.cert.duration }} + issuerRef: + name: {{ template "kube-arangodb.operatorName" . }} + dnsNames: + - {{ template "kube-arangodb.operatorName" . }}-webhook + - {{ template "kube-arangodb.operatorName" . }}-webhook.{{ .Release.Namespace }} + - {{ template "kube-arangodb.operatorName" . }}-webhook.{{ .Release.Namespace }}.svc + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb/templates/webhook/mutation.yaml b/chart/kube-arangodb/templates/webhook/mutation.yaml new file mode 100644 index 000000000..27efd0821 --- /dev/null +++ b/chart/kube-arangodb/templates/webhook/mutation.yaml @@ -0,0 +1,67 @@ +{{ if .Values.webhooks.enabled }} + +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + name: "{{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }}.operator.arangodb.com" + annotations: + cert-manager.io/inject-ca-from: "{{ .Release.Namespace }}/{{ template "kube-arangodb.operatorName" . }}-ca" + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +webhooks: + - name: "pods.policies.scheduler.arangodb.com" + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: In + values: + - {{ .Release.Namespace }} + objectSelector: + matchExpressions: + - key: profiles.arangodb.com/deployment + operator: Exists + rules: + - apiGroups: [""] + apiVersions: ["v1"] + operations: ["CREATE"] + resources: ["pods"] + scope: "Namespaced" + clientConfig: + service: + namespace: {{ .Release.Namespace }} + name: {{ template "kube-arangodb.operatorName" . }}-webhook + path: /webhook/core/v1/pods/policies/mutate + admissionReviewVersions: ["v1"] + sideEffects: None + timeoutSeconds: 5 + - name: "generic.pod.policies.scheduler.arangodb.com" + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: In + values: + - {{ .Release.Namespace }} + objectSelector: + matchExpressions: + - key: profiles.arangodb.com/apply + operator: Exists + rules: + - apiGroups: [""] + apiVersions: ["v1"] + operations: ["CREATE"] + resources: ["pods"] + scope: "Namespaced" + clientConfig: + service: + namespace: {{ .Release.Namespace }} + name: {{ template "kube-arangodb.operatorName" . }}-webhook + path: /webhook/core/v1/pods/policies/mutate + admissionReviewVersions: ["v1"] + sideEffects: None + timeoutSeconds: 5 + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb/templates/webhook/validation.yaml b/chart/kube-arangodb/templates/webhook/validation.yaml new file mode 100644 index 000000000..0c791cacc --- /dev/null +++ b/chart/kube-arangodb/templates/webhook/validation.yaml @@ -0,0 +1,17 @@ +{{ if .Values.webhooks.enabled }} + +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + name: "{{ template "kube-arangodb.operatorName" . }}.{{ .Release.Namespace }}.operator.arangodb.com" + annotations: + cert-manager.io/inject-ca-from: "{{ .Release.Namespace }}/{{ template "kube-arangodb.operatorName" . }}-ca" + labels: + app.kubernetes.io/name: {{ template "kube-arangodb.name" . }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + app.kubernetes.io/managed-by: {{ .Release.Service }} + app.kubernetes.io/instance: {{ .Release.Name }} + release: {{ .Release.Name }} +webhooks: [] + +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb/values.yaml b/chart/kube-arangodb/values.yaml index eb822d04b..2cb60a8f3 100644 --- a/chart/kube-arangodb/values.yaml +++ b/chart/kube-arangodb/values.yaml @@ -1,5 +1,5 @@ operator: - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 imagePullPolicy: IfNotPresent imagePullSecrets: [] scope: legacy @@ -36,6 +36,7 @@ operator: analytics: false networking: true scheduler: true + platform: true tolerations: [] rbac: enabled: true @@ -44,3 +45,20 @@ rbac: acs: true at: true debug: false +webhooks: + enabled: false + args: [] + resources: + limits: + cpu: 1 + memory: 128Mi + requests: + cpu: 250m + memory: 128Mi +certificate: + enabled: false + ca: + duration: 43800h + commonName: "kube-arangodb.operator.cert" + cert: + duration: 8760h diff --git a/cmd/admin.go b/cmd/admin.go index decdc9f80..266b8a7df 100644 --- a/cmd/admin.go +++ b/cmd/admin.go @@ -47,7 +47,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/globals" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" - secretv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/kclient" ) @@ -296,7 +296,7 @@ func createClient(endpoints []string, certCA *x509.CertPool, auth connection.Aut } // getJWTTokenFromSecrets returns token from the secret. -func getJWTTokenFromSecrets(ctx context.Context, secrets secretv1.ReadInterface, name string) (connection.Authentication, error) { +func getJWTTokenFromSecrets(ctx context.Context, secrets generic.ReadClient[*core.Secret], name string) (connection.Authentication, error) { ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) defer cancel() @@ -314,7 +314,7 @@ func getJWTTokenFromSecrets(ctx context.Context, secrets secretv1.ReadInterface, } // getCACertificate returns CA certificate from the secret. -func getCACertificate(ctx context.Context, secrets secretv1.ReadInterface, name string) (*x509.CertPool, error) { +func getCACertificate(ctx context.Context, secrets generic.ReadClient[*core.Secret], name string) (*x509.CertPool, error) { ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) defer cancel() diff --git a/cmd/cmd.go b/cmd/cmd.go index 023e89a99..640dc7f0e 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -84,9 +84,6 @@ const ( ) var ( - logger = logging.Global().RegisterAndGetLogger("root", logging.Info) - eventRecorder = logging.Global().RegisterAndGetLogger("root-event-recorder", logging.Info) - cmdMain = cobra.Command{ Use: "arangodb_operator", Run: executeMain, @@ -120,6 +117,7 @@ var ( enableML bool // Run ml operator enableAnalytics bool // Run analytics operator enableNetworking bool // Run networking operator + enablePlatform bool // Run platform operator enableScheduler bool // Run scheduler operator versionOnly bool // Run only version endpoint, explicitly disabled with other enableK2KClusterSync bool // Run k2kClusterSync operator @@ -187,6 +185,7 @@ var ( mlProbe probe.ReadyProbe analyticsProbe probe.ReadyProbe networkingProbe probe.ReadyProbe + platformProbe probe.ReadyProbe schedulerProbe probe.ReadyProbe k2KClusterSyncProbe probe.ReadyProbe ) @@ -215,6 +214,7 @@ func init() { f.BoolVar(&operatorOptions.enableML, "operator.ml", false, "Enable to run the ArangoML operator") f.BoolVar(&operatorOptions.enableAnalytics, "operator.analytics", false, "Enable to run the Analytics operator") f.BoolVar(&operatorOptions.enableNetworking, "operator.networking", false, "Enable to run the Networking operator") + f.BoolVar(&operatorOptions.enablePlatform, "operator.platform", false, "Enable to run the Platform operator") f.BoolVar(&operatorOptions.enableScheduler, "operator.scheduler", false, "Enable to run the Scheduler operator") f.BoolVar(&operatorOptions.enableK2KClusterSync, "operator.k2k-cluster-sync", false, "Enable to run the ListSimple operator") f.MarkDeprecated("operator.k2k-cluster-sync", "Enabled within deployment operator") @@ -350,15 +350,22 @@ func executeMain(cmd *cobra.Command, args []string) { }) // Check operating mode - if !operatorOptions.enableDeployment && !operatorOptions.enableDeploymentReplication && !operatorOptions.enableStorage && - !operatorOptions.enableBackup && !operatorOptions.enableApps && !operatorOptions.enableK2KClusterSync && - !operatorOptions.enableML && !operatorOptions.enableAnalytics && - !operatorOptions.enableNetworking && !operatorOptions.enableScheduler { + if !operatorOptions.enableDeployment && + !operatorOptions.enableDeploymentReplication && + !operatorOptions.enableStorage && + !operatorOptions.enableBackup && + !operatorOptions.enableApps && + !operatorOptions.enableK2KClusterSync && + !operatorOptions.enableML && + !operatorOptions.enableAnalytics && + !operatorOptions.enableNetworking && + !operatorOptions.enableScheduler && + !operatorOptions.enablePlatform { if !operatorOptions.versionOnly { if version.GetVersionV1().IsEnterprise() { - logger.Fatal("Turn on --operator.deployment, --operator.deployment-replication, --operator.storage, --operator.backup, --operator.apps, --operator.k2k-cluster-sync, --operator.ml, --operator.analytics, --operator.networking, --operator.scheduler or any combination of these") + logger.Fatal("Turn on --operator.deployment, --operator.deployment-replication, --operator.storage, --operator.backup, --operator.apps, --operator.k2k-cluster-sync, --operator.ml, --operator.analytics, --operator.networking, --operator.scheduler, --operator.platform or any combination of these") } else { - logger.Fatal("Turn on --operator.deployment, --operator.deployment-replication, --operator.storage, --operator.backup, --operator.apps, --operator.k2k-cluster-sync, --operator.networking, --operator.scheduler or any combination of these") + logger.Fatal("Turn on --operator.deployment, --operator.deployment-replication, --operator.storage, --operator.backup, --operator.apps, --operator.k2k-cluster-sync, --operator.networking, --operator.scheduler, --operator.platform or any combination of these") } } } else if operatorOptions.versionOnly { @@ -504,6 +511,10 @@ func executeMain(cmd *cobra.Command, args []string) { Enabled: cfg.EnableNetworking, Probe: &networkingProbe, }, + Platform: server.OperatorDependency{ + Enabled: cfg.EnablePlatform, + Probe: &platformProbe, + }, Scheduler: server.OperatorDependency{ Enabled: cfg.EnableScheduler, Probe: &schedulerProbe, @@ -593,6 +604,7 @@ func newOperatorConfigAndDeps(id, namespace, name string) (operator.Config, oper EnableML: operatorOptions.enableML, EnableAnalytics: operatorOptions.enableAnalytics, EnableNetworking: operatorOptions.enableNetworking, + EnablePlatform: operatorOptions.enablePlatform, EnableScheduler: operatorOptions.enableScheduler, EnableK2KClusterSync: operatorOptions.enableK2KClusterSync, AllowChaos: chaosOptions.allowed, @@ -615,6 +627,7 @@ func newOperatorConfigAndDeps(id, namespace, name string) (operator.Config, oper MlProbe: &mlProbe, AnalyticsProbe: &analyticsProbe, NetworkingProbe: &networkingProbe, + PlatformProbe: &platformProbe, SchedulerProbe: &schedulerProbe, K2KClusterSyncProbe: &k2KClusterSyncProbe, } diff --git a/cmd/debug.go b/cmd/debug.go index 225b9e912..56a6c781c 100644 --- a/cmd/debug.go +++ b/cmd/debug.go @@ -34,6 +34,9 @@ func init() { cmdMain.AddCommand(debugPackage) cmdMain.AddCommand(debugPackageV2) + cmdOps.AddCommand(debugPackage) + cmdOps.AddCommand(debugPackageV2) + debugPackage.Flags().StringVarP(&debugPackageInput.Output, "output", "o", "out.tar.gz", "Output of the result gz file. If set to `-` then stdout is used") debugPackageV2.Flags().StringVarP(&debugPackageInput.Output, "output", "o", "out.tar.gz", "Output of the result gz file. If set to `-` then stdout is used") diff --git a/cmd/exporter.go b/cmd/exporter.go index 3b23f7e6c..c77027aed 100644 --- a/cmd/exporter.go +++ b/cmd/exporter.go @@ -22,17 +22,16 @@ package cmd import ( "context" + "net/http" "os" - "os/signal" - "syscall" "time" - "github.com/rs/zerolog/log" "github.com/spf13/cobra" "github.com/arangodb/kube-arangodb/pkg/exporter" "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/errors" + operatorHTTP "github.com/arangodb/kube-arangodb/pkg/util/http" ) var ( @@ -67,23 +66,14 @@ func init() { func cmdExporterCheck(cmd *cobra.Command, args []string) { if err := cmdExporterCheckE(); err != nil { - log.Error().Err(err).Msgf("Fatal") + logger.Err(err).Error("Fatal") os.Exit(1) } } -func onSigterm(f func()) { - sigs := make(chan os.Signal, 1) - - signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) - - go func() { - defer f() - <-sigs - }() -} - func cmdExporterCheckE() error { + ctx := util.CreateSignalContext(context.Background()) + if len(exporterInput.endpoints) < 1 { return errors.Errorf("Requires at least one ArangoDB Endpoint to be present") } @@ -117,26 +107,34 @@ func cmdExporterCheckE() error { return string(data), nil }, false, 15*time.Second) - go mon.UpdateMonitorStatus(util.CreateSignalContext(context.Background())) - - exporter := exporter.NewExporter(exporterInput.listenAddress, "/metrics", p) - if exporterInput.keyfile != "" { - if e, err := exporter.WithKeyfile(exporterInput.keyfile); err != nil { - return err - } else { - if r, err := e.Start(); err != nil { - return err - } else { - onSigterm(r.Stop) - return r.Wait() + go mon.UpdateMonitorStatus(ctx) + + server, err := operatorHTTP.NewServer(ctx, + operatorHTTP.DefaultHTTPServerSettings, + operatorHTTP.WithServeMux(func(in *http.ServeMux) { + in.Handle("/metrics", p) + }, func(in *http.ServeMux) { + in.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + w.Write([]byte(` + ArangoDB Exporter + +

ArangoDB Exporter

+

Metrics

+ + `)) + }) + }), + operatorHTTP.WithTLSConfigFetcherGen(func() util.TLSConfigFetcher { + if exporterInput.keyfile != "" { + return util.NewKeyfileTLSConfig(exporterInput.keyfile) } - } - } else { - if r, err := exporter.Start(); err != nil { - return err - } else { - onSigterm(r.Stop) - return r.Wait() - } + + return nil + }), + ) + if err != nil { + return err } + + return server.StartAddr(ctx, exporterInput.listenAddress) } diff --git a/cmd/logger.go b/cmd/logger.go new file mode 100644 index 000000000..0eace55db --- /dev/null +++ b/cmd/logger.go @@ -0,0 +1,28 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package cmd + +import "github.com/arangodb/kube-arangodb/pkg/logging" + +var ( + logger = logging.Global().RegisterAndGetLogger("root", logging.Info) + eventRecorder = logging.Global().RegisterAndGetLogger("root-event-recorder", logging.Info) +) diff --git a/cmd/webhook.go b/cmd/webhook.go new file mode 100644 index 000000000..609e9ced4 --- /dev/null +++ b/cmd/webhook.go @@ -0,0 +1,113 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package cmd + +import ( + "context" + goHttp "net/http" + "os" + + "github.com/spf13/cobra" + + "github.com/arangodb/kube-arangodb/pkg/handlers/scheduler" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/constants" + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/http" + "github.com/arangodb/kube-arangodb/pkg/util/kclient" + "github.com/arangodb/kube-arangodb/pkg/webhook" +) + +var ( + cmdWebhook = &cobra.Command{ + Use: "webhook", + Run: cmdWebhookCheck, + } + + webhookInput struct { + listenAddress string + + secretName, secretNamespace string + } +) + +func init() { + f := cmdWebhook.PersistentFlags() + + f.StringVar(&webhookInput.listenAddress, "server.address", "0.0.0.0:8828", "Address the webhook will listen on (IP:port)") + f.StringVar(&webhookInput.secretName, "ssl.secret.name", "", "Secret Name containing TLS certificate used for the metrics server") + f.StringVar(&webhookInput.secretNamespace, "ssl.secret.namespace", os.Getenv(constants.EnvOperatorPodNamespace), "Secret Name containing TLS certificate used for the metrics server") + + cmdMain.AddCommand(cmdWebhook) +} + +func cmdWebhookCheck(cmd *cobra.Command, args []string) { + if err := cmdWebhookCheckE(); err != nil { + logger.Err(err).Error("Fatal") + os.Exit(1) + } +} + +func cmdWebhookCheckE() error { + ctx := util.CreateSignalContext(context.Background()) + + client, ok := kclient.GetDefaultFactory().Client() + if !ok { + return errors.Errorf("Unable to get client") + } + + var admissions webhook.Admissions + + admissions = append(admissions, scheduler.WebhookAdmissions(client)...) + + server, err := webhookServer(ctx, client, admissions...) + if err != nil { + return err + } + + logger.Str("addr", webhookInput.listenAddress).Info("Starting Webhook Server") + + return server.StartAddr(ctx, webhookInput.listenAddress) +} + +func webhookServer(ctx context.Context, client kclient.Client, admissions ...webhook.Admission) (http.Server, error) { + return http.NewServer(ctx, + http.DefaultHTTPServerSettings, + http.WithTLSConfigFetcherGen(func() util.TLSConfigFetcher { + if webhookInput.secretName != "" && webhookInput.secretNamespace != "" { + return util.NewSecretTLSConfig(client.Kubernetes().CoreV1().Secrets(webhookInput.secretNamespace), webhookInput.secretName) + } + + return util.NewSelfSignedTLSConfig("operator") + }), + http.WithServeMux( + func(in *goHttp.ServeMux) { + in.HandleFunc("/ready", func(writer goHttp.ResponseWriter, request *goHttp.Request) { + writer.WriteHeader(goHttp.StatusOK) + }) + in.HandleFunc("/health", func(writer goHttp.ResponseWriter, request *goHttp.Request) { + writer.WriteHeader(goHttp.StatusOK) + }) + }, + webhook.Admissions(admissions).Register(), + ), + ) +} diff --git a/dashboard/package-lock.json b/dashboard/package-lock.json index c28667e7b..474ddfca2 100644 --- a/dashboard/package-lock.json +++ b/dashboard/package-lock.json @@ -29,6 +29,7 @@ "version": "7.5.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, "requires": { "@babel/highlight": "^7.0.0" } @@ -657,6 +658,7 @@ "version": "7.5.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", @@ -666,7 +668,8 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true } } }, @@ -2136,6 +2139,41 @@ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.8.2.tgz", "integrity": "sha512-rLu3wcBWH4P5q1CGoSSH/i9hrXs7SlbRLkoq9IGuoPYNGQvDJ3pt/wmOM+XgYjIDRMVIdkUWt0RsfzF50JfnCw==" }, + "@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "requires": { + "eslint-visitor-keys": "^3.4.3" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" + } + } + }, + "@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==" + }, + "@eslint/config-array": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.0.tgz", + "integrity": "sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==", + "requires": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + } + }, + "@eslint/core": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz", + "integrity": "sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==" + }, "@eslint/eslintrc": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz", @@ -2236,6 +2274,69 @@ } } }, + "@eslint/js": { + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", + "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==" + }, + "@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==" + }, + "@eslint/plugin-kit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz", + "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==", + "requires": { + "levn": "^0.4.1" + }, + "dependencies": { + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "requires": { + "prelude-ls": "^1.2.1" + } + } + } + }, + "@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==" + }, + "@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "requires": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "dependencies": { + "@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==" + } + } + }, "@humanwhocodes/config-array": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", @@ -2256,8 +2357,7 @@ "@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" }, "@humanwhocodes/object-schema": { "version": "1.2.1", @@ -2265,6 +2365,11 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==" + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -3885,7 +3990,8 @@ "acorn": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", - "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==" + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", + "dev": true }, "acorn-globals": { "version": "6.0.0", @@ -3904,9 +4010,9 @@ "dev": true }, "acorn-jsx": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz", - "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==" + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" }, "acorn-node": { "version": "1.8.2", @@ -4003,26 +4109,17 @@ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, "ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true }, - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==" - }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -4152,11 +4249,6 @@ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" - }, "async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -4890,6 +4982,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -4902,11 +4995,6 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, "check-types": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", @@ -4969,19 +5057,6 @@ } } }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -5060,6 +5135,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -5067,7 +5143,8 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "colord": { "version": "2.9.3", @@ -5200,12 +5277,6 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" }, - "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "dev": true - }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", @@ -5284,21 +5355,22 @@ } }, "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "dependencies": { - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } } } }, @@ -5799,6 +5871,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, "requires": { "esutils": "^2.0.2" } @@ -5943,11 +6016,6 @@ "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, "emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", @@ -6100,7 +6168,8 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "escodegen": { "version": "2.0.0", @@ -6131,62 +6200,209 @@ } }, "eslint": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.5.0.tgz", - "integrity": "sha512-IIbSW+vKOqMatPmS9ayyku4tvWxHY2iricSRtOz6+ZA5IPRlgXzEL0u/j6dr4eha0ugmhMwDTqxtmNu3kj9O4w==", - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.2", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.1", - "esquery": "^1.0.1", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz", + "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.15.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.5", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.4.1", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3" }, "dependencies": { + "@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + }, + "dependencies": { + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, "import-fresh": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", - "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" } } }, @@ -6480,26 +6696,25 @@ } }, "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", - "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "requires": { - "eslint-visitor-keys": "^1.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } } }, "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==" }, "eslint-webpack-plugin": { "version": "3.2.0", @@ -6582,13 +6797,20 @@ } }, "espree": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz", - "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "requires": { - "acorn": "^7.0.0", - "acorn-jsx": "^5.0.2", - "eslint-visitor-keys": "^1.1.0" + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "dependencies": { + "acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==" + } } }, "esprima": { @@ -6597,25 +6819,40 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } } }, "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "requires": { - "estraverse": "^4.1.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + } } }, "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true }, "estree-walker": { "version": "1.0.1", @@ -6663,17 +6900,6 @@ "strip-final-newline": "^2.0.0" }, "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -6698,14 +6924,12 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -6713,8 +6937,7 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "signal-exit": { "version": "3.0.7", @@ -6726,7 +6949,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -6752,9 +6974,9 @@ } }, "express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dev": true, "requires": { "accepts": "~1.3.8", @@ -6762,7 +6984,7 @@ "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -6796,18 +7018,11 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, - "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - } + "cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "dev": true }, "debug": { "version": "2.6.9", @@ -6824,112 +7039,30 @@ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true }, - "finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - } - }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", - "dev": true - }, - "qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dev": true, - "requires": { - "side-channel": "^1.0.6" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "requires": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - } - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true } } }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-glob": { "version": "3.2.12", @@ -6981,20 +7114,12 @@ "bser": "2.1.1" } }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "requires": { - "flat-cache": "^2.0.1" + "flat-cache": "^4.0.0" } }, "file-loader": { @@ -7042,6 +7167,44 @@ "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", "dev": true }, + "finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, "find-cache-dir": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", @@ -7062,26 +7225,24 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "flatted": "^3.2.9", + "keyv": "^4.5.4" } }, "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==" }, "follow-redirects": { "version": "1.15.6", @@ -7344,7 +7505,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.3.2", @@ -7374,7 +7536,8 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true }, "functions-have-names": { "version": "1.2.3", @@ -7437,6 +7600,7 @@ "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7450,6 +7614,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -7483,7 +7648,8 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true }, "globby": { "version": "11.1.0", @@ -7586,7 +7752,8 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "has-property-descriptors": { "version": "1.0.0", @@ -7900,9 +8067,9 @@ } }, "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==" }, "immer": { "version": "9.0.15", @@ -7938,6 +8105,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -7946,7 +8114,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.8", @@ -7954,26 +8123,6 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - } - }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -8072,11 +8221,6 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, "is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", @@ -8136,11 +8280,6 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" - }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -10156,6 +10295,11 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -10220,6 +10364,14 @@ "resolved": "https://registry.npmjs.org/keyboard-key/-/keyboard-key-1.0.4.tgz", "integrity": "sha512-my04dE6BCwPpwoe4KYKfPxWiwgDYQOHrVmtzn1CfzmoEsGG/ef4oZGaXCzi1+iFhG7CN5JkOuxmei5OABY8/ag==" }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "requires": { + "json-buffer": "3.0.1" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -10263,6 +10415,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -10301,7 +10454,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "requires": { "p-locate": "^5.0.0" } @@ -10326,8 +10478,7 @@ "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, "lodash.sortby": { "version": "4.7.0", @@ -10478,11 +10629,6 @@ "mime-db": "1.52.0" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" - }, "mini-css-extract-plugin": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", @@ -10575,11 +10721,6 @@ "thunky": "^1.0.2" } }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" - }, "nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -10602,11 +10743,6 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==" }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, "no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -10816,18 +10952,11 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "requires": { - "mimic-fn": "^1.0.0" - } - }, "open": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", @@ -10843,6 +10972,7 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.4", @@ -10852,16 +10982,10 @@ "wordwrap": "~1.0.0" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "requires": { "yocto-queue": "^0.1.0" } @@ -10870,7 +10994,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "requires": { "p-limit": "^3.0.2" } @@ -10966,18 +11089,18 @@ "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", @@ -11956,7 +12079,8 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true }, "pretty-bytes": { "version": "5.6.0", @@ -12011,11 +12135,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -12070,6 +12189,67 @@ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "dev": true }, + "qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "requires": { + "side-channel": "^1.0.6" + }, + "dependencies": { + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true + }, + "side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + } + } + } + }, "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -12316,17 +12496,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -12354,14 +12523,12 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -12369,8 +12536,7 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "strip-ansi": { "version": "6.0.1", @@ -12385,7 +12551,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -12571,17 +12736,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -12815,8 +12969,7 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "prelude-ls": { "version": "1.2.1", @@ -12869,7 +13022,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -12877,8 +13029,7 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "strip-ansi": { "version": "6.0.1", @@ -12917,7 +13068,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -13035,11 +13185,6 @@ "functions-have-names": "^1.2.2" } }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" - }, "regexpu-core": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", @@ -13274,15 +13419,6 @@ "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", "dev": true }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, "retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -13295,14 +13431,6 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - }, "rollup": { "version": "2.79.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", @@ -13387,14 +13515,6 @@ } } }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "requires": { - "is-promise": "^2.1.0" - } - }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -13404,14 +13524,6 @@ "queue-microtask": "^1.2.2" } }, - "rxjs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", - "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", - "requires": { - "tslib": "^1.9.0" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -13421,7 +13533,8 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" + "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", + "dev": true }, "sanitize.css": { "version": "13.0.0", @@ -13521,7 +13634,8 @@ "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true }, "send": { "version": "0.19.0", @@ -13722,17 +13836,17 @@ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shell-quote": { "version": "1.7.3", @@ -13754,7 +13868,8 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "sisteransi": { "version": "1.0.5", @@ -13768,16 +13883,6 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, "sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -13952,25 +14057,6 @@ "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, "string.prototype.matchall": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", @@ -14029,21 +14115,6 @@ "is-regexp": "^1.0.0" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" - } - } - }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -14063,9 +14134,9 @@ "dev": true }, "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "style-loader": { "version": "3.3.1", @@ -14097,6 +14168,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -14167,29 +14239,6 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, "tailwindcss": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", @@ -14375,7 +14424,8 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true }, "throat": { "version": "6.0.1", @@ -14383,11 +14433,6 @@ "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, "thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -14404,14 +14449,6 @@ "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.2.tgz", "integrity": "sha512-rru86D9CpQRLvsFG5XFdy0KdLAvjdQDyZCsRcuu60WtzFylDM3eAWSxEVz5kzL2Gp544XiUvPbVKtOA/txLi9Q==" }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -14513,7 +14550,8 @@ "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true }, "tsutils": { "version": "3.21.0", @@ -14528,6 +14566,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -14721,11 +14760,6 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, - "v8-compile-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", - "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" - }, "v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", @@ -15450,6 +15484,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -15883,15 +15918,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "requires": { - "mkdirp": "^0.5.1" - } + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write-file-atomic": { "version": "3.0.3", @@ -16011,8 +16039,7 @@ "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/dashboard/package.json b/dashboard/package.json index c136379c5..1c8e837c5 100644 --- a/dashboard/package.json +++ b/dashboard/package.json @@ -4,7 +4,7 @@ "private": true, "dependencies": { "emotion": "^9.2.12", - "eslint": "^6.5.0", + "eslint": "^9.15.0", "handlebars": "^4.7.7", "js-yaml": ">=3.13.1", "lodash": "^4.17.21", diff --git a/docs/api/ArangoBackup.V1.md b/docs/api/ArangoBackup.V1.md index e7951833c..5d71543f2 100644 --- a/docs/api/ArangoBackup.V1.md +++ b/docs/api/ArangoBackup.V1.md @@ -10,7 +10,7 @@ title: ArangoBackup V1 ### .spec.backoff.iterations -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec_backoff.go#L31) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec_backoff.go#L31) Iterations defines number of iterations before reaching MaxDelay. Default to 5 @@ -18,7 +18,7 @@ Iterations defines number of iterations before reaching MaxDelay. Default to 5 ### .spec.backoff.max_delay -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec_backoff.go#L29) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec_backoff.go#L29) MaxDelay defines maximum delay in seconds. Default to 600 @@ -26,7 +26,7 @@ MaxDelay defines maximum delay in seconds. Default to 600 ### .spec.backoff.max_iterations -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec_backoff.go#L33) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec_backoff.go#L33) MaxIterations defines maximum number of iterations after backoff will be disabled. Default to nil (no limit) @@ -34,7 +34,7 @@ MaxIterations defines maximum number of iterations after backoff will be disable ### .spec.backoff.min_delay -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec_backoff.go#L27) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec_backoff.go#L27) MinDelay defines minimum delay in seconds. Default to 30 @@ -42,7 +42,7 @@ MinDelay defines minimum delay in seconds. Default to 30 ### .spec.deployment.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L54) Name of the ArangoDeployment Custom Resource within same namespace as ArangoBackup Custom Resource. @@ -52,7 +52,7 @@ This field is **immutable**: can't be changed after backup creation ### .spec.download.autoDelete -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L84) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L84) AutoDelete removes the ArangoBackup resource (which removes the backup from the cluster) after successful upload @@ -62,7 +62,7 @@ Default Value: `false` ### .spec.download.credentialsSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L81) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L81) CredentialsSecretName is the name of the secret used while accessing repository @@ -75,7 +75,7 @@ This field is **immutable**: can't be changed after backup creation ### .spec.download.id -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L92) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L92) ID of the ArangoBackup to be downloaded @@ -85,7 +85,7 @@ This field is **immutable**: can't be changed after backup creation ### .spec.download.repositoryURL -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L77) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L77) RepositoryURL is the URL path for file storage Same repositoryURL needs to be defined in `credentialsSecretName` if protocol is other than local. @@ -106,7 +106,7 @@ This field is **immutable**: can't be changed after backup creation ### .spec.lifetime -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L47) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L47) Lifetime is the time after which the backup will be deleted. Format: "1.5h" or "2h45m". @@ -114,7 +114,7 @@ Lifetime is the time after which the backup will be deleted. Format: "1.5h" or " ### .spec.options.allowInconsistent -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L66) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L66) AllowInconsistent flag for Backup creation request. If this value is set to true, backup is taken even if we are not able to acquire lock. @@ -127,7 +127,7 @@ This field is **immutable**: can't be changed after backup creation ### .spec.options.timeout -Type: `number` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L61) +Type: `number` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L61) Timeout for Backup creation request in seconds. Works only when AsyncBackupCreation feature is set to false. @@ -139,7 +139,7 @@ This field is **immutable**: can't be changed after backup creation ### .spec.policyName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L42) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L42) PolicyName name of the ArangoBackupPolicy which created this Custom Resource @@ -149,7 +149,7 @@ This field is **immutable**: can't be changed after backup creation ### .spec.upload.autoDelete -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L84) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L84) AutoDelete removes the ArangoBackup resource (which removes the backup from the cluster) after successful upload @@ -159,7 +159,7 @@ Default Value: `false` ### .spec.upload.credentialsSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L81) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L81) CredentialsSecretName is the name of the secret used while accessing repository @@ -172,7 +172,7 @@ This field is **immutable**: can't be changed after backup creation ### .spec.upload.repositoryURL -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L77) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L77) RepositoryURL is the URL path for file storage Same repositoryURL needs to be defined in `credentialsSecretName` if protocol is other than local. @@ -193,7 +193,7 @@ This field is **immutable**: can't be changed after backup creation ### .status.available -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_status.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_status.go#L36) Available Determines if we can restore from ArangoBackup @@ -201,13 +201,13 @@ Available Determines if we can restore from ArangoBackup ### .status.backoff.iterations -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_status_backoff.go#L30) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_status_backoff.go#L30) *** ### .status.backup.downloaded -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_status.go#L66) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_status.go#L66) Downloaded Determines if ArangoBackup has been downloaded. @@ -215,25 +215,25 @@ Downloaded Determines if ArangoBackup has been downloaded. ### .status.backup.id -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_status.go#L56) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_status.go#L56) *** ### .status.backup.imported -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_status.go#L67) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_status.go#L67) *** ### .status.backup.keys -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_status.go#L70) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_status.go#L70) *** ### .status.backup.numberOfDBServers -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_status.go#L62) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_status.go#L62) NumberOfDBServers Cluster size of the Backup in ArangoDB @@ -241,13 +241,13 @@ NumberOfDBServers Cluster size of the Backup in ArangoDB ### .status.backup.potentiallyInconsistent -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_status.go#L58) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_status.go#L58) *** ### .status.backup.sizeInBytes -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_status.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_status.go#L60) SizeInBytes Size of the Backup in ArangoDB. @@ -255,7 +255,7 @@ SizeInBytes Size of the Backup in ArangoDB. ### .status.backup.uploaded -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_status.go#L64) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_status.go#L64) Uploaded Determines if ArangoBackup has been uploaded @@ -263,13 +263,13 @@ Uploaded Determines if ArangoBackup has been uploaded ### .status.backup.version -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_status.go#L57) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_status.go#L57) *** ### .status.message -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_state.go#L91) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_state.go#L91) Message for the state this object is in. @@ -277,7 +277,7 @@ Message for the state this object is in. ### .status.progress.jobID -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_state.go#L114) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_state.go#L114) JobID ArangoDB job ID for uploading or downloading @@ -285,7 +285,7 @@ JobID ArangoDB job ID for uploading or downloading ### .status.progress.progress -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_state.go#L117) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_state.go#L117) Progress ArangoDB job progress in percents @@ -298,7 +298,7 @@ Example: ### .status.state -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_state.go#L85) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_state.go#L85) State holds the current high level state of the backup diff --git a/docs/api/ArangoBackupPolicy.V1.md b/docs/api/ArangoBackupPolicy.V1.md index fdf6f2760..5381862aa 100644 --- a/docs/api/ArangoBackupPolicy.V1.md +++ b/docs/api/ArangoBackupPolicy.V1.md @@ -10,7 +10,7 @@ title: ArangoBackupPolicy V1 ### .spec.allowConcurrent -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_policy_spec.go#L35) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_policy_spec.go#L35) AllowConcurrent if false, ArangoBackup will not be created when previous Backups are not finished @@ -20,7 +20,7 @@ Default Value: `true` ### .spec.maxBackups -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_policy_spec.go#L43) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_policy_spec.go#L43) MaxBackups defines how many backups should be kept in history (per deployment). Oldest healthy Backups will be deleted. If not specified or 0 then no limit is applied @@ -31,7 +31,7 @@ Default Value: `0` ### .spec.schedule -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_policy_spec.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_policy_spec.go#L32) Schedule is cron-compatible specification of backup schedule Parsed by https://godoc.org/github.com/robfig/cron @@ -40,7 +40,7 @@ Parsed by https://godoc.org/github.com/robfig/cron ### .spec.selector -Type: `meta.LabelSelector` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_policy_spec.go#L39) +Type: `meta.LabelSelector` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_policy_spec.go#L39) DeploymentSelector Selector definition for selecting matching ArangoBackup Custom Resources. @@ -51,7 +51,7 @@ Links: ### .spec.template.backoff.iterations -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec_backoff.go#L31) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec_backoff.go#L31) Iterations defines number of iterations before reaching MaxDelay. Default to 5 @@ -59,7 +59,7 @@ Iterations defines number of iterations before reaching MaxDelay. Default to 5 ### .spec.template.backoff.max_delay -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec_backoff.go#L29) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec_backoff.go#L29) MaxDelay defines maximum delay in seconds. Default to 600 @@ -67,7 +67,7 @@ MaxDelay defines maximum delay in seconds. Default to 600 ### .spec.template.backoff.max_iterations -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec_backoff.go#L33) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec_backoff.go#L33) MaxIterations defines maximum number of iterations after backoff will be disabled. Default to nil (no limit) @@ -75,7 +75,7 @@ MaxIterations defines maximum number of iterations after backoff will be disable ### .spec.template.backoff.min_delay -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec_backoff.go#L27) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec_backoff.go#L27) MinDelay defines minimum delay in seconds. Default to 30 @@ -83,7 +83,7 @@ MinDelay defines minimum delay in seconds. Default to 30 ### .spec.template.lifetime -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_policy_spec.go#L61) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_policy_spec.go#L61) Lifetime is the time after which the backup will be deleted. Format: "1.5h" or "2h45m". @@ -91,7 +91,7 @@ Lifetime is the time after which the backup will be deleted. Format: "1.5h" or " ### .spec.template.options.allowInconsistent -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L66) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L66) AllowInconsistent flag for Backup creation request. If this value is set to true, backup is taken even if we are not able to acquire lock. @@ -104,7 +104,7 @@ This field is **immutable**: can't be changed after backup creation ### .spec.template.options.timeout -Type: `number` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L61) +Type: `number` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L61) Timeout for Backup creation request in seconds. Works only when AsyncBackupCreation feature is set to false. @@ -116,7 +116,7 @@ This field is **immutable**: can't be changed after backup creation ### .spec.template.upload.autoDelete -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L84) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L84) AutoDelete removes the ArangoBackup resource (which removes the backup from the cluster) after successful upload @@ -126,7 +126,7 @@ Default Value: `false` ### .spec.template.upload.credentialsSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L81) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L81) CredentialsSecretName is the name of the secret used while accessing repository @@ -139,7 +139,7 @@ This field is **immutable**: can't be changed after backup creation ### .spec.template.upload.repositoryURL -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_spec.go#L77) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_spec.go#L77) RepositoryURL is the URL path for file storage Same repositoryURL needs to be defined in `credentialsSecretName` if protocol is other than local. @@ -160,7 +160,7 @@ This field is **immutable**: can't be changed after backup creation ### .status.message -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_policy_status.go#L33) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_policy_status.go#L33) Message from the operator in case of failures - schedule not valid, ArangoBackupPolicy not valid @@ -168,7 +168,7 @@ Message from the operator in case of failures - schedule not valid, ArangoBackup ### .status.scheduled -Type: `meta.Time` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/backup/v1/backup_policy_status.go#L31) +Type: `meta.Time` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/backup/v1/backup_policy_status.go#L31) Scheduled Next scheduled time in UTC diff --git a/docs/api/ArangoDeployment.V1.md b/docs/api/ArangoDeployment.V1.md index da6cab973..98e5c4936 100644 --- a/docs/api/ArangoDeployment.V1.md +++ b/docs/api/ArangoDeployment.V1.md @@ -10,7 +10,7 @@ title: ArangoDeployment V1 ### .spec.agents.affinity -Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L156) +Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L156) Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -21,7 +21,7 @@ Links: ### .spec.agents.allowMemberRecreation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L198) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L198) AllowMemberRecreation allows to recreate member. This setting changes the member recreation logic based on group: @@ -32,7 +32,7 @@ This setting changes the member recreation logic based on group: ### .spec.agents.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L99) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L99) Annotations specified the annotations added to Pods in this group. Annotations are merged with `spec.annotations`. @@ -41,7 +41,7 @@ Annotations are merged with `spec.annotations`. ### .spec.agents.annotationsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L101) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L101) AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored @@ -49,7 +49,7 @@ AnnotationsIgnoreList list regexp or plain definitions which annotations should ### .spec.agents.annotationsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L103) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L103) AnnotationsMode Define annotations mode which should be use while overriding annotations @@ -57,7 +57,7 @@ AnnotationsMode Define annotations mode which should be use while overriding ann ### .spec.agents.antiAffinity -Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L152) +Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L152) AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions @@ -68,7 +68,7 @@ Links: ### .spec.agents.args -Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L57) +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L57) Args setting specifies additional command-line arguments passed to all servers of this group. @@ -78,7 +78,7 @@ Default Value: `[]` ### .spec.agents.count -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L49) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L49) Count setting specifies the number of servers to start for the given group. For the Agent group, this value must be a positive, odd number. @@ -91,7 +91,7 @@ as for the `dbservers` group. ### .spec.agents.entrypoint -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L59) Entrypoint overrides container executable @@ -99,19 +99,19 @@ Entrypoint overrides container executable ### .spec.agents.envs\[int\].name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_env_var.go#L26) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_env_var.go#L26) *** ### .spec.agents.envs\[int\].value -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_env_var.go#L27) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_env_var.go#L27) *** ### .spec.agents.ephemeralVolumes.apps.size -Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) Size define size of the ephemeral volume @@ -122,7 +122,7 @@ Links: ### .spec.agents.ephemeralVolumes.temp.size -Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) Size define size of the ephemeral volume @@ -133,7 +133,7 @@ Links: ### .spec.agents.exporterPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L211) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L211) ExporterPort define Port used by exporter @@ -141,7 +141,7 @@ ExporterPort define Port used by exporter ### .spec.agents.extendedRotationCheck -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L181) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L181) ExtendedRotationCheck extend checks for rotation @@ -149,7 +149,7 @@ ExtendedRotationCheck extend checks for rotation ### .spec.agents.externalPortEnabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L193) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L193) ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members @@ -157,7 +157,7 @@ ExternalPortEnabled if external port should be enabled. If is set to false, port ### .spec.agents.indexMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L204) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L204) IndexMethod define group Indexing method @@ -169,7 +169,7 @@ Possible Values: ### .spec.agents.initContainers.containers -Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_init_containers.go#L91) +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_init_containers.go#L93) Containers contains list of containers @@ -180,15 +180,19 @@ Links: ### .spec.agents.initContainers.mode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_init_containers.go#L94) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_init_containers.go#L98) Mode keep container replace mode +Possible Values: +* `"update"` (default) - Enforce update of pod if init container has been changed +* `"ignore"` - Ignores init container changes in pod recreation flow + *** ### .spec.agents.internalPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L189) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L189) InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members @@ -196,7 +200,7 @@ InternalPort define port used in internal communication, can be accessed over lo ### .spec.agents.internalPortProtocol -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L191) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L191) InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members @@ -204,7 +208,7 @@ InternalPortProtocol define protocol of port used in internal communication, can ### .spec.agents.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L105) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L105) Labels specified the labels added to Pods in this group. @@ -212,7 +216,7 @@ Labels specified the labels added to Pods in this group. ### .spec.agents.labelsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L107) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L107) LabelsIgnoreList list regexp or plain definitions which labels should be ignored @@ -220,7 +224,7 @@ LabelsIgnoreList list regexp or plain definitions which labels should be ignored ### .spec.agents.labelsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L109) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L109) LabelsMode Define labels mode which should be use while overriding labels @@ -228,7 +232,7 @@ LabelsMode Define labels mode which should be use while overriding labels ### .spec.agents.maxCount -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L53) MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. @@ -236,7 +240,7 @@ MaxCount specifies a maximum for the count of servers. If set, a specification i ### .spec.agents.memoryReservation -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L81) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L81) MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. @@ -251,7 +255,7 @@ Default Value: `0` ### .spec.agents.minCount -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L51) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L51) MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. @@ -259,7 +263,7 @@ MinCount specifies a minimum for the count of servers. If set, a specification i ### .spec.agents.nodeAffinity -Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L160) +Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L160) NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions @@ -270,7 +274,7 @@ Links: ### .spec.agents.nodeSelector -Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L124) +Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L124) NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. @@ -281,7 +285,7 @@ Links: ### .spec.agents.numactl.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) Args define list of the numactl process @@ -291,7 +295,7 @@ Default Value: `[]` ### .spec.agents.numactl.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) Enabled define if numactl should be enabled @@ -301,7 +305,7 @@ Default Value: `false` ### .spec.agents.numactl.path -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) Path define numactl path within the container @@ -311,7 +315,7 @@ Default Value: `/usr/bin/numactl` ### .spec.agents.overrideDetectedNumberOfCores -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L87) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L87) > [!IMPORTANT] > **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` Container Environment Variable** @@ -328,7 +332,7 @@ Default Value: `true` ### .spec.agents.overrideDetectedTotalMemory -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L75) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L75) > [!IMPORTANT] > **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` Container Environment Variable** @@ -345,19 +349,19 @@ Default Value: `true` ### .spec.agents.podModes.network -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) *** ### .spec.agents.podModes.pid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) *** ### .spec.agents.port -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L209) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L209) Port define Port used by member @@ -365,7 +369,7 @@ Port define Port used by member ### .spec.agents.priorityClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L130) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L130) PriorityClassName specifies a priority class name Will be forwarded to the pod spec. @@ -377,7 +381,7 @@ Links: ### .spec.agents.probes.livenessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L27) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L27) LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group @@ -387,7 +391,7 @@ Default Value: `false` ### .spec.agents.probes.livenessProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -399,7 +403,7 @@ Default Value: `3` ### .spec.agents.probes.livenessProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -410,7 +414,7 @@ Default Value: `2` ### .spec.agents.probes.livenessProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -421,7 +425,7 @@ Default Value: `10` ### .spec.agents.probes.livenessProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -432,7 +436,7 @@ Default Value: `1` ### .spec.agents.probes.livenessProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -443,7 +447,7 @@ Default Value: `2` ### .spec.agents.probes.ReadinessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L34) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L34) > [!WARNING] > ***DEPRECATED*** @@ -456,7 +460,7 @@ OldReadinessProbeDisabled if true readinessProbes are disabled ### .spec.agents.probes.readinessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L36) ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility @@ -464,7 +468,7 @@ ReadinessProbeDisabled override flag for probe disabled in good manner (lowercas ### .spec.agents.probes.readinessProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -476,7 +480,7 @@ Default Value: `3` ### .spec.agents.probes.readinessProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -487,7 +491,7 @@ Default Value: `2` ### .spec.agents.probes.readinessProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -498,7 +502,7 @@ Default Value: `10` ### .spec.agents.probes.readinessProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -509,7 +513,7 @@ Default Value: `1` ### .spec.agents.probes.readinessProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -520,7 +524,7 @@ Default Value: `2` ### .spec.agents.probes.startupProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L41) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L41) StartupProbeDisabled if true startupProbes are disabled @@ -528,7 +532,7 @@ StartupProbeDisabled if true startupProbes are disabled ### .spec.agents.probes.startupProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -540,7 +544,7 @@ Default Value: `3` ### .spec.agents.probes.startupProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -551,7 +555,7 @@ Default Value: `2` ### .spec.agents.probes.startupProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -562,7 +566,7 @@ Default Value: `10` ### .spec.agents.probes.startupProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -573,7 +577,7 @@ Default Value: `1` ### .spec.agents.probes.startupProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -584,7 +588,7 @@ Default Value: `2` ### .spec.agents.pvcResizeMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L144) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L144) VolumeResizeMode specified resize mode for PVCs and PVs @@ -596,7 +600,7 @@ Possible Values: ### .spec.agents.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L69) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L69) Resources holds resource requests & limits @@ -607,7 +611,7 @@ Links: ### .spec.agents.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L61) SchedulerName define scheduler name used for group @@ -615,7 +619,7 @@ SchedulerName define scheduler name used for group ### .spec.agents.securityContext.addCapabilities -Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) +Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) AddCapabilities add new capabilities to containers @@ -623,7 +627,7 @@ AddCapabilities add new capabilities to containers ### .spec.agents.securityContext.allowPrivilegeEscalation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. @@ -631,7 +635,7 @@ AllowPrivilegeEscalation Controls whether a process can gain more privileges tha ### .spec.agents.securityContext.dropAllCapabilities -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) > [!WARNING] > ***DEPRECATED*** @@ -644,7 +648,7 @@ DropAllCapabilities specifies if capabilities should be dropped for this pod con ### .spec.agents.securityContext.fsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) FSGroup is a special supplemental group that applies to all containers in a pod. @@ -652,7 +656,7 @@ FSGroup is a special supplemental group that applies to all containers in a pod. ### .spec.agents.securityContext.privileged -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) Privileged If true, runs container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. @@ -661,7 +665,7 @@ essentially equivalent to root on the host. ### .spec.agents.securityContext.readOnlyRootFilesystem -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. @@ -669,7 +673,7 @@ ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-o ### .spec.agents.securityContext.runAsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) RunAsGroup is the GID to run the entrypoint of the container process. @@ -677,7 +681,7 @@ RunAsGroup is the GID to run the entrypoint of the container process. ### .spec.agents.securityContext.runAsNonRoot -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) RunAsNonRoot if true, indicates that the container must run as a non-root user. @@ -685,7 +689,7 @@ RunAsNonRoot if true, indicates that the container must run as a non-root user. ### .spec.agents.securityContext.runAsUser -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) RunAsUser is the UID to run the entrypoint of the container process. @@ -693,7 +697,7 @@ RunAsUser is the UID to run the entrypoint of the container process. ### .spec.agents.securityContext.seccompProfile -Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) +Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. @@ -704,7 +708,7 @@ Links: ### .spec.agents.securityContext.seLinuxOptions -Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) +Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) SELinuxOptions are the labels to be applied to the container @@ -715,7 +719,7 @@ Links: ### .spec.agents.securityContext.supplementalGroups -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) SupplementalGroups is 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. @@ -724,7 +728,7 @@ the fsGroup (if specified), and group memberships defined in the container image ### .spec.agents.securityContext.sysctls -Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) +Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch. @@ -745,7 +749,7 @@ sysctls: ### .spec.agents.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L120) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L120) ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created for each server of this group. If empty, it defaults to using the @@ -760,7 +764,7 @@ to that service account. ### .spec.agents.shutdownDelay -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L187) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L187) ShutdownDelay define how long operator should delay finalizer removal after shutdown @@ -768,7 +772,7 @@ ShutdownDelay define how long operator should delay finalizer removal after shut ### .spec.agents.shutdownMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L185) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L185) ShutdownMethod describe procedure of member shutdown taken by Operator @@ -776,7 +780,7 @@ ShutdownMethod describe procedure of member shutdown taken by Operator ### .spec.agents.sidecarCoreNames -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L163) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L163) SidecarCoreNames is a list of sidecar containers which must run in the pod. Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. @@ -785,7 +789,7 @@ Some names (e.g.: "server", "worker") are reserved, and they don't have any impa ### .spec.agents.sidecars -Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L167) +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L167) Sidecars specifies a list of additional containers to be started @@ -796,7 +800,7 @@ Links: ### .spec.agents.storageClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L65) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L65) > [!WARNING] > ***DEPRECATED*** @@ -809,7 +813,7 @@ StorageClassName specifies the classname for storage of the servers. ### .spec.agents.terminationGracePeriodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L200) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L200) TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation @@ -817,7 +821,7 @@ TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for ### .spec.agents.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L96) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L96) Tolerations specifies the tolerations added to Pods in this group. By default, suitable tolerations are set for the following keys with the `NoExecute` effect: @@ -833,7 +837,7 @@ Links: ### .spec.agents.volumeAllowShrink -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L148) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L148) > [!WARNING] > ***DEPRECATED*** @@ -846,7 +850,7 @@ VolumeAllowShrink allows shrinking of the volume ### .spec.agents.volumeClaimTemplate -Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L139) +Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L139) VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. @@ -862,7 +866,7 @@ Links: ### .spec.agents.volumeMounts -Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L177) +Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L177) VolumeMounts define list of volume mounts mounted into server container @@ -873,7 +877,7 @@ Links: ### .spec.agents.volumes\[int\].configMap -Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L138) +Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L138) ConfigMap which should be mounted into pod @@ -884,7 +888,7 @@ Links: ### .spec.agents.volumes\[int\].emptyDir -Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L143) +Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L143) EmptyDir @@ -895,7 +899,7 @@ Links: ### .spec.agents.volumes\[int\].hostPath -Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L148) +Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L148) HostPath @@ -906,7 +910,7 @@ Links: ### .spec.agents.volumes\[int\].name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L128) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L128) Name of volume @@ -914,7 +918,7 @@ Name of volume ### .spec.agents.volumes\[int\].persistentVolumeClaim -Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L153) +Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L153) PersistentVolumeClaim @@ -925,7 +929,7 @@ Links: ### .spec.agents.volumes\[int\].secret -Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L133) +Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L133) Secret which should be mounted into pod @@ -936,7 +940,7 @@ Links: ### .spec.allowUnsafeUpgrade -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L152) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L152) AllowUnsafeUpgrade determines if upgrade on missing member or with not in sync shards is allowed @@ -944,7 +948,7 @@ AllowUnsafeUpgrade determines if upgrade on missing member or with not in sync s ### .spec.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L115) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L115) Annotations specifies the annotations added to all ArangoDeployment owned resources (pods, services, PVC’s, PDB’s). @@ -952,7 +956,7 @@ Annotations specifies the annotations added to all ArangoDeployment owned resour ### .spec.annotationsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L118) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L118) AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored @@ -960,7 +964,7 @@ AnnotationsIgnoreList list regexp or plain definitions which annotations should ### .spec.annotationsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L124) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L124) AnnotationsMode defines annotations mode which should be use while overriding annotations. @@ -973,7 +977,7 @@ Possible Values: ### .spec.architecture -Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L257) +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L257) Architecture defines the list of supported architectures. First element on the list is marked as default architecture. @@ -994,7 +998,7 @@ Default Value: `['amd64']` ### .spec.auth.jwtSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/authentication_spec.go#L38) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/authentication_spec.go#L38) JWTSecretName setting specifies the name of a kubernetes `Secret` that contains a secret key used for generating JWT tokens to access all ArangoDB servers. @@ -1008,7 +1012,7 @@ Changing secret key results in restarting of a whole cluster. ### .spec.bootstrap.passwordSecretNames -Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/bootstrap.go#L62) +Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/bootstrap.go#L62) PasswordSecretNames contains a map of username to password-secret-name This setting specifies a secret name for the credentials per specific users. @@ -1026,7 +1030,7 @@ Links: ### .spec.chaos.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/chaos_spec.go#L33) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/chaos_spec.go#L33) Enabled switches the chaos monkey for a deployment on or off. @@ -1034,7 +1038,7 @@ Enabled switches the chaos monkey for a deployment on or off. ### .spec.chaos.interval -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/chaos_spec.go#L35) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/chaos_spec.go#L35) Interval is the time between events @@ -1042,7 +1046,7 @@ Interval is the time between events ### .spec.chaos.kill-pod-probability -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/chaos_spec.go#L37) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/chaos_spec.go#L37) KillPodProbability is the chance of a pod being killed during an event @@ -1050,7 +1054,7 @@ KillPodProbability is the chance of a pod being killed during an event ### .spec.ClusterDomain -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L229) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L229) ClusterDomain define domain used in the kubernetes cluster. Required only of domain is not set to default (cluster.local) @@ -1061,7 +1065,7 @@ Default Value: `cluster.local` ### .spec.communicationMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L237) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L237) CommunicationMethod define communication method used in deployment @@ -1076,7 +1080,7 @@ Possible Values: ### .spec.coordinators.affinity -Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L156) +Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L156) Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -1087,7 +1091,7 @@ Links: ### .spec.coordinators.allowMemberRecreation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L198) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L198) AllowMemberRecreation allows to recreate member. This setting changes the member recreation logic based on group: @@ -1098,7 +1102,7 @@ This setting changes the member recreation logic based on group: ### .spec.coordinators.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L99) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L99) Annotations specified the annotations added to Pods in this group. Annotations are merged with `spec.annotations`. @@ -1107,7 +1111,7 @@ Annotations are merged with `spec.annotations`. ### .spec.coordinators.annotationsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L101) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L101) AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored @@ -1115,7 +1119,7 @@ AnnotationsIgnoreList list regexp or plain definitions which annotations should ### .spec.coordinators.annotationsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L103) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L103) AnnotationsMode Define annotations mode which should be use while overriding annotations @@ -1123,7 +1127,7 @@ AnnotationsMode Define annotations mode which should be use while overriding ann ### .spec.coordinators.antiAffinity -Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L152) +Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L152) AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions @@ -1134,7 +1138,7 @@ Links: ### .spec.coordinators.args -Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L57) +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L57) Args setting specifies additional command-line arguments passed to all servers of this group. @@ -1144,7 +1148,7 @@ Default Value: `[]` ### .spec.coordinators.count -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L49) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L49) Count setting specifies the number of servers to start for the given group. For the Agent group, this value must be a positive, odd number. @@ -1157,7 +1161,7 @@ as for the `dbservers` group. ### .spec.coordinators.entrypoint -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L59) Entrypoint overrides container executable @@ -1165,19 +1169,19 @@ Entrypoint overrides container executable ### .spec.coordinators.envs\[int\].name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_env_var.go#L26) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_env_var.go#L26) *** ### .spec.coordinators.envs\[int\].value -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_env_var.go#L27) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_env_var.go#L27) *** ### .spec.coordinators.ephemeralVolumes.apps.size -Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) Size define size of the ephemeral volume @@ -1188,7 +1192,7 @@ Links: ### .spec.coordinators.ephemeralVolumes.temp.size -Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) Size define size of the ephemeral volume @@ -1199,7 +1203,7 @@ Links: ### .spec.coordinators.exporterPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L211) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L211) ExporterPort define Port used by exporter @@ -1207,7 +1211,7 @@ ExporterPort define Port used by exporter ### .spec.coordinators.extendedRotationCheck -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L181) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L181) ExtendedRotationCheck extend checks for rotation @@ -1215,7 +1219,7 @@ ExtendedRotationCheck extend checks for rotation ### .spec.coordinators.externalPortEnabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L193) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L193) ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members @@ -1223,7 +1227,7 @@ ExternalPortEnabled if external port should be enabled. If is set to false, port ### .spec.coordinators.indexMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L204) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L204) IndexMethod define group Indexing method @@ -1235,7 +1239,7 @@ Possible Values: ### .spec.coordinators.initContainers.containers -Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_init_containers.go#L91) +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_init_containers.go#L93) Containers contains list of containers @@ -1246,15 +1250,19 @@ Links: ### .spec.coordinators.initContainers.mode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_init_containers.go#L94) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_init_containers.go#L98) Mode keep container replace mode +Possible Values: +* `"update"` (default) - Enforce update of pod if init container has been changed +* `"ignore"` - Ignores init container changes in pod recreation flow + *** ### .spec.coordinators.internalPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L189) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L189) InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members @@ -1262,7 +1270,7 @@ InternalPort define port used in internal communication, can be accessed over lo ### .spec.coordinators.internalPortProtocol -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L191) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L191) InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members @@ -1270,7 +1278,7 @@ InternalPortProtocol define protocol of port used in internal communication, can ### .spec.coordinators.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L105) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L105) Labels specified the labels added to Pods in this group. @@ -1278,7 +1286,7 @@ Labels specified the labels added to Pods in this group. ### .spec.coordinators.labelsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L107) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L107) LabelsIgnoreList list regexp or plain definitions which labels should be ignored @@ -1286,7 +1294,7 @@ LabelsIgnoreList list regexp or plain definitions which labels should be ignored ### .spec.coordinators.labelsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L109) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L109) LabelsMode Define labels mode which should be use while overriding labels @@ -1294,7 +1302,7 @@ LabelsMode Define labels mode which should be use while overriding labels ### .spec.coordinators.maxCount -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L53) MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. @@ -1302,7 +1310,7 @@ MaxCount specifies a maximum for the count of servers. If set, a specification i ### .spec.coordinators.memoryReservation -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L81) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L81) MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. @@ -1317,7 +1325,7 @@ Default Value: `0` ### .spec.coordinators.minCount -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L51) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L51) MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. @@ -1325,7 +1333,7 @@ MinCount specifies a minimum for the count of servers. If set, a specification i ### .spec.coordinators.nodeAffinity -Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L160) +Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L160) NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions @@ -1336,7 +1344,7 @@ Links: ### .spec.coordinators.nodeSelector -Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L124) +Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L124) NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. @@ -1347,7 +1355,7 @@ Links: ### .spec.coordinators.numactl.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) Args define list of the numactl process @@ -1357,7 +1365,7 @@ Default Value: `[]` ### .spec.coordinators.numactl.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) Enabled define if numactl should be enabled @@ -1367,7 +1375,7 @@ Default Value: `false` ### .spec.coordinators.numactl.path -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) Path define numactl path within the container @@ -1377,7 +1385,7 @@ Default Value: `/usr/bin/numactl` ### .spec.coordinators.overrideDetectedNumberOfCores -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L87) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L87) > [!IMPORTANT] > **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` Container Environment Variable** @@ -1394,7 +1402,7 @@ Default Value: `true` ### .spec.coordinators.overrideDetectedTotalMemory -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L75) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L75) > [!IMPORTANT] > **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` Container Environment Variable** @@ -1411,19 +1419,19 @@ Default Value: `true` ### .spec.coordinators.podModes.network -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) *** ### .spec.coordinators.podModes.pid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) *** ### .spec.coordinators.port -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L209) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L209) Port define Port used by member @@ -1431,7 +1439,7 @@ Port define Port used by member ### .spec.coordinators.priorityClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L130) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L130) PriorityClassName specifies a priority class name Will be forwarded to the pod spec. @@ -1443,7 +1451,7 @@ Links: ### .spec.coordinators.probes.livenessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L27) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L27) LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group @@ -1453,7 +1461,7 @@ Default Value: `false` ### .spec.coordinators.probes.livenessProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -1465,7 +1473,7 @@ Default Value: `3` ### .spec.coordinators.probes.livenessProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -1476,7 +1484,7 @@ Default Value: `2` ### .spec.coordinators.probes.livenessProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -1487,7 +1495,7 @@ Default Value: `10` ### .spec.coordinators.probes.livenessProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -1498,7 +1506,7 @@ Default Value: `1` ### .spec.coordinators.probes.livenessProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -1509,7 +1517,7 @@ Default Value: `2` ### .spec.coordinators.probes.ReadinessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L34) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L34) > [!WARNING] > ***DEPRECATED*** @@ -1522,7 +1530,7 @@ OldReadinessProbeDisabled if true readinessProbes are disabled ### .spec.coordinators.probes.readinessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L36) ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility @@ -1530,7 +1538,7 @@ ReadinessProbeDisabled override flag for probe disabled in good manner (lowercas ### .spec.coordinators.probes.readinessProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -1542,7 +1550,7 @@ Default Value: `3` ### .spec.coordinators.probes.readinessProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -1553,7 +1561,7 @@ Default Value: `2` ### .spec.coordinators.probes.readinessProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -1564,7 +1572,7 @@ Default Value: `10` ### .spec.coordinators.probes.readinessProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -1575,7 +1583,7 @@ Default Value: `1` ### .spec.coordinators.probes.readinessProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -1586,7 +1594,7 @@ Default Value: `2` ### .spec.coordinators.probes.startupProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L41) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L41) StartupProbeDisabled if true startupProbes are disabled @@ -1594,7 +1602,7 @@ StartupProbeDisabled if true startupProbes are disabled ### .spec.coordinators.probes.startupProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -1606,7 +1614,7 @@ Default Value: `3` ### .spec.coordinators.probes.startupProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -1617,7 +1625,7 @@ Default Value: `2` ### .spec.coordinators.probes.startupProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -1628,7 +1636,7 @@ Default Value: `10` ### .spec.coordinators.probes.startupProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -1639,7 +1647,7 @@ Default Value: `1` ### .spec.coordinators.probes.startupProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -1650,7 +1658,7 @@ Default Value: `2` ### .spec.coordinators.pvcResizeMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L144) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L144) VolumeResizeMode specified resize mode for PVCs and PVs @@ -1662,7 +1670,7 @@ Possible Values: ### .spec.coordinators.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L69) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L69) Resources holds resource requests & limits @@ -1673,7 +1681,7 @@ Links: ### .spec.coordinators.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L61) SchedulerName define scheduler name used for group @@ -1681,7 +1689,7 @@ SchedulerName define scheduler name used for group ### .spec.coordinators.securityContext.addCapabilities -Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) +Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) AddCapabilities add new capabilities to containers @@ -1689,7 +1697,7 @@ AddCapabilities add new capabilities to containers ### .spec.coordinators.securityContext.allowPrivilegeEscalation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. @@ -1697,7 +1705,7 @@ AllowPrivilegeEscalation Controls whether a process can gain more privileges tha ### .spec.coordinators.securityContext.dropAllCapabilities -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) > [!WARNING] > ***DEPRECATED*** @@ -1710,7 +1718,7 @@ DropAllCapabilities specifies if capabilities should be dropped for this pod con ### .spec.coordinators.securityContext.fsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) FSGroup is a special supplemental group that applies to all containers in a pod. @@ -1718,7 +1726,7 @@ FSGroup is a special supplemental group that applies to all containers in a pod. ### .spec.coordinators.securityContext.privileged -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) Privileged If true, runs container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. @@ -1727,7 +1735,7 @@ essentially equivalent to root on the host. ### .spec.coordinators.securityContext.readOnlyRootFilesystem -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. @@ -1735,7 +1743,7 @@ ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-o ### .spec.coordinators.securityContext.runAsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) RunAsGroup is the GID to run the entrypoint of the container process. @@ -1743,7 +1751,7 @@ RunAsGroup is the GID to run the entrypoint of the container process. ### .spec.coordinators.securityContext.runAsNonRoot -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) RunAsNonRoot if true, indicates that the container must run as a non-root user. @@ -1751,7 +1759,7 @@ RunAsNonRoot if true, indicates that the container must run as a non-root user. ### .spec.coordinators.securityContext.runAsUser -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) RunAsUser is the UID to run the entrypoint of the container process. @@ -1759,7 +1767,7 @@ RunAsUser is the UID to run the entrypoint of the container process. ### .spec.coordinators.securityContext.seccompProfile -Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) +Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. @@ -1770,7 +1778,7 @@ Links: ### .spec.coordinators.securityContext.seLinuxOptions -Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) +Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) SELinuxOptions are the labels to be applied to the container @@ -1781,7 +1789,7 @@ Links: ### .spec.coordinators.securityContext.supplementalGroups -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) SupplementalGroups is 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. @@ -1790,7 +1798,7 @@ the fsGroup (if specified), and group memberships defined in the container image ### .spec.coordinators.securityContext.sysctls -Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) +Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch. @@ -1811,7 +1819,7 @@ sysctls: ### .spec.coordinators.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L120) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L120) ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created for each server of this group. If empty, it defaults to using the @@ -1826,7 +1834,7 @@ to that service account. ### .spec.coordinators.shutdownDelay -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L187) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L187) ShutdownDelay define how long operator should delay finalizer removal after shutdown @@ -1834,7 +1842,7 @@ ShutdownDelay define how long operator should delay finalizer removal after shut ### .spec.coordinators.shutdownMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L185) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L185) ShutdownMethod describe procedure of member shutdown taken by Operator @@ -1842,7 +1850,7 @@ ShutdownMethod describe procedure of member shutdown taken by Operator ### .spec.coordinators.sidecarCoreNames -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L163) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L163) SidecarCoreNames is a list of sidecar containers which must run in the pod. Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. @@ -1851,7 +1859,7 @@ Some names (e.g.: "server", "worker") are reserved, and they don't have any impa ### .spec.coordinators.sidecars -Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L167) +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L167) Sidecars specifies a list of additional containers to be started @@ -1862,7 +1870,7 @@ Links: ### .spec.coordinators.storageClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L65) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L65) > [!WARNING] > ***DEPRECATED*** @@ -1875,7 +1883,7 @@ StorageClassName specifies the classname for storage of the servers. ### .spec.coordinators.terminationGracePeriodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L200) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L200) TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation @@ -1883,7 +1891,7 @@ TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for ### .spec.coordinators.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L96) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L96) Tolerations specifies the tolerations added to Pods in this group. By default, suitable tolerations are set for the following keys with the `NoExecute` effect: @@ -1899,7 +1907,7 @@ Links: ### .spec.coordinators.volumeAllowShrink -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L148) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L148) > [!WARNING] > ***DEPRECATED*** @@ -1912,7 +1920,7 @@ VolumeAllowShrink allows shrinking of the volume ### .spec.coordinators.volumeClaimTemplate -Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L139) +Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L139) VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. @@ -1928,7 +1936,7 @@ Links: ### .spec.coordinators.volumeMounts -Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L177) +Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L177) VolumeMounts define list of volume mounts mounted into server container @@ -1939,7 +1947,7 @@ Links: ### .spec.coordinators.volumes\[int\].configMap -Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L138) +Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L138) ConfigMap which should be mounted into pod @@ -1950,7 +1958,7 @@ Links: ### .spec.coordinators.volumes\[int\].emptyDir -Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L143) +Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L143) EmptyDir @@ -1961,7 +1969,7 @@ Links: ### .spec.coordinators.volumes\[int\].hostPath -Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L148) +Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L148) HostPath @@ -1972,7 +1980,7 @@ Links: ### .spec.coordinators.volumes\[int\].name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L128) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L128) Name of volume @@ -1980,7 +1988,7 @@ Name of volume ### .spec.coordinators.volumes\[int\].persistentVolumeClaim -Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L153) +Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L153) PersistentVolumeClaim @@ -1991,7 +1999,7 @@ Links: ### .spec.coordinators.volumes\[int\].secret -Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L133) +Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L133) Secret which should be mounted into pod @@ -2002,7 +2010,7 @@ Links: ### .spec.database.maintenance -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/database_spec.go#L25) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/database_spec.go#L25) Maintenance manage maintenance mode on Cluster side. Requires maintenance feature to be enabled @@ -2010,7 +2018,7 @@ Maintenance manage maintenance mode on Cluster side. Requires maintenance featur ### .spec.dbservers.affinity -Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L156) +Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L156) Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -2021,7 +2029,7 @@ Links: ### .spec.dbservers.allowMemberRecreation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L198) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L198) AllowMemberRecreation allows to recreate member. This setting changes the member recreation logic based on group: @@ -2032,7 +2040,7 @@ This setting changes the member recreation logic based on group: ### .spec.dbservers.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L99) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L99) Annotations specified the annotations added to Pods in this group. Annotations are merged with `spec.annotations`. @@ -2041,7 +2049,7 @@ Annotations are merged with `spec.annotations`. ### .spec.dbservers.annotationsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L101) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L101) AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored @@ -2049,7 +2057,7 @@ AnnotationsIgnoreList list regexp or plain definitions which annotations should ### .spec.dbservers.annotationsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L103) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L103) AnnotationsMode Define annotations mode which should be use while overriding annotations @@ -2057,7 +2065,7 @@ AnnotationsMode Define annotations mode which should be use while overriding ann ### .spec.dbservers.antiAffinity -Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L152) +Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L152) AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions @@ -2068,7 +2076,7 @@ Links: ### .spec.dbservers.args -Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L57) +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L57) Args setting specifies additional command-line arguments passed to all servers of this group. @@ -2078,7 +2086,7 @@ Default Value: `[]` ### .spec.dbservers.count -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L49) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L49) Count setting specifies the number of servers to start for the given group. For the Agent group, this value must be a positive, odd number. @@ -2091,7 +2099,7 @@ as for the `dbservers` group. ### .spec.dbservers.entrypoint -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L59) Entrypoint overrides container executable @@ -2099,19 +2107,19 @@ Entrypoint overrides container executable ### .spec.dbservers.envs\[int\].name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_env_var.go#L26) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_env_var.go#L26) *** ### .spec.dbservers.envs\[int\].value -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_env_var.go#L27) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_env_var.go#L27) *** ### .spec.dbservers.ephemeralVolumes.apps.size -Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) Size define size of the ephemeral volume @@ -2122,7 +2130,7 @@ Links: ### .spec.dbservers.ephemeralVolumes.temp.size -Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) Size define size of the ephemeral volume @@ -2133,7 +2141,7 @@ Links: ### .spec.dbservers.exporterPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L211) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L211) ExporterPort define Port used by exporter @@ -2141,7 +2149,7 @@ ExporterPort define Port used by exporter ### .spec.dbservers.extendedRotationCheck -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L181) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L181) ExtendedRotationCheck extend checks for rotation @@ -2149,7 +2157,7 @@ ExtendedRotationCheck extend checks for rotation ### .spec.dbservers.externalPortEnabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L193) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L193) ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members @@ -2157,7 +2165,7 @@ ExternalPortEnabled if external port should be enabled. If is set to false, port ### .spec.dbservers.indexMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L204) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L204) IndexMethod define group Indexing method @@ -2169,7 +2177,7 @@ Possible Values: ### .spec.dbservers.initContainers.containers -Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_init_containers.go#L91) +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_init_containers.go#L93) Containers contains list of containers @@ -2180,15 +2188,19 @@ Links: ### .spec.dbservers.initContainers.mode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_init_containers.go#L94) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_init_containers.go#L98) Mode keep container replace mode +Possible Values: +* `"update"` (default) - Enforce update of pod if init container has been changed +* `"ignore"` - Ignores init container changes in pod recreation flow + *** ### .spec.dbservers.internalPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L189) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L189) InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members @@ -2196,7 +2208,7 @@ InternalPort define port used in internal communication, can be accessed over lo ### .spec.dbservers.internalPortProtocol -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L191) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L191) InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members @@ -2204,7 +2216,7 @@ InternalPortProtocol define protocol of port used in internal communication, can ### .spec.dbservers.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L105) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L105) Labels specified the labels added to Pods in this group. @@ -2212,7 +2224,7 @@ Labels specified the labels added to Pods in this group. ### .spec.dbservers.labelsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L107) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L107) LabelsIgnoreList list regexp or plain definitions which labels should be ignored @@ -2220,7 +2232,7 @@ LabelsIgnoreList list regexp or plain definitions which labels should be ignored ### .spec.dbservers.labelsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L109) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L109) LabelsMode Define labels mode which should be use while overriding labels @@ -2228,7 +2240,7 @@ LabelsMode Define labels mode which should be use while overriding labels ### .spec.dbservers.maxCount -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L53) MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. @@ -2236,7 +2248,7 @@ MaxCount specifies a maximum for the count of servers. If set, a specification i ### .spec.dbservers.memoryReservation -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L81) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L81) MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. @@ -2251,7 +2263,7 @@ Default Value: `0` ### .spec.dbservers.minCount -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L51) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L51) MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. @@ -2259,7 +2271,7 @@ MinCount specifies a minimum for the count of servers. If set, a specification i ### .spec.dbservers.nodeAffinity -Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L160) +Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L160) NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions @@ -2270,7 +2282,7 @@ Links: ### .spec.dbservers.nodeSelector -Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L124) +Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L124) NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. @@ -2281,7 +2293,7 @@ Links: ### .spec.dbservers.numactl.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) Args define list of the numactl process @@ -2291,7 +2303,7 @@ Default Value: `[]` ### .spec.dbservers.numactl.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) Enabled define if numactl should be enabled @@ -2301,7 +2313,7 @@ Default Value: `false` ### .spec.dbservers.numactl.path -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) Path define numactl path within the container @@ -2311,7 +2323,7 @@ Default Value: `/usr/bin/numactl` ### .spec.dbservers.overrideDetectedNumberOfCores -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L87) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L87) > [!IMPORTANT] > **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` Container Environment Variable** @@ -2328,7 +2340,7 @@ Default Value: `true` ### .spec.dbservers.overrideDetectedTotalMemory -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L75) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L75) > [!IMPORTANT] > **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` Container Environment Variable** @@ -2345,19 +2357,19 @@ Default Value: `true` ### .spec.dbservers.podModes.network -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) *** ### .spec.dbservers.podModes.pid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) *** ### .spec.dbservers.port -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L209) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L209) Port define Port used by member @@ -2365,7 +2377,7 @@ Port define Port used by member ### .spec.dbservers.priorityClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L130) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L130) PriorityClassName specifies a priority class name Will be forwarded to the pod spec. @@ -2377,7 +2389,7 @@ Links: ### .spec.dbservers.probes.livenessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L27) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L27) LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group @@ -2387,7 +2399,7 @@ Default Value: `false` ### .spec.dbservers.probes.livenessProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -2399,7 +2411,7 @@ Default Value: `3` ### .spec.dbservers.probes.livenessProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -2410,7 +2422,7 @@ Default Value: `2` ### .spec.dbservers.probes.livenessProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -2421,7 +2433,7 @@ Default Value: `10` ### .spec.dbservers.probes.livenessProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -2432,7 +2444,7 @@ Default Value: `1` ### .spec.dbservers.probes.livenessProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -2443,7 +2455,7 @@ Default Value: `2` ### .spec.dbservers.probes.ReadinessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L34) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L34) > [!WARNING] > ***DEPRECATED*** @@ -2456,7 +2468,7 @@ OldReadinessProbeDisabled if true readinessProbes are disabled ### .spec.dbservers.probes.readinessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L36) ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility @@ -2464,7 +2476,7 @@ ReadinessProbeDisabled override flag for probe disabled in good manner (lowercas ### .spec.dbservers.probes.readinessProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -2476,7 +2488,7 @@ Default Value: `3` ### .spec.dbservers.probes.readinessProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -2487,7 +2499,7 @@ Default Value: `2` ### .spec.dbservers.probes.readinessProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -2498,7 +2510,7 @@ Default Value: `10` ### .spec.dbservers.probes.readinessProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -2509,7 +2521,7 @@ Default Value: `1` ### .spec.dbservers.probes.readinessProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -2520,7 +2532,7 @@ Default Value: `2` ### .spec.dbservers.probes.startupProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L41) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L41) StartupProbeDisabled if true startupProbes are disabled @@ -2528,7 +2540,7 @@ StartupProbeDisabled if true startupProbes are disabled ### .spec.dbservers.probes.startupProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -2540,7 +2552,7 @@ Default Value: `3` ### .spec.dbservers.probes.startupProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -2551,7 +2563,7 @@ Default Value: `2` ### .spec.dbservers.probes.startupProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -2562,7 +2574,7 @@ Default Value: `10` ### .spec.dbservers.probes.startupProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -2573,7 +2585,7 @@ Default Value: `1` ### .spec.dbservers.probes.startupProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -2584,7 +2596,7 @@ Default Value: `2` ### .spec.dbservers.pvcResizeMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L144) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L144) VolumeResizeMode specified resize mode for PVCs and PVs @@ -2596,7 +2608,7 @@ Possible Values: ### .spec.dbservers.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L69) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L69) Resources holds resource requests & limits @@ -2607,7 +2619,7 @@ Links: ### .spec.dbservers.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L61) SchedulerName define scheduler name used for group @@ -2615,7 +2627,7 @@ SchedulerName define scheduler name used for group ### .spec.dbservers.securityContext.addCapabilities -Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) +Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) AddCapabilities add new capabilities to containers @@ -2623,7 +2635,7 @@ AddCapabilities add new capabilities to containers ### .spec.dbservers.securityContext.allowPrivilegeEscalation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. @@ -2631,7 +2643,7 @@ AllowPrivilegeEscalation Controls whether a process can gain more privileges tha ### .spec.dbservers.securityContext.dropAllCapabilities -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) > [!WARNING] > ***DEPRECATED*** @@ -2644,7 +2656,7 @@ DropAllCapabilities specifies if capabilities should be dropped for this pod con ### .spec.dbservers.securityContext.fsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) FSGroup is a special supplemental group that applies to all containers in a pod. @@ -2652,7 +2664,7 @@ FSGroup is a special supplemental group that applies to all containers in a pod. ### .spec.dbservers.securityContext.privileged -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) Privileged If true, runs container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. @@ -2661,7 +2673,7 @@ essentially equivalent to root on the host. ### .spec.dbservers.securityContext.readOnlyRootFilesystem -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. @@ -2669,7 +2681,7 @@ ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-o ### .spec.dbservers.securityContext.runAsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) RunAsGroup is the GID to run the entrypoint of the container process. @@ -2677,7 +2689,7 @@ RunAsGroup is the GID to run the entrypoint of the container process. ### .spec.dbservers.securityContext.runAsNonRoot -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) RunAsNonRoot if true, indicates that the container must run as a non-root user. @@ -2685,7 +2697,7 @@ RunAsNonRoot if true, indicates that the container must run as a non-root user. ### .spec.dbservers.securityContext.runAsUser -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) RunAsUser is the UID to run the entrypoint of the container process. @@ -2693,7 +2705,7 @@ RunAsUser is the UID to run the entrypoint of the container process. ### .spec.dbservers.securityContext.seccompProfile -Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) +Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. @@ -2704,7 +2716,7 @@ Links: ### .spec.dbservers.securityContext.seLinuxOptions -Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) +Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) SELinuxOptions are the labels to be applied to the container @@ -2715,7 +2727,7 @@ Links: ### .spec.dbservers.securityContext.supplementalGroups -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) SupplementalGroups is 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. @@ -2724,7 +2736,7 @@ the fsGroup (if specified), and group memberships defined in the container image ### .spec.dbservers.securityContext.sysctls -Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) +Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch. @@ -2745,7 +2757,7 @@ sysctls: ### .spec.dbservers.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L120) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L120) ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created for each server of this group. If empty, it defaults to using the @@ -2760,7 +2772,7 @@ to that service account. ### .spec.dbservers.shutdownDelay -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L187) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L187) ShutdownDelay define how long operator should delay finalizer removal after shutdown @@ -2768,7 +2780,7 @@ ShutdownDelay define how long operator should delay finalizer removal after shut ### .spec.dbservers.shutdownMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L185) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L185) ShutdownMethod describe procedure of member shutdown taken by Operator @@ -2776,7 +2788,7 @@ ShutdownMethod describe procedure of member shutdown taken by Operator ### .spec.dbservers.sidecarCoreNames -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L163) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L163) SidecarCoreNames is a list of sidecar containers which must run in the pod. Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. @@ -2785,7 +2797,7 @@ Some names (e.g.: "server", "worker") are reserved, and they don't have any impa ### .spec.dbservers.sidecars -Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L167) +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L167) Sidecars specifies a list of additional containers to be started @@ -2796,7 +2808,7 @@ Links: ### .spec.dbservers.storageClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L65) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L65) > [!WARNING] > ***DEPRECATED*** @@ -2809,7 +2821,7 @@ StorageClassName specifies the classname for storage of the servers. ### .spec.dbservers.terminationGracePeriodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L200) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L200) TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation @@ -2817,7 +2829,7 @@ TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for ### .spec.dbservers.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L96) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L96) Tolerations specifies the tolerations added to Pods in this group. By default, suitable tolerations are set for the following keys with the `NoExecute` effect: @@ -2833,7 +2845,7 @@ Links: ### .spec.dbservers.volumeAllowShrink -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L148) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L148) > [!WARNING] > ***DEPRECATED*** @@ -2846,7 +2858,7 @@ VolumeAllowShrink allows shrinking of the volume ### .spec.dbservers.volumeClaimTemplate -Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L139) +Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L139) VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. @@ -2862,7 +2874,7 @@ Links: ### .spec.dbservers.volumeMounts -Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L177) +Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L177) VolumeMounts define list of volume mounts mounted into server container @@ -2873,7 +2885,7 @@ Links: ### .spec.dbservers.volumes\[int\].configMap -Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L138) +Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L138) ConfigMap which should be mounted into pod @@ -2884,7 +2896,7 @@ Links: ### .spec.dbservers.volumes\[int\].emptyDir -Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L143) +Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L143) EmptyDir @@ -2895,7 +2907,7 @@ Links: ### .spec.dbservers.volumes\[int\].hostPath -Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L148) +Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L148) HostPath @@ -2906,7 +2918,7 @@ Links: ### .spec.dbservers.volumes\[int\].name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L128) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L128) Name of volume @@ -2914,7 +2926,7 @@ Name of volume ### .spec.dbservers.volumes\[int\].persistentVolumeClaim -Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L153) +Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L153) PersistentVolumeClaim @@ -2925,7 +2937,7 @@ Links: ### .spec.dbservers.volumes\[int\].secret -Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L133) +Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L133) Secret which should be mounted into pod @@ -2936,7 +2948,7 @@ Links: ### .spec.disableIPv6 -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L98) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L98) DisableIPv6 setting prevents the use of IPv6 addresses by ArangoDB servers. This setting cannot be changed after the deployment has been created. @@ -2947,7 +2959,7 @@ Default Value: `false` ### .spec.downtimeAllowed -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L93) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L93) DowntimeAllowed setting is used to allow automatic reconciliation actions that yield some downtime of the ArangoDB deployment. When this setting is set to false, no automatic action that may result in downtime is allowed. @@ -2963,7 +2975,7 @@ Default Value: `false` ### .spec.environment -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L54) Environment setting specifies the type of environment in which the deployment is created. @@ -2975,7 +2987,7 @@ Possible Values: ### .spec.externalAccess.advertisedEndpoint -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/external_access_spec.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/external_access_spec.go#L58) AdvertisedEndpoint is passed to the coordinators/single servers for advertising a specific endpoint @@ -2983,7 +2995,7 @@ AdvertisedEndpoint is passed to the coordinators/single servers for advertising ### .spec.externalAccess.loadBalancerIP -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/external_access_spec.go#L48) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/external_access_spec.go#L48) LoadBalancerIP define optional IP used to configure a load-balancer on, in case of Auto or LoadBalancer type. If you do not specify this setting, an IP will be chosen automatically by the load-balancer provisioner. @@ -2992,7 +3004,7 @@ If you do not specify this setting, an IP will be chosen automatically by the lo ### .spec.externalAccess.loadBalancerSourceRanges -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/external_access_spec.go#L55) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/external_access_spec.go#L55) LoadBalancerSourceRanges define LoadBalancerSourceRanges used for LoadBalancer Service type If specified and supported by the platform, this will restrict traffic through the cloud-provider @@ -3006,7 +3018,7 @@ Links: ### .spec.externalAccess.managedServiceNames -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/external_access_spec.go#L62) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/external_access_spec.go#L62) ManagedServiceNames keeps names of services which are not managed by KubeArangoDB. It is only relevant when type of service is `managed`. @@ -3015,7 +3027,7 @@ It is only relevant when type of service is `managed`. ### .spec.externalAccess.nodePort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/external_access_spec.go#L44) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/external_access_spec.go#L44) NodePort define optional port used in case of Auto or NodePort type. This setting is used when `spec.externalAccess.type` is set to `NodePort` or `Auto`. @@ -3025,7 +3037,7 @@ If you do not specify this setting, a random port will be chosen automatically. ### .spec.externalAccess.type -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/external_access_spec.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/external_access_spec.go#L39) Type specifies the type of Service that will be created to provide access to the ArangoDB deployment from outside the Kubernetes cluster. @@ -3039,13 +3051,13 @@ Possible Values: ### .spec.features.foxx.queues -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_features.go#L24) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_features.go#L24) *** ### .spec.gateway.dynamic -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec_gateway.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec_gateway.go#L36) Dynamic setting enables/disables support dynamic configuration of the gateway in the cluster. When enabled, gateway config will be reloaded by ConfigMap live updates. @@ -3056,7 +3068,7 @@ Default Value: `false` ### .spec.gateway.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec_gateway.go#L31) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec_gateway.go#L31) Enabled setting enables/disables support for gateway in the cluster. When enabled, the cluster will contain a number of `gateway` servers. @@ -3067,7 +3079,7 @@ Default Value: `false` ### .spec.gateway.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec_gateway.go#L40) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec_gateway.go#L40) Image is the image to use for the gateway. By default, the image is determined by the operator. @@ -3076,7 +3088,7 @@ By default, the image is determined by the operator. ### .spec.gateways.affinity -Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L156) +Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L156) Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -3087,7 +3099,7 @@ Links: ### .spec.gateways.allowMemberRecreation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L198) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L198) AllowMemberRecreation allows to recreate member. This setting changes the member recreation logic based on group: @@ -3098,7 +3110,7 @@ This setting changes the member recreation logic based on group: ### .spec.gateways.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L99) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L99) Annotations specified the annotations added to Pods in this group. Annotations are merged with `spec.annotations`. @@ -3107,7 +3119,7 @@ Annotations are merged with `spec.annotations`. ### .spec.gateways.annotationsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L101) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L101) AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored @@ -3115,7 +3127,7 @@ AnnotationsIgnoreList list regexp or plain definitions which annotations should ### .spec.gateways.annotationsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L103) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L103) AnnotationsMode Define annotations mode which should be use while overriding annotations @@ -3123,7 +3135,7 @@ AnnotationsMode Define annotations mode which should be use while overriding ann ### .spec.gateways.antiAffinity -Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L152) +Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L152) AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions @@ -3134,7 +3146,7 @@ Links: ### .spec.gateways.args -Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L57) +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L57) Args setting specifies additional command-line arguments passed to all servers of this group. @@ -3144,7 +3156,7 @@ Default Value: `[]` ### .spec.gateways.count -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L49) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L49) Count setting specifies the number of servers to start for the given group. For the Agent group, this value must be a positive, odd number. @@ -3157,7 +3169,7 @@ as for the `dbservers` group. ### .spec.gateways.entrypoint -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L59) Entrypoint overrides container executable @@ -3165,19 +3177,19 @@ Entrypoint overrides container executable ### .spec.gateways.envs\[int\].name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_env_var.go#L26) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_env_var.go#L26) *** ### .spec.gateways.envs\[int\].value -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_env_var.go#L27) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_env_var.go#L27) *** ### .spec.gateways.ephemeralVolumes.apps.size -Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) Size define size of the ephemeral volume @@ -3188,7 +3200,7 @@ Links: ### .spec.gateways.ephemeralVolumes.temp.size -Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) Size define size of the ephemeral volume @@ -3199,7 +3211,7 @@ Links: ### .spec.gateways.exporterPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L211) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L211) ExporterPort define Port used by exporter @@ -3207,7 +3219,7 @@ ExporterPort define Port used by exporter ### .spec.gateways.extendedRotationCheck -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L181) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L181) ExtendedRotationCheck extend checks for rotation @@ -3215,7 +3227,7 @@ ExtendedRotationCheck extend checks for rotation ### .spec.gateways.externalPortEnabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L193) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L193) ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members @@ -3223,7 +3235,7 @@ ExternalPortEnabled if external port should be enabled. If is set to false, port ### .spec.gateways.indexMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L204) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L204) IndexMethod define group Indexing method @@ -3235,7 +3247,7 @@ Possible Values: ### .spec.gateways.initContainers.containers -Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_init_containers.go#L91) +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_init_containers.go#L93) Containers contains list of containers @@ -3246,15 +3258,19 @@ Links: ### .spec.gateways.initContainers.mode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_init_containers.go#L94) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_init_containers.go#L98) Mode keep container replace mode +Possible Values: +* `"update"` (default) - Enforce update of pod if init container has been changed +* `"ignore"` - Ignores init container changes in pod recreation flow + *** ### .spec.gateways.internalPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L189) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L189) InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members @@ -3262,7 +3278,7 @@ InternalPort define port used in internal communication, can be accessed over lo ### .spec.gateways.internalPortProtocol -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L191) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L191) InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members @@ -3270,7 +3286,7 @@ InternalPortProtocol define protocol of port used in internal communication, can ### .spec.gateways.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L105) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L105) Labels specified the labels added to Pods in this group. @@ -3278,7 +3294,7 @@ Labels specified the labels added to Pods in this group. ### .spec.gateways.labelsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L107) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L107) LabelsIgnoreList list regexp or plain definitions which labels should be ignored @@ -3286,7 +3302,7 @@ LabelsIgnoreList list regexp or plain definitions which labels should be ignored ### .spec.gateways.labelsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L109) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L109) LabelsMode Define labels mode which should be use while overriding labels @@ -3294,7 +3310,7 @@ LabelsMode Define labels mode which should be use while overriding labels ### .spec.gateways.maxCount -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L53) MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. @@ -3302,7 +3318,7 @@ MaxCount specifies a maximum for the count of servers. If set, a specification i ### .spec.gateways.memoryReservation -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L81) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L81) MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. @@ -3317,7 +3333,7 @@ Default Value: `0` ### .spec.gateways.minCount -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L51) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L51) MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. @@ -3325,7 +3341,7 @@ MinCount specifies a minimum for the count of servers. If set, a specification i ### .spec.gateways.nodeAffinity -Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L160) +Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L160) NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions @@ -3336,7 +3352,7 @@ Links: ### .spec.gateways.nodeSelector -Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L124) +Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L124) NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. @@ -3347,7 +3363,7 @@ Links: ### .spec.gateways.numactl.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) Args define list of the numactl process @@ -3357,7 +3373,7 @@ Default Value: `[]` ### .spec.gateways.numactl.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) Enabled define if numactl should be enabled @@ -3367,7 +3383,7 @@ Default Value: `false` ### .spec.gateways.numactl.path -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) Path define numactl path within the container @@ -3377,7 +3393,7 @@ Default Value: `/usr/bin/numactl` ### .spec.gateways.overrideDetectedNumberOfCores -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L87) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L87) > [!IMPORTANT] > **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` Container Environment Variable** @@ -3394,7 +3410,7 @@ Default Value: `true` ### .spec.gateways.overrideDetectedTotalMemory -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L75) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L75) > [!IMPORTANT] > **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` Container Environment Variable** @@ -3411,19 +3427,19 @@ Default Value: `true` ### .spec.gateways.podModes.network -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) *** ### .spec.gateways.podModes.pid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) *** ### .spec.gateways.port -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L209) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L209) Port define Port used by member @@ -3431,7 +3447,7 @@ Port define Port used by member ### .spec.gateways.priorityClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L130) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L130) PriorityClassName specifies a priority class name Will be forwarded to the pod spec. @@ -3443,7 +3459,7 @@ Links: ### .spec.gateways.probes.livenessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L27) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L27) LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group @@ -3453,7 +3469,7 @@ Default Value: `false` ### .spec.gateways.probes.livenessProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -3465,7 +3481,7 @@ Default Value: `3` ### .spec.gateways.probes.livenessProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -3476,7 +3492,7 @@ Default Value: `2` ### .spec.gateways.probes.livenessProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -3487,7 +3503,7 @@ Default Value: `10` ### .spec.gateways.probes.livenessProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -3498,7 +3514,7 @@ Default Value: `1` ### .spec.gateways.probes.livenessProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -3509,7 +3525,7 @@ Default Value: `2` ### .spec.gateways.probes.ReadinessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L34) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L34) > [!WARNING] > ***DEPRECATED*** @@ -3522,7 +3538,7 @@ OldReadinessProbeDisabled if true readinessProbes are disabled ### .spec.gateways.probes.readinessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L36) ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility @@ -3530,7 +3546,7 @@ ReadinessProbeDisabled override flag for probe disabled in good manner (lowercas ### .spec.gateways.probes.readinessProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -3542,7 +3558,7 @@ Default Value: `3` ### .spec.gateways.probes.readinessProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -3553,7 +3569,7 @@ Default Value: `2` ### .spec.gateways.probes.readinessProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -3564,7 +3580,7 @@ Default Value: `10` ### .spec.gateways.probes.readinessProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -3575,7 +3591,7 @@ Default Value: `1` ### .spec.gateways.probes.readinessProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -3586,7 +3602,7 @@ Default Value: `2` ### .spec.gateways.probes.startupProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L41) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L41) StartupProbeDisabled if true startupProbes are disabled @@ -3594,7 +3610,7 @@ StartupProbeDisabled if true startupProbes are disabled ### .spec.gateways.probes.startupProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -3606,7 +3622,7 @@ Default Value: `3` ### .spec.gateways.probes.startupProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -3617,7 +3633,7 @@ Default Value: `2` ### .spec.gateways.probes.startupProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -3628,7 +3644,7 @@ Default Value: `10` ### .spec.gateways.probes.startupProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -3639,7 +3655,7 @@ Default Value: `1` ### .spec.gateways.probes.startupProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -3650,7 +3666,7 @@ Default Value: `2` ### .spec.gateways.pvcResizeMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L144) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L144) VolumeResizeMode specified resize mode for PVCs and PVs @@ -3662,7 +3678,7 @@ Possible Values: ### .spec.gateways.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L69) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L69) Resources holds resource requests & limits @@ -3673,7 +3689,7 @@ Links: ### .spec.gateways.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L61) SchedulerName define scheduler name used for group @@ -3681,7 +3697,7 @@ SchedulerName define scheduler name used for group ### .spec.gateways.securityContext.addCapabilities -Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) +Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) AddCapabilities add new capabilities to containers @@ -3689,7 +3705,7 @@ AddCapabilities add new capabilities to containers ### .spec.gateways.securityContext.allowPrivilegeEscalation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. @@ -3697,7 +3713,7 @@ AllowPrivilegeEscalation Controls whether a process can gain more privileges tha ### .spec.gateways.securityContext.dropAllCapabilities -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) > [!WARNING] > ***DEPRECATED*** @@ -3710,7 +3726,7 @@ DropAllCapabilities specifies if capabilities should be dropped for this pod con ### .spec.gateways.securityContext.fsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) FSGroup is a special supplemental group that applies to all containers in a pod. @@ -3718,7 +3734,7 @@ FSGroup is a special supplemental group that applies to all containers in a pod. ### .spec.gateways.securityContext.privileged -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) Privileged If true, runs container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. @@ -3727,7 +3743,7 @@ essentially equivalent to root on the host. ### .spec.gateways.securityContext.readOnlyRootFilesystem -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. @@ -3735,7 +3751,7 @@ ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-o ### .spec.gateways.securityContext.runAsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) RunAsGroup is the GID to run the entrypoint of the container process. @@ -3743,7 +3759,7 @@ RunAsGroup is the GID to run the entrypoint of the container process. ### .spec.gateways.securityContext.runAsNonRoot -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) RunAsNonRoot if true, indicates that the container must run as a non-root user. @@ -3751,7 +3767,7 @@ RunAsNonRoot if true, indicates that the container must run as a non-root user. ### .spec.gateways.securityContext.runAsUser -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) RunAsUser is the UID to run the entrypoint of the container process. @@ -3759,7 +3775,7 @@ RunAsUser is the UID to run the entrypoint of the container process. ### .spec.gateways.securityContext.seccompProfile -Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) +Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. @@ -3770,7 +3786,7 @@ Links: ### .spec.gateways.securityContext.seLinuxOptions -Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) +Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) SELinuxOptions are the labels to be applied to the container @@ -3781,7 +3797,7 @@ Links: ### .spec.gateways.securityContext.supplementalGroups -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) SupplementalGroups is 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. @@ -3790,7 +3806,7 @@ the fsGroup (if specified), and group memberships defined in the container image ### .spec.gateways.securityContext.sysctls -Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) +Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch. @@ -3811,7 +3827,7 @@ sysctls: ### .spec.gateways.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L120) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L120) ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created for each server of this group. If empty, it defaults to using the @@ -3826,7 +3842,7 @@ to that service account. ### .spec.gateways.shutdownDelay -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L187) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L187) ShutdownDelay define how long operator should delay finalizer removal after shutdown @@ -3834,7 +3850,7 @@ ShutdownDelay define how long operator should delay finalizer removal after shut ### .spec.gateways.shutdownMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L185) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L185) ShutdownMethod describe procedure of member shutdown taken by Operator @@ -3842,7 +3858,7 @@ ShutdownMethod describe procedure of member shutdown taken by Operator ### .spec.gateways.sidecarCoreNames -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L163) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L163) SidecarCoreNames is a list of sidecar containers which must run in the pod. Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. @@ -3851,7 +3867,7 @@ Some names (e.g.: "server", "worker") are reserved, and they don't have any impa ### .spec.gateways.sidecars -Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L167) +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L167) Sidecars specifies a list of additional containers to be started @@ -3862,7 +3878,7 @@ Links: ### .spec.gateways.storageClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L65) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L65) > [!WARNING] > ***DEPRECATED*** @@ -3875,7 +3891,7 @@ StorageClassName specifies the classname for storage of the servers. ### .spec.gateways.terminationGracePeriodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L200) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L200) TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation @@ -3883,7 +3899,7 @@ TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for ### .spec.gateways.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L96) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L96) Tolerations specifies the tolerations added to Pods in this group. By default, suitable tolerations are set for the following keys with the `NoExecute` effect: @@ -3899,7 +3915,7 @@ Links: ### .spec.gateways.volumeAllowShrink -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L148) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L148) > [!WARNING] > ***DEPRECATED*** @@ -3912,7 +3928,7 @@ VolumeAllowShrink allows shrinking of the volume ### .spec.gateways.volumeClaimTemplate -Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L139) +Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L139) VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. @@ -3928,7 +3944,7 @@ Links: ### .spec.gateways.volumeMounts -Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L177) +Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L177) VolumeMounts define list of volume mounts mounted into server container @@ -3939,7 +3955,7 @@ Links: ### .spec.gateways.volumes\[int\].configMap -Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L138) +Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L138) ConfigMap which should be mounted into pod @@ -3950,7 +3966,7 @@ Links: ### .spec.gateways.volumes\[int\].emptyDir -Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L143) +Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L143) EmptyDir @@ -3961,7 +3977,7 @@ Links: ### .spec.gateways.volumes\[int\].hostPath -Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L148) +Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L148) HostPath @@ -3972,7 +3988,7 @@ Links: ### .spec.gateways.volumes\[int\].name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L128) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L128) Name of volume @@ -3980,7 +3996,7 @@ Name of volume ### .spec.gateways.volumes\[int\].persistentVolumeClaim -Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L153) +Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L153) PersistentVolumeClaim @@ -3991,7 +4007,7 @@ Links: ### .spec.gateways.volumes\[int\].secret -Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L133) +Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L133) Secret which should be mounted into pod @@ -4002,7 +4018,7 @@ Links: ### .spec.id.affinity -Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_id_group_spec.go#L48) +Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_id_group_spec.go#L48) Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -4013,7 +4029,7 @@ Links: ### .spec.id.antiAffinity -Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_id_group_spec.go#L44) +Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_id_group_spec.go#L44) AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions @@ -4024,7 +4040,7 @@ Links: ### .spec.id.args -Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_id_group_spec.go#L32) +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_id_group_spec.go#L32) Args setting specifies additional command-line arguments passed to all servers of this group. @@ -4034,7 +4050,7 @@ Default Value: `[]` ### .spec.id.entrypoint -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_id_group_spec.go#L28) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_id_group_spec.go#L28) Entrypoint overrides container executable @@ -4042,7 +4058,7 @@ Entrypoint overrides container executable ### .spec.id.nodeAffinity -Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_id_group_spec.go#L52) +Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_id_group_spec.go#L52) NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions @@ -4053,7 +4069,7 @@ Links: ### .spec.id.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_id_group_spec.go#L38) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_id_group_spec.go#L38) NodeSelector specifies a set of selectors for nodes @@ -4061,7 +4077,7 @@ NodeSelector specifies a set of selectors for nodes ### .spec.id.priorityClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_id_group_spec.go#L40) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_id_group_spec.go#L40) PriorityClassName specifies a priority class name @@ -4069,7 +4085,7 @@ PriorityClassName specifies a priority class name ### .spec.id.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_id_group_spec.go#L60) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_id_group_spec.go#L60) Resources holds resource requests & limits @@ -4080,7 +4096,7 @@ Links: ### .spec.id.securityContext.addCapabilities -Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) +Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) AddCapabilities add new capabilities to containers @@ -4088,7 +4104,7 @@ AddCapabilities add new capabilities to containers ### .spec.id.securityContext.allowPrivilegeEscalation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. @@ -4096,7 +4112,7 @@ AllowPrivilegeEscalation Controls whether a process can gain more privileges tha ### .spec.id.securityContext.dropAllCapabilities -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) > [!WARNING] > ***DEPRECATED*** @@ -4109,7 +4125,7 @@ DropAllCapabilities specifies if capabilities should be dropped for this pod con ### .spec.id.securityContext.fsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) FSGroup is a special supplemental group that applies to all containers in a pod. @@ -4117,7 +4133,7 @@ FSGroup is a special supplemental group that applies to all containers in a pod. ### .spec.id.securityContext.privileged -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) Privileged If true, runs container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. @@ -4126,7 +4142,7 @@ essentially equivalent to root on the host. ### .spec.id.securityContext.readOnlyRootFilesystem -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. @@ -4134,7 +4150,7 @@ ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-o ### .spec.id.securityContext.runAsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) RunAsGroup is the GID to run the entrypoint of the container process. @@ -4142,7 +4158,7 @@ RunAsGroup is the GID to run the entrypoint of the container process. ### .spec.id.securityContext.runAsNonRoot -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) RunAsNonRoot if true, indicates that the container must run as a non-root user. @@ -4150,7 +4166,7 @@ RunAsNonRoot if true, indicates that the container must run as a non-root user. ### .spec.id.securityContext.runAsUser -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) RunAsUser is the UID to run the entrypoint of the container process. @@ -4158,7 +4174,7 @@ RunAsUser is the UID to run the entrypoint of the container process. ### .spec.id.securityContext.seccompProfile -Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) +Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. @@ -4169,7 +4185,7 @@ Links: ### .spec.id.securityContext.seLinuxOptions -Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) +Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) SELinuxOptions are the labels to be applied to the container @@ -4180,7 +4196,7 @@ Links: ### .spec.id.securityContext.supplementalGroups -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) SupplementalGroups is 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. @@ -4189,7 +4205,7 @@ the fsGroup (if specified), and group memberships defined in the container image ### .spec.id.securityContext.sysctls -Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) +Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch. @@ -4210,7 +4226,7 @@ sysctls: ### .spec.id.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_id_group_spec.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_id_group_spec.go#L54) ServiceAccountName specifies the name of the service account used for Pods in this group. @@ -4218,7 +4234,7 @@ ServiceAccountName specifies the name of the service account used for Pods in th ### .spec.id.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_id_group_spec.go#L36) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_id_group_spec.go#L36) Tolerations specifies the tolerations added to Pods in this group. @@ -4229,7 +4245,7 @@ Links: ### .spec.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L67) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L67) Image specifies the docker image to use for all ArangoDB servers. In a development environment this setting defaults to arangodb/arangodb:latest. @@ -4240,7 +4256,7 @@ It is highly recommend to use explicit version (not latest) for production envir ### .spec.imageDiscoveryMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L83) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L83) ImageDiscoveryMode specifies the image discovery mode. @@ -4252,7 +4268,7 @@ Possible Values: ### .spec.imagePullPolicy -Type: `core.PullPolicy` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L75) +Type: `core.PullPolicy` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L75) ImagePullPolicy specifies the pull policy for the docker image to use for all ArangoDB servers. @@ -4268,7 +4284,7 @@ Possible Values: ### .spec.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L78) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L78) ImagePullSecrets specifies the list of image pull secrets for the docker image to use for all ArangoDB servers. @@ -4276,7 +4292,7 @@ ImagePullSecrets specifies the list of image pull secrets for the docker image t ### .spec.integration.sidecar.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -4293,7 +4309,7 @@ Links: ### .spec.integration.sidecar.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -4310,7 +4326,7 @@ Links: ### .spec.integration.sidecar.controllerListenPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/integration/integration.go#L36) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/integration/integration.go#L36) ControllerListenPort defines on which port the sidecar container will be listening for controller requests @@ -4320,7 +4336,7 @@ Default Value: `9202` ### .spec.integration.sidecar.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -4331,7 +4347,7 @@ Links: ### .spec.integration.sidecar.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -4342,7 +4358,7 @@ Links: ### .spec.integration.sidecar.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) Image define image details @@ -4350,7 +4366,7 @@ Image define image details ### .spec.integration.sidecar.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -4360,7 +4376,7 @@ Default Value: `IfNotPresent` ### .spec.integration.sidecar.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -4368,7 +4384,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.integration.sidecar.listenPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/integration/integration.go#L32) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/integration/integration.go#L32) ListenPort defines on which port the sidecar container will be listening for connections @@ -4378,7 +4394,7 @@ Default Value: `9201` ### .spec.integration.sidecar.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -4390,7 +4406,7 @@ Links: ### .spec.integration.sidecar.method -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) Method defines the merge method @@ -4402,7 +4418,7 @@ Possible Values: ### .spec.integration.sidecar.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -4413,7 +4429,7 @@ accessible from the network. ### .spec.integration.sidecar.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -4425,7 +4441,7 @@ Links: ### .spec.integration.sidecar.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -4436,7 +4452,7 @@ Links: ### .spec.integration.sidecar.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -4447,7 +4463,7 @@ Links: ### .spec.integration.sidecar.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -4462,7 +4478,7 @@ Links: ### .spec.integration.sidecar.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -4470,7 +4486,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.integration.sidecar.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) Container's working directory. If not specified, the container runtime's default will be used, which @@ -4480,7 +4496,7 @@ might be configured in the container image. ### .spec.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L127) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L127) Labels specifies the labels added to Pods in this group. @@ -4488,7 +4504,7 @@ Labels specifies the labels added to Pods in this group. ### .spec.labelsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L130) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L130) LabelsIgnoreList list regexp or plain definitions which labels should be ignored @@ -4496,7 +4512,7 @@ LabelsIgnoreList list regexp or plain definitions which labels should be ignored ### .spec.labelsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L136) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L136) LabelsMode Define labels mode which should be use while overriding labels @@ -4509,7 +4525,7 @@ Possible Values: ### .spec.license.secretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/license_spec.go#L33) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/license_spec.go#L33) SecretName setting specifies the name of a kubernetes `Secret` that contains the license key token used for enterprise images. This value is not used for @@ -4519,7 +4535,7 @@ the Community Edition. ### .spec.lifecycle.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/lifecycle_spec.go#L31) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/lifecycle_spec.go#L31) Resources holds resource requests & limits @@ -4530,7 +4546,7 @@ Links: ### .spec.memberPropagationMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L212) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L212) MemberPropagationMode defines how changes to pod spec should be propogated. Changes to a pod’s configuration require a restart of that pod in almost all cases. @@ -4546,7 +4562,7 @@ Possible Values: ### .spec.metrics.authentication.jwtTokenSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_metrics_spec.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_metrics_spec.go#L34) JWTTokenSecretName contains the name of the JWT kubernetes secret used for authentication @@ -4554,7 +4570,7 @@ JWTTokenSecretName contains the name of the JWT kubernetes secret used for authe ### .spec.metrics.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_metrics_spec.go#L81) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_metrics_spec.go#L81) Enabled if this is set to `true`, the operator runs a sidecar container for every Agent, DB-Server, Coordinator and Single server. @@ -4568,7 +4584,7 @@ Default Value: `false` ### .spec.metrics.extensions.usageMetrics -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_metrics_spec_extensions.go#L29) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_metrics_spec_extensions.go#L29) > [!IMPORTANT] > **UsageMetrics needs to be also enabled via DBServer Arguments** @@ -4584,7 +4600,7 @@ Default Value: `false` ### .spec.metrics.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_metrics_spec.go#L86) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_metrics_spec.go#L86) > [!WARNING] > ***DEPRECATED*** @@ -4597,7 +4613,7 @@ Image used for the Metrics Sidecar ### .spec.metrics.mode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_metrics_spec.go#L97) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_metrics_spec.go#L97) > [!WARNING] > ***DEPRECATED*** @@ -4610,13 +4626,13 @@ Mode define metrics exported mode ### .spec.metrics.port -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_metrics_spec.go#L107) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_metrics_spec.go#L107) *** ### .spec.metrics.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_metrics_spec.go#L92) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_metrics_spec.go#L92) Resources holds resource requests & limits @@ -4627,19 +4643,19 @@ Links: ### .spec.metrics.serviceMonitor.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_metrics_service_monitor_spec.go#L24) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_metrics_service_monitor_spec.go#L24) *** ### .spec.metrics.serviceMonitor.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_metrics_service_monitor_spec.go#L25) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_metrics_service_monitor_spec.go#L25) *** ### .spec.metrics.tls -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_metrics_spec.go#L103) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_metrics_spec.go#L103) TLS defines if TLS should be enabled on Metrics exporter endpoint. This option will enable TLS only if TLS is enabled on ArangoDeployment, @@ -4651,7 +4667,7 @@ Default Value: `true` ### .spec.mode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L49) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L49) Mode specifies the type of ArangoDB deployment to create. @@ -4666,7 +4682,7 @@ This field is **immutable**: Change of the ArangoDeployment Mode is not possible ### .spec.networkAttachedVolumes -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L112) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L112) NetworkAttachedVolumes If set to `true`, a ResignLeadership operation will be triggered when a DB-Server pod is evicted (rather than a CleanOutServer operation). @@ -4680,25 +4696,25 @@ Default Value: `true` ### .spec.rebalancer.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/rebalancer_spec.go#L26) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/rebalancer_spec.go#L26) *** ### .spec.rebalancer.optimizers.leader -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/rebalancer_spec.go#L75) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/rebalancer_spec.go#L75) *** ### .spec.rebalancer.parallelMoves -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/rebalancer_spec.go#L28) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/rebalancer_spec.go#L28) *** ### .spec.rebalancer.readers.count -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/rebalancer_spec.go#L63) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/rebalancer_spec.go#L63) > [!WARNING] > ***DEPRECATED*** @@ -4711,13 +4727,13 @@ Count Enable Shard Count machanism ### .spec.recovery.autoRecover -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/recovery_spec.go#L26) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/recovery_spec.go#L26) *** ### .spec.restoreEncryptionSecret -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L149) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L149) RestoreEncryptionSecret specifies optional name of secret which contains encryption key used for restore @@ -4725,7 +4741,7 @@ RestoreEncryptionSecret specifies optional name of secret which contains encrypt ### .spec.restoreFrom -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L146) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L146) RestoreFrom setting specifies a `ArangoBackup` resource name the cluster should be restored from. After a restore or failure to do so, the status of the deployment contains information about the restore operation in the restore key. @@ -4740,7 +4756,7 @@ A new restore attempt is made if and only if either in the status restore is not ### .spec.rocksdb.encryption.keySecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/rocksdb_spec.go#L37) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/rocksdb_spec.go#L37) KeySecretName setting specifies the name of a Kubernetes `Secret` that contains an encryption key used for encrypting all data stored by ArangoDB servers. When an encryption key is used, encryption of the data in the cluster is enabled, without it encryption is disabled. @@ -4753,7 +4769,7 @@ The secret specified by this setting, must have a data field named 'key' contain ### .spec.single.affinity -Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L156) +Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L156) Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -4764,7 +4780,7 @@ Links: ### .spec.single.allowMemberRecreation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L198) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L198) AllowMemberRecreation allows to recreate member. This setting changes the member recreation logic based on group: @@ -4775,7 +4791,7 @@ This setting changes the member recreation logic based on group: ### .spec.single.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L99) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L99) Annotations specified the annotations added to Pods in this group. Annotations are merged with `spec.annotations`. @@ -4784,7 +4800,7 @@ Annotations are merged with `spec.annotations`. ### .spec.single.annotationsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L101) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L101) AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored @@ -4792,7 +4808,7 @@ AnnotationsIgnoreList list regexp or plain definitions which annotations should ### .spec.single.annotationsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L103) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L103) AnnotationsMode Define annotations mode which should be use while overriding annotations @@ -4800,7 +4816,7 @@ AnnotationsMode Define annotations mode which should be use while overriding ann ### .spec.single.antiAffinity -Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L152) +Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L152) AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions @@ -4811,7 +4827,7 @@ Links: ### .spec.single.args -Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L57) +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L57) Args setting specifies additional command-line arguments passed to all servers of this group. @@ -4821,7 +4837,7 @@ Default Value: `[]` ### .spec.single.count -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L49) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L49) Count setting specifies the number of servers to start for the given group. For the Agent group, this value must be a positive, odd number. @@ -4834,7 +4850,7 @@ as for the `dbservers` group. ### .spec.single.entrypoint -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L59) Entrypoint overrides container executable @@ -4842,19 +4858,19 @@ Entrypoint overrides container executable ### .spec.single.envs\[int\].name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_env_var.go#L26) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_env_var.go#L26) *** ### .spec.single.envs\[int\].value -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_env_var.go#L27) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_env_var.go#L27) *** ### .spec.single.ephemeralVolumes.apps.size -Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) Size define size of the ephemeral volume @@ -4865,7 +4881,7 @@ Links: ### .spec.single.ephemeralVolumes.temp.size -Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) Size define size of the ephemeral volume @@ -4876,7 +4892,7 @@ Links: ### .spec.single.exporterPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L211) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L211) ExporterPort define Port used by exporter @@ -4884,7 +4900,7 @@ ExporterPort define Port used by exporter ### .spec.single.extendedRotationCheck -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L181) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L181) ExtendedRotationCheck extend checks for rotation @@ -4892,7 +4908,7 @@ ExtendedRotationCheck extend checks for rotation ### .spec.single.externalPortEnabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L193) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L193) ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members @@ -4900,7 +4916,7 @@ ExternalPortEnabled if external port should be enabled. If is set to false, port ### .spec.single.indexMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L204) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L204) IndexMethod define group Indexing method @@ -4912,7 +4928,7 @@ Possible Values: ### .spec.single.initContainers.containers -Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_init_containers.go#L91) +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_init_containers.go#L93) Containers contains list of containers @@ -4923,15 +4939,19 @@ Links: ### .spec.single.initContainers.mode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_init_containers.go#L94) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_init_containers.go#L98) Mode keep container replace mode +Possible Values: +* `"update"` (default) - Enforce update of pod if init container has been changed +* `"ignore"` - Ignores init container changes in pod recreation flow + *** ### .spec.single.internalPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L189) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L189) InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members @@ -4939,7 +4959,7 @@ InternalPort define port used in internal communication, can be accessed over lo ### .spec.single.internalPortProtocol -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L191) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L191) InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members @@ -4947,7 +4967,7 @@ InternalPortProtocol define protocol of port used in internal communication, can ### .spec.single.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L105) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L105) Labels specified the labels added to Pods in this group. @@ -4955,7 +4975,7 @@ Labels specified the labels added to Pods in this group. ### .spec.single.labelsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L107) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L107) LabelsIgnoreList list regexp or plain definitions which labels should be ignored @@ -4963,7 +4983,7 @@ LabelsIgnoreList list regexp or plain definitions which labels should be ignored ### .spec.single.labelsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L109) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L109) LabelsMode Define labels mode which should be use while overriding labels @@ -4971,7 +4991,7 @@ LabelsMode Define labels mode which should be use while overriding labels ### .spec.single.maxCount -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L53) MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. @@ -4979,7 +4999,7 @@ MaxCount specifies a maximum for the count of servers. If set, a specification i ### .spec.single.memoryReservation -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L81) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L81) MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. @@ -4994,7 +5014,7 @@ Default Value: `0` ### .spec.single.minCount -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L51) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L51) MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. @@ -5002,7 +5022,7 @@ MinCount specifies a minimum for the count of servers. If set, a specification i ### .spec.single.nodeAffinity -Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L160) +Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L160) NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions @@ -5013,7 +5033,7 @@ Links: ### .spec.single.nodeSelector -Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L124) +Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L124) NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. @@ -5024,7 +5044,7 @@ Links: ### .spec.single.numactl.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) Args define list of the numactl process @@ -5034,7 +5054,7 @@ Default Value: `[]` ### .spec.single.numactl.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) Enabled define if numactl should be enabled @@ -5044,7 +5064,7 @@ Default Value: `false` ### .spec.single.numactl.path -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) Path define numactl path within the container @@ -5054,7 +5074,7 @@ Default Value: `/usr/bin/numactl` ### .spec.single.overrideDetectedNumberOfCores -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L87) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L87) > [!IMPORTANT] > **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` Container Environment Variable** @@ -5071,7 +5091,7 @@ Default Value: `true` ### .spec.single.overrideDetectedTotalMemory -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L75) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L75) > [!IMPORTANT] > **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` Container Environment Variable** @@ -5088,19 +5108,19 @@ Default Value: `true` ### .spec.single.podModes.network -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) *** ### .spec.single.podModes.pid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) *** ### .spec.single.port -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L209) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L209) Port define Port used by member @@ -5108,7 +5128,7 @@ Port define Port used by member ### .spec.single.priorityClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L130) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L130) PriorityClassName specifies a priority class name Will be forwarded to the pod spec. @@ -5120,7 +5140,7 @@ Links: ### .spec.single.probes.livenessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L27) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L27) LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group @@ -5130,7 +5150,7 @@ Default Value: `false` ### .spec.single.probes.livenessProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -5142,7 +5162,7 @@ Default Value: `3` ### .spec.single.probes.livenessProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -5153,7 +5173,7 @@ Default Value: `2` ### .spec.single.probes.livenessProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -5164,7 +5184,7 @@ Default Value: `10` ### .spec.single.probes.livenessProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -5175,7 +5195,7 @@ Default Value: `1` ### .spec.single.probes.livenessProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -5186,7 +5206,7 @@ Default Value: `2` ### .spec.single.probes.ReadinessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L34) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L34) > [!WARNING] > ***DEPRECATED*** @@ -5199,7 +5219,7 @@ OldReadinessProbeDisabled if true readinessProbes are disabled ### .spec.single.probes.readinessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L36) ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility @@ -5207,7 +5227,7 @@ ReadinessProbeDisabled override flag for probe disabled in good manner (lowercas ### .spec.single.probes.readinessProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -5219,7 +5239,7 @@ Default Value: `3` ### .spec.single.probes.readinessProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -5230,7 +5250,7 @@ Default Value: `2` ### .spec.single.probes.readinessProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -5241,7 +5261,7 @@ Default Value: `10` ### .spec.single.probes.readinessProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -5252,7 +5272,7 @@ Default Value: `1` ### .spec.single.probes.readinessProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -5263,7 +5283,7 @@ Default Value: `2` ### .spec.single.probes.startupProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L41) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L41) StartupProbeDisabled if true startupProbes are disabled @@ -5271,7 +5291,7 @@ StartupProbeDisabled if true startupProbes are disabled ### .spec.single.probes.startupProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -5283,7 +5303,7 @@ Default Value: `3` ### .spec.single.probes.startupProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -5294,7 +5314,7 @@ Default Value: `2` ### .spec.single.probes.startupProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -5305,7 +5325,7 @@ Default Value: `10` ### .spec.single.probes.startupProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -5316,7 +5336,7 @@ Default Value: `1` ### .spec.single.probes.startupProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -5327,7 +5347,7 @@ Default Value: `2` ### .spec.single.pvcResizeMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L144) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L144) VolumeResizeMode specified resize mode for PVCs and PVs @@ -5339,7 +5359,7 @@ Possible Values: ### .spec.single.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L69) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L69) Resources holds resource requests & limits @@ -5350,7 +5370,7 @@ Links: ### .spec.single.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L61) SchedulerName define scheduler name used for group @@ -5358,7 +5378,7 @@ SchedulerName define scheduler name used for group ### .spec.single.securityContext.addCapabilities -Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) +Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) AddCapabilities add new capabilities to containers @@ -5366,7 +5386,7 @@ AddCapabilities add new capabilities to containers ### .spec.single.securityContext.allowPrivilegeEscalation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. @@ -5374,7 +5394,7 @@ AllowPrivilegeEscalation Controls whether a process can gain more privileges tha ### .spec.single.securityContext.dropAllCapabilities -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) > [!WARNING] > ***DEPRECATED*** @@ -5387,7 +5407,7 @@ DropAllCapabilities specifies if capabilities should be dropped for this pod con ### .spec.single.securityContext.fsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) FSGroup is a special supplemental group that applies to all containers in a pod. @@ -5395,7 +5415,7 @@ FSGroup is a special supplemental group that applies to all containers in a pod. ### .spec.single.securityContext.privileged -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) Privileged If true, runs container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. @@ -5404,7 +5424,7 @@ essentially equivalent to root on the host. ### .spec.single.securityContext.readOnlyRootFilesystem -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. @@ -5412,7 +5432,7 @@ ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-o ### .spec.single.securityContext.runAsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) RunAsGroup is the GID to run the entrypoint of the container process. @@ -5420,7 +5440,7 @@ RunAsGroup is the GID to run the entrypoint of the container process. ### .spec.single.securityContext.runAsNonRoot -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) RunAsNonRoot if true, indicates that the container must run as a non-root user. @@ -5428,7 +5448,7 @@ RunAsNonRoot if true, indicates that the container must run as a non-root user. ### .spec.single.securityContext.runAsUser -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) RunAsUser is the UID to run the entrypoint of the container process. @@ -5436,7 +5456,7 @@ RunAsUser is the UID to run the entrypoint of the container process. ### .spec.single.securityContext.seccompProfile -Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) +Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. @@ -5447,7 +5467,7 @@ Links: ### .spec.single.securityContext.seLinuxOptions -Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) +Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) SELinuxOptions are the labels to be applied to the container @@ -5458,7 +5478,7 @@ Links: ### .spec.single.securityContext.supplementalGroups -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) SupplementalGroups is 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. @@ -5467,7 +5487,7 @@ the fsGroup (if specified), and group memberships defined in the container image ### .spec.single.securityContext.sysctls -Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) +Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch. @@ -5488,7 +5508,7 @@ sysctls: ### .spec.single.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L120) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L120) ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created for each server of this group. If empty, it defaults to using the @@ -5503,7 +5523,7 @@ to that service account. ### .spec.single.shutdownDelay -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L187) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L187) ShutdownDelay define how long operator should delay finalizer removal after shutdown @@ -5511,7 +5531,7 @@ ShutdownDelay define how long operator should delay finalizer removal after shut ### .spec.single.shutdownMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L185) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L185) ShutdownMethod describe procedure of member shutdown taken by Operator @@ -5519,7 +5539,7 @@ ShutdownMethod describe procedure of member shutdown taken by Operator ### .spec.single.sidecarCoreNames -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L163) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L163) SidecarCoreNames is a list of sidecar containers which must run in the pod. Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. @@ -5528,7 +5548,7 @@ Some names (e.g.: "server", "worker") are reserved, and they don't have any impa ### .spec.single.sidecars -Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L167) +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L167) Sidecars specifies a list of additional containers to be started @@ -5539,7 +5559,7 @@ Links: ### .spec.single.storageClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L65) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L65) > [!WARNING] > ***DEPRECATED*** @@ -5552,7 +5572,7 @@ StorageClassName specifies the classname for storage of the servers. ### .spec.single.terminationGracePeriodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L200) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L200) TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation @@ -5560,7 +5580,7 @@ TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for ### .spec.single.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L96) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L96) Tolerations specifies the tolerations added to Pods in this group. By default, suitable tolerations are set for the following keys with the `NoExecute` effect: @@ -5576,7 +5596,7 @@ Links: ### .spec.single.volumeAllowShrink -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L148) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L148) > [!WARNING] > ***DEPRECATED*** @@ -5589,7 +5609,7 @@ VolumeAllowShrink allows shrinking of the volume ### .spec.single.volumeClaimTemplate -Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L139) +Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L139) VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. @@ -5605,7 +5625,7 @@ Links: ### .spec.single.volumeMounts -Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L177) +Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L177) VolumeMounts define list of volume mounts mounted into server container @@ -5616,7 +5636,7 @@ Links: ### .spec.single.volumes\[int\].configMap -Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L138) +Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L138) ConfigMap which should be mounted into pod @@ -5627,7 +5647,7 @@ Links: ### .spec.single.volumes\[int\].emptyDir -Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L143) +Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L143) EmptyDir @@ -5638,7 +5658,7 @@ Links: ### .spec.single.volumes\[int\].hostPath -Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L148) +Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L148) HostPath @@ -5649,7 +5669,7 @@ Links: ### .spec.single.volumes\[int\].name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L128) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L128) Name of volume @@ -5657,7 +5677,7 @@ Name of volume ### .spec.single.volumes\[int\].persistentVolumeClaim -Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L153) +Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L153) PersistentVolumeClaim @@ -5668,7 +5688,7 @@ Links: ### .spec.single.volumes\[int\].secret -Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L133) +Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L133) Secret which should be mounted into pod @@ -5679,7 +5699,7 @@ Links: ### .spec.storageEngine -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L61) StorageEngine specifies the type of storage engine used for all servers in the cluster. @@ -5693,7 +5713,7 @@ This field is **immutable**: This setting cannot be changed after the cluster ha ### .spec.sync.auth.clientCASecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/sync_authentication_spec.go#L41) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/sync_authentication_spec.go#L41) ClientCASecretName setting specifies the name of a kubernetes `Secret` that contains a PEM encoded CA certificate used for client certificate verification @@ -5704,7 +5724,7 @@ This is a required setting when `spec.sync.enabled` is `true`. ### .spec.sync.auth.jwtSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/sync_authentication_spec.go#L36) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/sync_authentication_spec.go#L36) JWTSecretName setting specifies the name of a kubernetes `Secret` that contains the JWT token used for accessing all ArangoSync master servers. @@ -5716,7 +5736,7 @@ and stored in a `Secret` with given name. ### .spec.sync.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/sync_spec.go#L34) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/sync_spec.go#L34) Enabled setting enables/disables support for data center 2 data center replication in the cluster. When enabled, the cluster will contain @@ -5728,7 +5748,7 @@ Default Value: `false` ### .spec.sync.externalAccess.accessPackageSecretNames -Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/sync_external_access_spec.go#L49) +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/sync_external_access_spec.go#L49) AccessPackageSecretNames setting specifies the names of zero of more `Secrets` that will be created by the deployment operator containing "access packages". An access package contains those `Secrets` that are needed @@ -5744,7 +5764,7 @@ Links: ### .spec.sync.externalAccess.advertisedEndpoint -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/external_access_spec.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/external_access_spec.go#L58) AdvertisedEndpoint is passed to the coordinators/single servers for advertising a specific endpoint @@ -5752,7 +5772,7 @@ AdvertisedEndpoint is passed to the coordinators/single servers for advertising ### .spec.sync.externalAccess.loadBalancerIP -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/external_access_spec.go#L48) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/external_access_spec.go#L48) LoadBalancerIP define optional IP used to configure a load-balancer on, in case of Auto or LoadBalancer type. If you do not specify this setting, an IP will be chosen automatically by the load-balancer provisioner. @@ -5761,7 +5781,7 @@ If you do not specify this setting, an IP will be chosen automatically by the lo ### .spec.sync.externalAccess.loadBalancerSourceRanges -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/external_access_spec.go#L55) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/external_access_spec.go#L55) LoadBalancerSourceRanges define LoadBalancerSourceRanges used for LoadBalancer Service type If specified and supported by the platform, this will restrict traffic through the cloud-provider @@ -5775,7 +5795,7 @@ Links: ### .spec.sync.externalAccess.managedServiceNames -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/external_access_spec.go#L62) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/external_access_spec.go#L62) ManagedServiceNames keeps names of services which are not managed by KubeArangoDB. It is only relevant when type of service is `managed`. @@ -5784,7 +5804,7 @@ It is only relevant when type of service is `managed`. ### .spec.sync.externalAccess.masterEndpoint -Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/sync_external_access_spec.go#L40) +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/sync_external_access_spec.go#L40) MasterEndpoint setting specifies the master endpoint(s) advertised by the ArangoSync SyncMasters. If not set, this setting defaults to: @@ -5795,7 +5815,7 @@ If not set, this setting defaults to: ### .spec.sync.externalAccess.nodePort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/external_access_spec.go#L44) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/external_access_spec.go#L44) NodePort define optional port used in case of Auto or NodePort type. This setting is used when `spec.externalAccess.type` is set to `NodePort` or `Auto`. @@ -5805,7 +5825,7 @@ If you do not specify this setting, a random port will be chosen automatically. ### .spec.sync.externalAccess.type -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/external_access_spec.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/external_access_spec.go#L39) Type specifies the type of Service that will be created to provide access to the ArangoDB deployment from outside the Kubernetes cluster. @@ -5819,13 +5839,13 @@ Possible Values: ### .spec.sync.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/sync_spec.go#L40) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/sync_spec.go#L40) *** ### .spec.sync.monitoring.tokenSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/sync_monitoring_spec.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/sync_monitoring_spec.go#L34) TokenSecretName setting specifies the name of a kubernetes `Secret` that contains the bearer token used for accessing all monitoring endpoints of all arangod/arangosync servers. @@ -5835,7 +5855,7 @@ When not specified, no monitoring token is used. ### .spec.sync.tls.altNames -Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/tls_spec.go#L72) +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/tls_spec.go#L72) AltNames setting specifies a list of alternate names that will be added to all generated certificates. These names can be DNS names or email addresses. @@ -5845,7 +5865,7 @@ The default value is empty. ### .spec.sync.tls.caSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/tls_spec.go#L67) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/tls_spec.go#L67) CASecretName setting specifies the name of a kubernetes `Secret` that contains a standard CA certificate + private key used to sign certificates for individual @@ -5862,19 +5882,31 @@ The specified `Secret`, must contain the following data fields: ### .spec.sync.tls.mode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/tls_spec.go#L81) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/tls_spec.go#L81) *** -### .spec.sync.tls.sni.mapping.\ +### .spec.sync.tls.sni.mapping + +Type: `map[string][]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/tls_sni_spec.go#L36) + +The mapping of the Server Name Indication options. + +Links: +* [Server Name Indication](https://docs.arangodb.com/stable/components/arangodb-server/options/#--sslserver-name-indication) -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/tls_sni_spec.go#L30) +Example: +```yaml +mapping: + secret: + - domain.example.com +``` *** ### .spec.sync.tls.ttl -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/tls_spec.go#L79) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/tls_spec.go#L79) TTL setting specifies the time to live of all generated server certificates. When the server certificate is about to expire, it will be automatically replaced @@ -5888,7 +5920,7 @@ Default Value: `"2160h" (about 3 months)` ### .spec.syncmasters.affinity -Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L156) +Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L156) Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -5899,7 +5931,7 @@ Links: ### .spec.syncmasters.allowMemberRecreation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L198) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L198) AllowMemberRecreation allows to recreate member. This setting changes the member recreation logic based on group: @@ -5910,7 +5942,7 @@ This setting changes the member recreation logic based on group: ### .spec.syncmasters.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L99) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L99) Annotations specified the annotations added to Pods in this group. Annotations are merged with `spec.annotations`. @@ -5919,7 +5951,7 @@ Annotations are merged with `spec.annotations`. ### .spec.syncmasters.annotationsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L101) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L101) AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored @@ -5927,7 +5959,7 @@ AnnotationsIgnoreList list regexp or plain definitions which annotations should ### .spec.syncmasters.annotationsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L103) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L103) AnnotationsMode Define annotations mode which should be use while overriding annotations @@ -5935,7 +5967,7 @@ AnnotationsMode Define annotations mode which should be use while overriding ann ### .spec.syncmasters.antiAffinity -Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L152) +Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L152) AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions @@ -5946,7 +5978,7 @@ Links: ### .spec.syncmasters.args -Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L57) +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L57) Args setting specifies additional command-line arguments passed to all servers of this group. @@ -5956,7 +5988,7 @@ Default Value: `[]` ### .spec.syncmasters.count -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L49) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L49) Count setting specifies the number of servers to start for the given group. For the Agent group, this value must be a positive, odd number. @@ -5969,7 +6001,7 @@ as for the `dbservers` group. ### .spec.syncmasters.entrypoint -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L59) Entrypoint overrides container executable @@ -5977,19 +6009,19 @@ Entrypoint overrides container executable ### .spec.syncmasters.envs\[int\].name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_env_var.go#L26) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_env_var.go#L26) *** ### .spec.syncmasters.envs\[int\].value -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_env_var.go#L27) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_env_var.go#L27) *** ### .spec.syncmasters.ephemeralVolumes.apps.size -Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) Size define size of the ephemeral volume @@ -6000,7 +6032,7 @@ Links: ### .spec.syncmasters.ephemeralVolumes.temp.size -Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) Size define size of the ephemeral volume @@ -6011,7 +6043,7 @@ Links: ### .spec.syncmasters.exporterPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L211) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L211) ExporterPort define Port used by exporter @@ -6019,7 +6051,7 @@ ExporterPort define Port used by exporter ### .spec.syncmasters.extendedRotationCheck -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L181) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L181) ExtendedRotationCheck extend checks for rotation @@ -6027,7 +6059,7 @@ ExtendedRotationCheck extend checks for rotation ### .spec.syncmasters.externalPortEnabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L193) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L193) ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members @@ -6035,7 +6067,7 @@ ExternalPortEnabled if external port should be enabled. If is set to false, port ### .spec.syncmasters.indexMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L204) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L204) IndexMethod define group Indexing method @@ -6047,7 +6079,7 @@ Possible Values: ### .spec.syncmasters.initContainers.containers -Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_init_containers.go#L91) +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_init_containers.go#L93) Containers contains list of containers @@ -6058,15 +6090,19 @@ Links: ### .spec.syncmasters.initContainers.mode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_init_containers.go#L94) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_init_containers.go#L98) Mode keep container replace mode +Possible Values: +* `"update"` (default) - Enforce update of pod if init container has been changed +* `"ignore"` - Ignores init container changes in pod recreation flow + *** ### .spec.syncmasters.internalPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L189) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L189) InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members @@ -6074,7 +6110,7 @@ InternalPort define port used in internal communication, can be accessed over lo ### .spec.syncmasters.internalPortProtocol -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L191) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L191) InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members @@ -6082,7 +6118,7 @@ InternalPortProtocol define protocol of port used in internal communication, can ### .spec.syncmasters.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L105) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L105) Labels specified the labels added to Pods in this group. @@ -6090,7 +6126,7 @@ Labels specified the labels added to Pods in this group. ### .spec.syncmasters.labelsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L107) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L107) LabelsIgnoreList list regexp or plain definitions which labels should be ignored @@ -6098,7 +6134,7 @@ LabelsIgnoreList list regexp or plain definitions which labels should be ignored ### .spec.syncmasters.labelsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L109) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L109) LabelsMode Define labels mode which should be use while overriding labels @@ -6106,7 +6142,7 @@ LabelsMode Define labels mode which should be use while overriding labels ### .spec.syncmasters.maxCount -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L53) MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. @@ -6114,7 +6150,7 @@ MaxCount specifies a maximum for the count of servers. If set, a specification i ### .spec.syncmasters.memoryReservation -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L81) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L81) MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. @@ -6129,7 +6165,7 @@ Default Value: `0` ### .spec.syncmasters.minCount -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L51) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L51) MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. @@ -6137,7 +6173,7 @@ MinCount specifies a minimum for the count of servers. If set, a specification i ### .spec.syncmasters.nodeAffinity -Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L160) +Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L160) NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions @@ -6148,7 +6184,7 @@ Links: ### .spec.syncmasters.nodeSelector -Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L124) +Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L124) NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. @@ -6159,7 +6195,7 @@ Links: ### .spec.syncmasters.numactl.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) Args define list of the numactl process @@ -6169,7 +6205,7 @@ Default Value: `[]` ### .spec.syncmasters.numactl.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) Enabled define if numactl should be enabled @@ -6179,7 +6215,7 @@ Default Value: `false` ### .spec.syncmasters.numactl.path -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) Path define numactl path within the container @@ -6189,7 +6225,7 @@ Default Value: `/usr/bin/numactl` ### .spec.syncmasters.overrideDetectedNumberOfCores -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L87) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L87) > [!IMPORTANT] > **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` Container Environment Variable** @@ -6206,7 +6242,7 @@ Default Value: `true` ### .spec.syncmasters.overrideDetectedTotalMemory -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L75) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L75) > [!IMPORTANT] > **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` Container Environment Variable** @@ -6223,19 +6259,19 @@ Default Value: `true` ### .spec.syncmasters.podModes.network -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) *** ### .spec.syncmasters.podModes.pid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) *** ### .spec.syncmasters.port -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L209) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L209) Port define Port used by member @@ -6243,7 +6279,7 @@ Port define Port used by member ### .spec.syncmasters.priorityClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L130) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L130) PriorityClassName specifies a priority class name Will be forwarded to the pod spec. @@ -6255,7 +6291,7 @@ Links: ### .spec.syncmasters.probes.livenessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L27) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L27) LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group @@ -6265,7 +6301,7 @@ Default Value: `false` ### .spec.syncmasters.probes.livenessProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -6277,7 +6313,7 @@ Default Value: `3` ### .spec.syncmasters.probes.livenessProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -6288,7 +6324,7 @@ Default Value: `2` ### .spec.syncmasters.probes.livenessProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -6299,7 +6335,7 @@ Default Value: `10` ### .spec.syncmasters.probes.livenessProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -6310,7 +6346,7 @@ Default Value: `1` ### .spec.syncmasters.probes.livenessProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -6321,7 +6357,7 @@ Default Value: `2` ### .spec.syncmasters.probes.ReadinessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L34) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L34) > [!WARNING] > ***DEPRECATED*** @@ -6334,7 +6370,7 @@ OldReadinessProbeDisabled if true readinessProbes are disabled ### .spec.syncmasters.probes.readinessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L36) ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility @@ -6342,7 +6378,7 @@ ReadinessProbeDisabled override flag for probe disabled in good manner (lowercas ### .spec.syncmasters.probes.readinessProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -6354,7 +6390,7 @@ Default Value: `3` ### .spec.syncmasters.probes.readinessProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -6365,7 +6401,7 @@ Default Value: `2` ### .spec.syncmasters.probes.readinessProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -6376,7 +6412,7 @@ Default Value: `10` ### .spec.syncmasters.probes.readinessProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -6387,7 +6423,7 @@ Default Value: `1` ### .spec.syncmasters.probes.readinessProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -6398,7 +6434,7 @@ Default Value: `2` ### .spec.syncmasters.probes.startupProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L41) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L41) StartupProbeDisabled if true startupProbes are disabled @@ -6406,7 +6442,7 @@ StartupProbeDisabled if true startupProbes are disabled ### .spec.syncmasters.probes.startupProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -6418,7 +6454,7 @@ Default Value: `3` ### .spec.syncmasters.probes.startupProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -6429,7 +6465,7 @@ Default Value: `2` ### .spec.syncmasters.probes.startupProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -6440,7 +6476,7 @@ Default Value: `10` ### .spec.syncmasters.probes.startupProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -6451,7 +6487,7 @@ Default Value: `1` ### .spec.syncmasters.probes.startupProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -6462,7 +6498,7 @@ Default Value: `2` ### .spec.syncmasters.pvcResizeMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L144) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L144) VolumeResizeMode specified resize mode for PVCs and PVs @@ -6474,7 +6510,7 @@ Possible Values: ### .spec.syncmasters.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L69) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L69) Resources holds resource requests & limits @@ -6485,7 +6521,7 @@ Links: ### .spec.syncmasters.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L61) SchedulerName define scheduler name used for group @@ -6493,7 +6529,7 @@ SchedulerName define scheduler name used for group ### .spec.syncmasters.securityContext.addCapabilities -Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) +Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) AddCapabilities add new capabilities to containers @@ -6501,7 +6537,7 @@ AddCapabilities add new capabilities to containers ### .spec.syncmasters.securityContext.allowPrivilegeEscalation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. @@ -6509,7 +6545,7 @@ AllowPrivilegeEscalation Controls whether a process can gain more privileges tha ### .spec.syncmasters.securityContext.dropAllCapabilities -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) > [!WARNING] > ***DEPRECATED*** @@ -6522,7 +6558,7 @@ DropAllCapabilities specifies if capabilities should be dropped for this pod con ### .spec.syncmasters.securityContext.fsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) FSGroup is a special supplemental group that applies to all containers in a pod. @@ -6530,7 +6566,7 @@ FSGroup is a special supplemental group that applies to all containers in a pod. ### .spec.syncmasters.securityContext.privileged -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) Privileged If true, runs container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. @@ -6539,7 +6575,7 @@ essentially equivalent to root on the host. ### .spec.syncmasters.securityContext.readOnlyRootFilesystem -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. @@ -6547,7 +6583,7 @@ ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-o ### .spec.syncmasters.securityContext.runAsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) RunAsGroup is the GID to run the entrypoint of the container process. @@ -6555,7 +6591,7 @@ RunAsGroup is the GID to run the entrypoint of the container process. ### .spec.syncmasters.securityContext.runAsNonRoot -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) RunAsNonRoot if true, indicates that the container must run as a non-root user. @@ -6563,7 +6599,7 @@ RunAsNonRoot if true, indicates that the container must run as a non-root user. ### .spec.syncmasters.securityContext.runAsUser -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) RunAsUser is the UID to run the entrypoint of the container process. @@ -6571,7 +6607,7 @@ RunAsUser is the UID to run the entrypoint of the container process. ### .spec.syncmasters.securityContext.seccompProfile -Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) +Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. @@ -6582,7 +6618,7 @@ Links: ### .spec.syncmasters.securityContext.seLinuxOptions -Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) +Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) SELinuxOptions are the labels to be applied to the container @@ -6593,7 +6629,7 @@ Links: ### .spec.syncmasters.securityContext.supplementalGroups -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) SupplementalGroups is 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. @@ -6602,7 +6638,7 @@ the fsGroup (if specified), and group memberships defined in the container image ### .spec.syncmasters.securityContext.sysctls -Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) +Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch. @@ -6623,7 +6659,7 @@ sysctls: ### .spec.syncmasters.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L120) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L120) ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created for each server of this group. If empty, it defaults to using the @@ -6638,7 +6674,7 @@ to that service account. ### .spec.syncmasters.shutdownDelay -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L187) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L187) ShutdownDelay define how long operator should delay finalizer removal after shutdown @@ -6646,7 +6682,7 @@ ShutdownDelay define how long operator should delay finalizer removal after shut ### .spec.syncmasters.shutdownMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L185) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L185) ShutdownMethod describe procedure of member shutdown taken by Operator @@ -6654,7 +6690,7 @@ ShutdownMethod describe procedure of member shutdown taken by Operator ### .spec.syncmasters.sidecarCoreNames -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L163) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L163) SidecarCoreNames is a list of sidecar containers which must run in the pod. Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. @@ -6663,7 +6699,7 @@ Some names (e.g.: "server", "worker") are reserved, and they don't have any impa ### .spec.syncmasters.sidecars -Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L167) +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L167) Sidecars specifies a list of additional containers to be started @@ -6674,7 +6710,7 @@ Links: ### .spec.syncmasters.storageClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L65) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L65) > [!WARNING] > ***DEPRECATED*** @@ -6687,7 +6723,7 @@ StorageClassName specifies the classname for storage of the servers. ### .spec.syncmasters.terminationGracePeriodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L200) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L200) TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation @@ -6695,7 +6731,7 @@ TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for ### .spec.syncmasters.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L96) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L96) Tolerations specifies the tolerations added to Pods in this group. By default, suitable tolerations are set for the following keys with the `NoExecute` effect: @@ -6711,7 +6747,7 @@ Links: ### .spec.syncmasters.volumeAllowShrink -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L148) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L148) > [!WARNING] > ***DEPRECATED*** @@ -6724,7 +6760,7 @@ VolumeAllowShrink allows shrinking of the volume ### .spec.syncmasters.volumeClaimTemplate -Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L139) +Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L139) VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. @@ -6740,7 +6776,7 @@ Links: ### .spec.syncmasters.volumeMounts -Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L177) +Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L177) VolumeMounts define list of volume mounts mounted into server container @@ -6751,7 +6787,7 @@ Links: ### .spec.syncmasters.volumes\[int\].configMap -Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L138) +Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L138) ConfigMap which should be mounted into pod @@ -6762,7 +6798,7 @@ Links: ### .spec.syncmasters.volumes\[int\].emptyDir -Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L143) +Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L143) EmptyDir @@ -6773,7 +6809,7 @@ Links: ### .spec.syncmasters.volumes\[int\].hostPath -Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L148) +Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L148) HostPath @@ -6784,7 +6820,7 @@ Links: ### .spec.syncmasters.volumes\[int\].name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L128) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L128) Name of volume @@ -6792,7 +6828,7 @@ Name of volume ### .spec.syncmasters.volumes\[int\].persistentVolumeClaim -Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L153) +Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L153) PersistentVolumeClaim @@ -6803,7 +6839,7 @@ Links: ### .spec.syncmasters.volumes\[int\].secret -Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L133) +Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L133) Secret which should be mounted into pod @@ -6814,7 +6850,7 @@ Links: ### .spec.syncworkers.affinity -Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L156) +Type: `core.PodAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L156) Affinity specified additional affinity settings in ArangoDB Pod definitions @@ -6825,7 +6861,7 @@ Links: ### .spec.syncworkers.allowMemberRecreation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L198) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L198) AllowMemberRecreation allows to recreate member. This setting changes the member recreation logic based on group: @@ -6836,7 +6872,7 @@ This setting changes the member recreation logic based on group: ### .spec.syncworkers.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L99) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L99) Annotations specified the annotations added to Pods in this group. Annotations are merged with `spec.annotations`. @@ -6845,7 +6881,7 @@ Annotations are merged with `spec.annotations`. ### .spec.syncworkers.annotationsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L101) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L101) AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored @@ -6853,7 +6889,7 @@ AnnotationsIgnoreList list regexp or plain definitions which annotations should ### .spec.syncworkers.annotationsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L103) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L103) AnnotationsMode Define annotations mode which should be use while overriding annotations @@ -6861,7 +6897,7 @@ AnnotationsMode Define annotations mode which should be use while overriding ann ### .spec.syncworkers.antiAffinity -Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L152) +Type: `core.PodAntiAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L152) AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions @@ -6872,7 +6908,7 @@ Links: ### .spec.syncworkers.args -Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L57) +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L57) Args setting specifies additional command-line arguments passed to all servers of this group. @@ -6882,7 +6918,7 @@ Default Value: `[]` ### .spec.syncworkers.count -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L49) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L49) Count setting specifies the number of servers to start for the given group. For the Agent group, this value must be a positive, odd number. @@ -6895,7 +6931,7 @@ as for the `dbservers` group. ### .spec.syncworkers.entrypoint -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L59) Entrypoint overrides container executable @@ -6903,19 +6939,19 @@ Entrypoint overrides container executable ### .spec.syncworkers.envs\[int\].name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_env_var.go#L26) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_env_var.go#L26) *** ### .spec.syncworkers.envs\[int\].value -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_env_var.go#L27) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_env_var.go#L27) *** ### .spec.syncworkers.ephemeralVolumes.apps.size -Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) Size define size of the ephemeral volume @@ -6926,7 +6962,7 @@ Links: ### .spec.syncworkers.ephemeralVolumes.temp.size -Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) +Type: `resource.Quantity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_ephemeral_volumes.go#L64) Size define size of the ephemeral volume @@ -6937,7 +6973,7 @@ Links: ### .spec.syncworkers.exporterPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L211) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L211) ExporterPort define Port used by exporter @@ -6945,7 +6981,7 @@ ExporterPort define Port used by exporter ### .spec.syncworkers.extendedRotationCheck -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L181) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L181) ExtendedRotationCheck extend checks for rotation @@ -6953,7 +6989,7 @@ ExtendedRotationCheck extend checks for rotation ### .spec.syncworkers.externalPortEnabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L193) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L193) ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members @@ -6961,7 +6997,7 @@ ExternalPortEnabled if external port should be enabled. If is set to false, port ### .spec.syncworkers.indexMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L204) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L204) IndexMethod define group Indexing method @@ -6973,7 +7009,7 @@ Possible Values: ### .spec.syncworkers.initContainers.containers -Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_init_containers.go#L91) +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_init_containers.go#L93) Containers contains list of containers @@ -6984,15 +7020,19 @@ Links: ### .spec.syncworkers.initContainers.mode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_init_containers.go#L94) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_init_containers.go#L98) Mode keep container replace mode +Possible Values: +* `"update"` (default) - Enforce update of pod if init container has been changed +* `"ignore"` - Ignores init container changes in pod recreation flow + *** ### .spec.syncworkers.internalPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L189) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L189) InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members @@ -7000,7 +7040,7 @@ InternalPort define port used in internal communication, can be accessed over lo ### .spec.syncworkers.internalPortProtocol -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L191) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L191) InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members @@ -7008,7 +7048,7 @@ InternalPortProtocol define protocol of port used in internal communication, can ### .spec.syncworkers.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L105) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L105) Labels specified the labels added to Pods in this group. @@ -7016,7 +7056,7 @@ Labels specified the labels added to Pods in this group. ### .spec.syncworkers.labelsIgnoreList -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L107) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L107) LabelsIgnoreList list regexp or plain definitions which labels should be ignored @@ -7024,7 +7064,7 @@ LabelsIgnoreList list regexp or plain definitions which labels should be ignored ### .spec.syncworkers.labelsMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L109) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L109) LabelsMode Define labels mode which should be use while overriding labels @@ -7032,7 +7072,7 @@ LabelsMode Define labels mode which should be use while overriding labels ### .spec.syncworkers.maxCount -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L53) MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. @@ -7040,7 +7080,7 @@ MaxCount specifies a maximum for the count of servers. If set, a specification i ### .spec.syncworkers.memoryReservation -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L81) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L81) MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. @@ -7055,7 +7095,7 @@ Default Value: `0` ### .spec.syncworkers.minCount -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L51) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L51) MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. @@ -7063,7 +7103,7 @@ MinCount specifies a minimum for the count of servers. If set, a specification i ### .spec.syncworkers.nodeAffinity -Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L160) +Type: `core.NodeAffinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L160) NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions @@ -7074,7 +7114,7 @@ Links: ### .spec.syncworkers.nodeSelector -Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L124) +Type: `map[string]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L124) NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. @@ -7085,7 +7125,7 @@ Links: ### .spec.syncworkers.numactl.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L38) Args define list of the numactl process @@ -7095,7 +7135,7 @@ Default Value: `[]` ### .spec.syncworkers.numactl.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L30) Enabled define if numactl should be enabled @@ -7105,7 +7145,7 @@ Default Value: `false` ### .spec.syncworkers.numactl.path -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_numactl_spec.go#L34) Path define numactl path within the container @@ -7115,7 +7155,7 @@ Default Value: `/usr/bin/numactl` ### .spec.syncworkers.overrideDetectedNumberOfCores -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L87) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L87) > [!IMPORTANT] > **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` Container Environment Variable** @@ -7132,7 +7172,7 @@ Default Value: `true` ### .spec.syncworkers.overrideDetectedTotalMemory -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L75) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L75) > [!IMPORTANT] > **Values set by this feature override user-provided `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` Container Environment Variable** @@ -7149,19 +7189,19 @@ Default Value: `true` ### .spec.syncworkers.podModes.network -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L31) *** ### .spec.syncworkers.podModes.pid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_pod_modes.go#L32) *** ### .spec.syncworkers.port -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L209) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L209) Port define Port used by member @@ -7169,7 +7209,7 @@ Port define Port used by member ### .spec.syncworkers.priorityClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L130) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L130) PriorityClassName specifies a priority class name Will be forwarded to the pod spec. @@ -7181,7 +7221,7 @@ Links: ### .spec.syncworkers.probes.livenessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L27) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L27) LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group @@ -7191,7 +7231,7 @@ Default Value: `false` ### .spec.syncworkers.probes.livenessProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -7203,7 +7243,7 @@ Default Value: `3` ### .spec.syncworkers.probes.livenessProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -7214,7 +7254,7 @@ Default Value: `2` ### .spec.syncworkers.probes.livenessProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -7225,7 +7265,7 @@ Default Value: `10` ### .spec.syncworkers.probes.livenessProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -7236,7 +7276,7 @@ Default Value: `1` ### .spec.syncworkers.probes.livenessProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -7247,7 +7287,7 @@ Default Value: `2` ### .spec.syncworkers.probes.ReadinessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L34) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L34) > [!WARNING] > ***DEPRECATED*** @@ -7260,7 +7300,7 @@ OldReadinessProbeDisabled if true readinessProbes are disabled ### .spec.syncworkers.probes.readinessProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L36) ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility @@ -7268,7 +7308,7 @@ ReadinessProbeDisabled override flag for probe disabled in good manner (lowercas ### .spec.syncworkers.probes.readinessProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -7280,7 +7320,7 @@ Default Value: `3` ### .spec.syncworkers.probes.readinessProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -7291,7 +7331,7 @@ Default Value: `2` ### .spec.syncworkers.probes.readinessProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -7302,7 +7342,7 @@ Default Value: `10` ### .spec.syncworkers.probes.readinessProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -7313,7 +7353,7 @@ Default Value: `1` ### .spec.syncworkers.probes.readinessProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -7324,7 +7364,7 @@ Default Value: `2` ### .spec.syncworkers.probes.startupProbeDisabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L41) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L41) StartupProbeDisabled if true startupProbes are disabled @@ -7332,7 +7372,7 @@ StartupProbeDisabled if true startupProbes are disabled ### .spec.syncworkers.probes.startupProbeSpec.failureThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L77) FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. Giving up means restarting the container. @@ -7344,7 +7384,7 @@ Default Value: `3` ### .spec.syncworkers.probes.startupProbeSpec.initialDelaySeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L60) InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. Minimum value is 0. @@ -7355,7 +7395,7 @@ Default Value: `2` ### .spec.syncworkers.probes.startupProbeSpec.periodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L64) PeriodSeconds How often (in seconds) to perform the probe. Minimum value is 1. @@ -7366,7 +7406,7 @@ Default Value: `10` ### .spec.syncworkers.probes.startupProbeSpec.successThreshold -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L72) SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. Minimum value is 1. @@ -7377,7 +7417,7 @@ Default Value: `1` ### .spec.syncworkers.probes.startupProbeSpec.timeoutSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec_probe.go#L68) TimeoutSeconds specifies number of seconds after which the probe times out Minimum value is 1. @@ -7388,7 +7428,7 @@ Default Value: `2` ### .spec.syncworkers.pvcResizeMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L144) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L144) VolumeResizeMode specified resize mode for PVCs and PVs @@ -7400,7 +7440,7 @@ Possible Values: ### .spec.syncworkers.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L69) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L69) Resources holds resource requests & limits @@ -7411,7 +7451,7 @@ Links: ### .spec.syncworkers.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L61) SchedulerName define scheduler name used for group @@ -7419,7 +7459,7 @@ SchedulerName define scheduler name used for group ### .spec.syncworkers.securityContext.addCapabilities -Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) +Type: `[]core.Capability` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L41) AddCapabilities add new capabilities to containers @@ -7427,7 +7467,7 @@ AddCapabilities add new capabilities to containers ### .spec.syncworkers.securityContext.allowPrivilegeEscalation -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L44) AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. @@ -7435,7 +7475,7 @@ AllowPrivilegeEscalation Controls whether a process can gain more privileges tha ### .spec.syncworkers.securityContext.dropAllCapabilities -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L38) > [!WARNING] > ***DEPRECATED*** @@ -7448,7 +7488,7 @@ DropAllCapabilities specifies if capabilities should be dropped for this pod con ### .spec.syncworkers.securityContext.fsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L61) FSGroup is a special supplemental group that applies to all containers in a pod. @@ -7456,7 +7496,7 @@ FSGroup is a special supplemental group that applies to all containers in a pod. ### .spec.syncworkers.securityContext.privileged -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L47) Privileged If true, runs container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. @@ -7465,7 +7505,7 @@ essentially equivalent to root on the host. ### .spec.syncworkers.securityContext.readOnlyRootFilesystem -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L49) ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. @@ -7473,7 +7513,7 @@ ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-o ### .spec.syncworkers.securityContext.runAsGroup -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L55) RunAsGroup is the GID to run the entrypoint of the container process. @@ -7481,7 +7521,7 @@ RunAsGroup is the GID to run the entrypoint of the container process. ### .spec.syncworkers.securityContext.runAsNonRoot -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L51) RunAsNonRoot if true, indicates that the container must run as a non-root user. @@ -7489,7 +7529,7 @@ RunAsNonRoot if true, indicates that the container must run as a non-root user. ### .spec.syncworkers.securityContext.runAsUser -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L53) RunAsUser is the UID to run the entrypoint of the container process. @@ -7497,7 +7537,7 @@ RunAsUser is the UID to run the entrypoint of the container process. ### .spec.syncworkers.securityContext.seccompProfile -Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) +Type: `core.SeccompProfile` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L77) SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. @@ -7508,7 +7548,7 @@ Links: ### .spec.syncworkers.securityContext.seLinuxOptions -Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) +Type: `core.SELinuxOptions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L82) SELinuxOptions are the labels to be applied to the container @@ -7519,7 +7559,7 @@ Links: ### .spec.syncworkers.securityContext.supplementalGroups -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L59) SupplementalGroups is 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. @@ -7528,7 +7568,7 @@ the fsGroup (if specified), and group memberships defined in the container image ### .spec.syncworkers.securityContext.sysctls -Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) +Type: `map[string]intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_security_context_spec.go#L72) Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch. @@ -7549,7 +7589,7 @@ sysctls: ### .spec.syncworkers.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L120) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L120) ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created for each server of this group. If empty, it defaults to using the @@ -7564,7 +7604,7 @@ to that service account. ### .spec.syncworkers.shutdownDelay -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L187) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L187) ShutdownDelay define how long operator should delay finalizer removal after shutdown @@ -7572,7 +7612,7 @@ ShutdownDelay define how long operator should delay finalizer removal after shut ### .spec.syncworkers.shutdownMethod -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L185) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L185) ShutdownMethod describe procedure of member shutdown taken by Operator @@ -7580,7 +7620,7 @@ ShutdownMethod describe procedure of member shutdown taken by Operator ### .spec.syncworkers.sidecarCoreNames -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L163) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L163) SidecarCoreNames is a list of sidecar containers which must run in the pod. Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. @@ -7589,7 +7629,7 @@ Some names (e.g.: "server", "worker") are reserved, and they don't have any impa ### .spec.syncworkers.sidecars -Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L167) +Type: `[]core.Container` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L167) Sidecars specifies a list of additional containers to be started @@ -7600,7 +7640,7 @@ Links: ### .spec.syncworkers.storageClassName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L65) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L65) > [!WARNING] > ***DEPRECATED*** @@ -7613,7 +7653,7 @@ StorageClassName specifies the classname for storage of the servers. ### .spec.syncworkers.terminationGracePeriodSeconds -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L200) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L200) TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation @@ -7621,7 +7661,7 @@ TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for ### .spec.syncworkers.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L96) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L96) Tolerations specifies the tolerations added to Pods in this group. By default, suitable tolerations are set for the following keys with the `NoExecute` effect: @@ -7637,7 +7677,7 @@ Links: ### .spec.syncworkers.volumeAllowShrink -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L148) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L148) > [!WARNING] > ***DEPRECATED*** @@ -7650,7 +7690,7 @@ VolumeAllowShrink allows shrinking of the volume ### .spec.syncworkers.volumeClaimTemplate -Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L139) +Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L139) VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. @@ -7666,7 +7706,7 @@ Links: ### .spec.syncworkers.volumeMounts -Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_spec.go#L177) +Type: `[]ServerGroupSpecVolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_spec.go#L177) VolumeMounts define list of volume mounts mounted into server container @@ -7677,7 +7717,7 @@ Links: ### .spec.syncworkers.volumes\[int\].configMap -Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L138) +Type: `core.ConfigMapVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L138) ConfigMap which should be mounted into pod @@ -7688,7 +7728,7 @@ Links: ### .spec.syncworkers.volumes\[int\].emptyDir -Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L143) +Type: `core.EmptyDirVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L143) EmptyDir @@ -7699,7 +7739,7 @@ Links: ### .spec.syncworkers.volumes\[int\].hostPath -Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L148) +Type: `core.HostPathVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L148) HostPath @@ -7710,7 +7750,7 @@ Links: ### .spec.syncworkers.volumes\[int\].name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L128) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L128) Name of volume @@ -7718,7 +7758,7 @@ Name of volume ### .spec.syncworkers.volumes\[int\].persistentVolumeClaim -Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L153) +Type: `core.PersistentVolumeClaimVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L153) PersistentVolumeClaim @@ -7729,7 +7769,7 @@ Links: ### .spec.syncworkers.volumes\[int\].secret -Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/server_group_volume.go#L133) +Type: `core.SecretVolumeSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/server_group_volume.go#L133) Secret which should be mounted into pod @@ -7740,7 +7780,7 @@ Links: ### .spec.timeouts.actions -Type: `map[string]meta.Duration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/timeouts.go#L44) +Type: `map[string]meta.Duration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/timeouts.go#L44) Actions keep map of the actions timeouts. @@ -7758,7 +7798,7 @@ actions: ### .spec.timeouts.maintenanceGracePeriod -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/timeouts.go#L36) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/timeouts.go#L36) MaintenanceGracePeriod action timeout @@ -7766,7 +7806,7 @@ MaintenanceGracePeriod action timeout ### .spec.timezone -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_spec.go#L261) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_spec.go#L261) Timezone if specified, will set a timezone for deployment. Must be in format accepted by "tzdata", e.g. `America/New_York` or `Europe/London` @@ -7775,7 +7815,7 @@ Must be in format accepted by "tzdata", e.g. `America/New_York` or `Europe/Londo ### .spec.tls.altNames -Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/tls_spec.go#L72) +Type: `[]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/tls_spec.go#L72) AltNames setting specifies a list of alternate names that will be added to all generated certificates. These names can be DNS names or email addresses. @@ -7785,7 +7825,7 @@ The default value is empty. ### .spec.tls.caSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/tls_spec.go#L67) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/tls_spec.go#L67) CASecretName setting specifies the name of a kubernetes `Secret` that contains a standard CA certificate + private key used to sign certificates for individual @@ -7802,19 +7842,31 @@ The specified `Secret`, must contain the following data fields: ### .spec.tls.mode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/tls_spec.go#L81) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/tls_spec.go#L81) *** -### .spec.tls.sni.mapping.\ +### .spec.tls.sni.mapping -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/tls_sni_spec.go#L30) +Type: `map[string][]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/tls_sni_spec.go#L36) + +The mapping of the Server Name Indication options. + +Links: +* [Server Name Indication](https://docs.arangodb.com/stable/components/arangodb-server/options/#--sslserver-name-indication) + +Example: +```yaml +mapping: + secret: + - domain.example.com +``` *** ### .spec.tls.ttl -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/tls_spec.go#L79) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/tls_spec.go#L79) TTL setting specifies the time to live of all generated server certificates. When the server certificate is about to expire, it will be automatically replaced @@ -7828,25 +7880,25 @@ Default Value: `"2160h" (about 3 months)` ### .spec.topology.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/topology_spec.go#L26) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/topology_spec.go#L26) *** ### .spec.topology.label -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/topology_spec.go#L28) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/topology_spec.go#L28) *** ### .spec.topology.zones -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/topology_spec.go#L27) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/topology_spec.go#L27) *** ### .spec.upgrade.autoUpgrade -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_upgrade_spec.go#L26) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_upgrade_spec.go#L26) AutoUpgrade flag specifies if upgrade should be auto-injected, even if is not required (in case of stuck) @@ -7856,7 +7908,7 @@ Default Value: `false` ### .spec.upgrade.debugLog -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/deployment_upgrade_spec.go#L30) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/deployment_upgrade_spec.go#L30) DebugLog flag specifies if containers running upgrade process should print more debugging information. This applies only to init containers. diff --git a/docs/api/ArangoDeploymentReplication.V1.md b/docs/api/ArangoDeploymentReplication.V1.md index d1b58868a..78680682c 100644 --- a/docs/api/ArangoDeploymentReplication.V1.md +++ b/docs/api/ArangoDeploymentReplication.V1.md @@ -10,7 +10,7 @@ title: ArangoDeploymentReplication V1 ### .spec.cancellation.ensureInSync -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/replication/v1/replication_spec.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/replication/v1/replication_spec.go#L38) EnsureInSync if it is true then during cancellation process data consistency is required. Default value is true. @@ -19,7 +19,7 @@ Default value is true. ### .spec.cancellation.sourceReadOnly -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/replication/v1/replication_spec.go#L41) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/replication/v1/replication_spec.go#L41) SourceReadOnly if it true then after cancellation source data center should be in read-only mode. Default value is false. @@ -28,7 +28,7 @@ Default value is false. ### .spec.destination.auth.keyfileSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/replication/v1/endpoint_authentication_spec.go#L37) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/replication/v1/endpoint_authentication_spec.go#L37) KeyfileSecretName holds the name of a Secret containing a client authentication certificate formatted at keyfile in a `tls.keyfile` field. @@ -40,7 +40,7 @@ the synchronization and fetch the synchronization status. ### .spec.destination.auth.userSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/replication/v1/endpoint_authentication_spec.go#L42) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/replication/v1/endpoint_authentication_spec.go#L42) UserSecretName holds the name of a Secret containing a `username` & `password` field used for basic authentication. @@ -51,7 +51,7 @@ of the ArangoDB cluster at the endpoint. ### .spec.destination.deploymentName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/replication/v1/endpoint_spec.go#L36) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/replication/v1/endpoint_spec.go#L36) DeploymentName holds the name of an ArangoDeployment resource. If set, this provides default values for masterEndpoint, auth & tls. @@ -60,7 +60,7 @@ If set, this provides default values for masterEndpoint, auth & tls. ### .spec.destination.masterEndpoint -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/replication/v1/endpoint_spec.go#L42) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/replication/v1/endpoint_spec.go#L42) MasterEndpoint holds a list of URLs used to reach the syncmaster(s) Use this setting if the source cluster is not running inside a Kubernetes cluster @@ -73,7 +73,7 @@ Default Value: `[]` ### .spec.destination.tls.caSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/replication/v1/endpoint_tls_spec.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/replication/v1/endpoint_tls_spec.go#L34) CASecretName holds the name of a Secret containing a ca.crt public key for TLS validation. This setting is required, unless `deploymentName` has been set. @@ -82,7 +82,7 @@ This setting is required, unless `deploymentName` has been set. ### .spec.source.auth.keyfileSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/replication/v1/endpoint_authentication_spec.go#L37) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/replication/v1/endpoint_authentication_spec.go#L37) KeyfileSecretName holds the name of a Secret containing a client authentication certificate formatted at keyfile in a `tls.keyfile` field. @@ -94,7 +94,7 @@ the synchronization and fetch the synchronization status. ### .spec.source.auth.userSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/replication/v1/endpoint_authentication_spec.go#L42) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/replication/v1/endpoint_authentication_spec.go#L42) UserSecretName holds the name of a Secret containing a `username` & `password` field used for basic authentication. @@ -105,7 +105,7 @@ of the ArangoDB cluster at the endpoint. ### .spec.source.deploymentName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/replication/v1/endpoint_spec.go#L36) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/replication/v1/endpoint_spec.go#L36) DeploymentName holds the name of an ArangoDeployment resource. If set, this provides default values for masterEndpoint, auth & tls. @@ -114,7 +114,7 @@ If set, this provides default values for masterEndpoint, auth & tls. ### .spec.source.masterEndpoint -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/replication/v1/endpoint_spec.go#L42) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/replication/v1/endpoint_spec.go#L42) MasterEndpoint holds a list of URLs used to reach the syncmaster(s) Use this setting if the source cluster is not running inside a Kubernetes cluster @@ -127,7 +127,7 @@ Default Value: `[]` ### .spec.source.tls.caSecretName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/replication/v1/endpoint_tls_spec.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/replication/v1/endpoint_tls_spec.go#L34) CASecretName holds the name of a Secret containing a ca.crt public key for TLS validation. This setting is required, unless `deploymentName` has been set. diff --git a/docs/api/ArangoJob.V1.md b/docs/api/ArangoJob.V1.md index 12c3b51ab..0d27eeb95 100644 --- a/docs/api/ArangoJob.V1.md +++ b/docs/api/ArangoJob.V1.md @@ -10,7 +10,7 @@ title: ArangoJob V1 ### .spec.arangoDeploymentName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/apps/v1/job_spec.go#L27) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/apps/v1/job_spec.go#L27) ArangoDeploymentName holds the name of ArangoDeployment @@ -18,7 +18,7 @@ ArangoDeploymentName holds the name of ArangoDeployment ### .spec.jobTemplate -Type: `batch.JobSpec` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/apps/v1/job_spec.go#L33) +Type: `batch.JobSpec` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/apps/v1/job_spec.go#L33) JobTemplate holds the Kubernetes Job Template diff --git a/docs/api/ArangoLocalStorage.V1Alpha.md b/docs/api/ArangoLocalStorage.V1Alpha.md index c5562f0a4..4f233adcb 100644 --- a/docs/api/ArangoLocalStorage.V1Alpha.md +++ b/docs/api/ArangoLocalStorage.V1Alpha.md @@ -10,7 +10,7 @@ title: ArangoLocalStorage V1Alpha ### .spec.localPath -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/storage/v1alpha/local_storage_spec.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/storage/v1alpha/local_storage_spec.go#L36) LocalPath setting specifies one or more local directories (on the nodes) used to create persistent volumes in. @@ -18,7 +18,7 @@ LocalPath setting specifies one or more local directories (on the nodes) used to ### .spec.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/storage/v1alpha/local_storage_spec.go#L43) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/storage/v1alpha/local_storage_spec.go#L43) NodeSelector setting specifies which nodes the operator will provision persistent volumes on. @@ -26,7 +26,7 @@ NodeSelector setting specifies which nodes the operator will provision persisten ### .spec.podCustomization.priority -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/storage/v1alpha/local_storage_pod_customization.go#L25) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/storage/v1alpha/local_storage_pod_customization.go#L25) Priority if defined, sets the priority for pods of storage provisioner @@ -34,7 +34,7 @@ Priority if defined, sets the priority for pods of storage provisioner ### .spec.privileged -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/storage/v1alpha/local_storage_spec.go#L45) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/storage/v1alpha/local_storage_spec.go#L45) Privileged if set, passes Privileged flag to SecurityContext for pods of storage provisioner @@ -42,7 +42,7 @@ Privileged if set, passes Privileged flag to SecurityContext for pods of storage ### .spec.storageClass.isDefault -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/storage/v1alpha/storage_class_spec.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/storage/v1alpha/storage_class_spec.go#L42) IsDefault setting specifies if the created `StorageClass` will be marked as default storage class. @@ -53,7 +53,7 @@ Default Value: `false` ### .spec.storageClass.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/storage/v1alpha/storage_class_spec.go#L38) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/storage/v1alpha/storage_class_spec.go#L38) Name setting specifies the name of the storage class that created `PersistentVolume` will use. @@ -66,7 +66,7 @@ Default Value: `""` ### .spec.storageClass.reclaimPolicy -Type: `core.PersistentVolumeReclaimPolicy` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/storage/v1alpha/storage_class_spec.go#L46) +Type: `core.PersistentVolumeReclaimPolicy` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/storage/v1alpha/storage_class_spec.go#L46) ReclaimPolicy defines what happens to a persistent volume when released from its claim. @@ -77,7 +77,7 @@ Links: ### .spec.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/storage/v1alpha/local_storage_spec.go#L41) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/storage/v1alpha/local_storage_spec.go#L41) Tolerations specifies the tolerations added to pods of storage provisioner diff --git a/docs/api/ArangoMLBatchJob.V1Alpha1.md b/docs/api/ArangoMLBatchJob.V1Alpha1.md index df52ebc09..0b5de71c6 100644 --- a/docs/api/ArangoMLBatchJob.V1Alpha1.md +++ b/docs/api/ArangoMLBatchJob.V1Alpha1.md @@ -10,7 +10,7 @@ title: ArangoMLBatchJob V1Alpha1 ### .spec -Type: `batch.Job` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/batchjob_spec.go#L33) +Type: `batch.Job` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/batchjob_spec.go#L33) Links: * [Kubernetes Documentation](https://godoc.org/k8s.io/api/batch/v1#JobSpec) @@ -19,7 +19,7 @@ Links: ### .status -Type: `batch.JobStatus` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/batchjob_status.go#L37) +Type: `batch.JobStatus` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/batchjob_status.go#L37) Links: * [Kubernetes Documentation](https://godoc.org/k8s.io/api/batch/v1#JobStatus) @@ -28,7 +28,7 @@ Links: ### .status.mlConditions -Type: `api.MLConditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/batchjob_status.go#L33) +Type: `api.MLConditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/batchjob_status.go#L33) MLConditions specific to the entire batch job @@ -36,7 +36,7 @@ MLConditions specific to the entire batch job ### .status.ref.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -44,7 +44,7 @@ UID keeps the information about object Checksum ### .status.ref.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -52,7 +52,7 @@ Name of the object ### .status.ref.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -60,7 +60,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.ref.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID diff --git a/docs/api/ArangoMLCronJob.V1Alpha1.md b/docs/api/ArangoMLCronJob.V1Alpha1.md index 8453adc79..a6b144667 100644 --- a/docs/api/ArangoMLCronJob.V1Alpha1.md +++ b/docs/api/ArangoMLCronJob.V1Alpha1.md @@ -10,7 +10,7 @@ title: ArangoMLCronJob V1Alpha1 ### .spec -Type: `batch.CronJobSpec` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/cronjob_spec.go#L33) +Type: `batch.CronJobSpec` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/cronjob_spec.go#L33) Links: * [Kubernetes Documentation](https://godoc.org/k8s.io/api/batch/v1#CronJobSpec) @@ -19,7 +19,7 @@ Links: ### .status -Type: `batch.CronJobStatus` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/cronjob_status.go#L37) +Type: `batch.CronJobStatus` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/cronjob_status.go#L37) Links: * [Kubernetes Documentation](https://godoc.org/k8s.io/api/batch/v1#CronJobStatus) @@ -28,7 +28,7 @@ Links: ### .status.mlConditions -Type: `api.MLConditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/cronjob_status.go#L33) +Type: `api.MLConditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/cronjob_status.go#L33) MLConditions specific to the entire cron job @@ -36,7 +36,7 @@ MLConditions specific to the entire cron job ### .status.ref.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -44,7 +44,7 @@ UID keeps the information about object Checksum ### .status.ref.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -52,7 +52,7 @@ Name of the object ### .status.ref.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -60,7 +60,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.ref.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID diff --git a/docs/api/ArangoMLExtension.V1Alpha1.md b/docs/api/ArangoMLExtension.V1Alpha1.md index ebe6af4a2..7b7c81ddc 100644 --- a/docs/api/ArangoMLExtension.V1Alpha1.md +++ b/docs/api/ArangoMLExtension.V1Alpha1.md @@ -10,7 +10,7 @@ title: ArangoMLExtension V1Alpha1 ### .spec.deployment.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -21,7 +21,7 @@ Links: ### .spec.deployment.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -34,7 +34,7 @@ Links: ### .spec.deployment.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -51,7 +51,7 @@ Links: ### .spec.deployment.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -59,7 +59,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.deployment.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -76,7 +76,7 @@ Links: ### .spec.deployment.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -87,7 +87,7 @@ Links: ### .spec.deployment.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -98,7 +98,7 @@ Links: ### .spec.deployment.gpu -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/extension_spec_deployment.go#L56) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/extension_spec_deployment.go#L56) GPU defined if GPU Jobs are enabled. @@ -108,7 +108,7 @@ Default Value: `false` ### .spec.deployment.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -118,7 +118,7 @@ Default Value: `false` ### .spec.deployment.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -129,7 +129,7 @@ Default Value: `false` ### .spec.deployment.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -139,7 +139,7 @@ Default Value: `false` ### .spec.deployment.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) Image define image details @@ -147,7 +147,7 @@ Image define image details ### .spec.deployment.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -157,7 +157,7 @@ Default Value: `IfNotPresent` ### .spec.deployment.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -165,7 +165,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.deployment.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -178,7 +178,7 @@ Links: ### .spec.deployment.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -186,7 +186,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.deployment.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -198,7 +198,7 @@ Links: ### .spec.deployment.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -209,7 +209,7 @@ Links: ### .spec.deployment.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -220,7 +220,7 @@ There cannot be more than one managing controller. ### .spec.deployment.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -231,7 +231,7 @@ Links: ### .spec.deployment.port -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/extension_spec_deployment.go#L59) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/extension_spec_deployment.go#L59) Port defines on which port the container will be listening for connections @@ -239,7 +239,7 @@ Port defines on which port the container will be listening for connections ### .spec.deployment.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -250,7 +250,7 @@ accessible from the network. ### .spec.deployment.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -262,7 +262,7 @@ Links: ### .spec.deployment.replicas -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/extension_spec_deployment.go#L40) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/extension_spec_deployment.go#L40) Replicas defines the number of replicas running specified components. No replicas created if no components are defined. @@ -272,7 +272,7 @@ Default Value: `1` ### .spec.deployment.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -283,7 +283,7 @@ Links: ### .spec.deployment.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -294,7 +294,7 @@ Default Value: `""` ### .spec.deployment.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -305,7 +305,7 @@ Links: ### .spec.deployment.service.type -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/extension_spec_deployment_service.go#L38) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/extension_spec_deployment_service.go#L38) Type determines how the Service is exposed @@ -323,7 +323,7 @@ Possible Values: ### .spec.deployment.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -334,7 +334,7 @@ Links: ### .spec.deployment.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -347,7 +347,7 @@ Default Value: `false` ### .spec.deployment.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -362,7 +362,7 @@ Links: ### .spec.deployment.tls.altNames -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/tls.go#L28) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/tls.go#L28) AltNames define TLS AltNames used when TLS on the ArangoDB is enabled @@ -370,7 +370,7 @@ AltNames define TLS AltNames used when TLS on the ArangoDB is enabled ### .spec.deployment.tls.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/tls.go#L25) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/tls.go#L25) Enabled define if TLS Should be enabled. If is not set then default is taken from ArangoDeployment settings @@ -378,7 +378,7 @@ Enabled define if TLS Should be enabled. If is not set then default is taken fro ### .spec.deployment.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -389,7 +389,7 @@ Links: ### .spec.deployment.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -397,7 +397,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.deployment.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -408,7 +408,7 @@ Links: ### .spec.deployment.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) Container's working directory. If not specified, the container runtime's default will be used, which @@ -418,7 +418,7 @@ might be configured in the container image. ### .spec.init.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -429,7 +429,7 @@ Links: ### .spec.init.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -442,7 +442,7 @@ Links: ### .spec.init.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -459,7 +459,7 @@ Links: ### .spec.init.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -467,7 +467,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.init.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -484,7 +484,7 @@ Links: ### .spec.init.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -495,7 +495,7 @@ Links: ### .spec.init.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -506,7 +506,7 @@ Links: ### .spec.init.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -516,7 +516,7 @@ Default Value: `false` ### .spec.init.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -527,7 +527,7 @@ Default Value: `false` ### .spec.init.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -537,7 +537,7 @@ Default Value: `false` ### .spec.init.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) Image define image details @@ -545,7 +545,7 @@ Image define image details ### .spec.init.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -555,7 +555,7 @@ Default Value: `IfNotPresent` ### .spec.init.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -563,7 +563,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.init.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -576,7 +576,7 @@ Links: ### .spec.init.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -584,7 +584,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.init.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -596,7 +596,7 @@ Links: ### .spec.init.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -607,7 +607,7 @@ Links: ### .spec.init.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -618,7 +618,7 @@ There cannot be more than one managing controller. ### .spec.init.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -629,7 +629,7 @@ Links: ### .spec.init.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -640,7 +640,7 @@ accessible from the network. ### .spec.init.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -652,7 +652,7 @@ Links: ### .spec.init.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -663,7 +663,7 @@ Links: ### .spec.init.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -674,7 +674,7 @@ Default Value: `""` ### .spec.init.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -685,7 +685,7 @@ Links: ### .spec.init.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -696,7 +696,7 @@ Links: ### .spec.init.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -709,7 +709,7 @@ Default Value: `false` ### .spec.init.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -724,7 +724,7 @@ Links: ### .spec.init.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -735,7 +735,7 @@ Links: ### .spec.init.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -743,7 +743,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.init.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -754,7 +754,7 @@ Links: ### .spec.init.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) Container's working directory. If not specified, the container runtime's default will be used, which @@ -764,7 +764,7 @@ might be configured in the container image. ### .spec.jobsTemplates.featurization.cpu.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -775,7 +775,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -788,7 +788,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -805,7 +805,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -813,7 +813,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.jobsTemplates.featurization.cpu.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -830,7 +830,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -841,7 +841,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -852,7 +852,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -862,7 +862,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.cpu.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -873,7 +873,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.cpu.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -883,7 +883,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.cpu.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) Image define image details @@ -891,7 +891,7 @@ Image define image details ### .spec.jobsTemplates.featurization.cpu.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -901,7 +901,7 @@ Default Value: `IfNotPresent` ### .spec.jobsTemplates.featurization.cpu.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -909,7 +909,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.jobsTemplates.featurization.cpu.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -922,7 +922,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -930,7 +930,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.jobsTemplates.featurization.cpu.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -942,7 +942,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -953,7 +953,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -964,7 +964,7 @@ There cannot be more than one managing controller. ### .spec.jobsTemplates.featurization.cpu.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -975,7 +975,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -986,7 +986,7 @@ accessible from the network. ### .spec.jobsTemplates.featurization.cpu.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -998,7 +998,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -1009,7 +1009,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -1020,7 +1020,7 @@ Default Value: `""` ### .spec.jobsTemplates.featurization.cpu.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -1031,7 +1031,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -1042,7 +1042,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -1055,7 +1055,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.cpu.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -1070,7 +1070,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -1081,7 +1081,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -1089,7 +1089,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.jobsTemplates.featurization.cpu.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -1100,7 +1100,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) Container's working directory. If not specified, the container runtime's default will be used, which @@ -1110,7 +1110,7 @@ might be configured in the container image. ### .spec.jobsTemplates.featurization.gpu.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -1121,7 +1121,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -1134,7 +1134,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -1151,7 +1151,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -1159,7 +1159,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.jobsTemplates.featurization.gpu.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -1176,7 +1176,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -1187,7 +1187,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -1198,7 +1198,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -1208,7 +1208,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.gpu.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -1219,7 +1219,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.gpu.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -1229,7 +1229,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.gpu.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) Image define image details @@ -1237,7 +1237,7 @@ Image define image details ### .spec.jobsTemplates.featurization.gpu.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -1247,7 +1247,7 @@ Default Value: `IfNotPresent` ### .spec.jobsTemplates.featurization.gpu.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -1255,7 +1255,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.jobsTemplates.featurization.gpu.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -1268,7 +1268,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -1276,7 +1276,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.jobsTemplates.featurization.gpu.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -1288,7 +1288,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -1299,7 +1299,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -1310,7 +1310,7 @@ There cannot be more than one managing controller. ### .spec.jobsTemplates.featurization.gpu.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -1321,7 +1321,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -1332,7 +1332,7 @@ accessible from the network. ### .spec.jobsTemplates.featurization.gpu.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -1344,7 +1344,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -1355,7 +1355,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -1366,7 +1366,7 @@ Default Value: `""` ### .spec.jobsTemplates.featurization.gpu.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -1377,7 +1377,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -1388,7 +1388,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -1401,7 +1401,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.gpu.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -1416,7 +1416,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -1427,7 +1427,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -1435,7 +1435,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.jobsTemplates.featurization.gpu.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -1446,7 +1446,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) Container's working directory. If not specified, the container runtime's default will be used, which @@ -1456,7 +1456,7 @@ might be configured in the container image. ### .spec.jobsTemplates.prediction.cpu.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -1467,7 +1467,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -1480,7 +1480,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -1497,7 +1497,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -1505,7 +1505,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.jobsTemplates.prediction.cpu.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -1522,7 +1522,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -1533,7 +1533,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -1544,7 +1544,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -1554,7 +1554,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.cpu.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -1565,7 +1565,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.cpu.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -1575,7 +1575,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.cpu.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) Image define image details @@ -1583,7 +1583,7 @@ Image define image details ### .spec.jobsTemplates.prediction.cpu.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -1593,7 +1593,7 @@ Default Value: `IfNotPresent` ### .spec.jobsTemplates.prediction.cpu.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -1601,7 +1601,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.jobsTemplates.prediction.cpu.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -1614,7 +1614,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -1622,7 +1622,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.jobsTemplates.prediction.cpu.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -1634,7 +1634,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -1645,7 +1645,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -1656,7 +1656,7 @@ There cannot be more than one managing controller. ### .spec.jobsTemplates.prediction.cpu.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -1667,7 +1667,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -1678,7 +1678,7 @@ accessible from the network. ### .spec.jobsTemplates.prediction.cpu.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -1690,7 +1690,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -1701,7 +1701,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -1712,7 +1712,7 @@ Default Value: `""` ### .spec.jobsTemplates.prediction.cpu.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -1723,7 +1723,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -1734,7 +1734,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -1747,7 +1747,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.cpu.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -1762,7 +1762,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -1773,7 +1773,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -1781,7 +1781,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.jobsTemplates.prediction.cpu.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -1792,7 +1792,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) Container's working directory. If not specified, the container runtime's default will be used, which @@ -1802,7 +1802,7 @@ might be configured in the container image. ### .spec.jobsTemplates.prediction.gpu.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -1813,7 +1813,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -1826,7 +1826,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -1843,7 +1843,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -1851,7 +1851,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.jobsTemplates.prediction.gpu.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -1868,7 +1868,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -1879,7 +1879,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -1890,7 +1890,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -1900,7 +1900,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.gpu.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -1911,7 +1911,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.gpu.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -1921,7 +1921,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.gpu.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) Image define image details @@ -1929,7 +1929,7 @@ Image define image details ### .spec.jobsTemplates.prediction.gpu.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -1939,7 +1939,7 @@ Default Value: `IfNotPresent` ### .spec.jobsTemplates.prediction.gpu.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -1947,7 +1947,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.jobsTemplates.prediction.gpu.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -1960,7 +1960,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -1968,7 +1968,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.jobsTemplates.prediction.gpu.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -1980,7 +1980,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -1991,7 +1991,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -2002,7 +2002,7 @@ There cannot be more than one managing controller. ### .spec.jobsTemplates.prediction.gpu.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -2013,7 +2013,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -2024,7 +2024,7 @@ accessible from the network. ### .spec.jobsTemplates.prediction.gpu.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -2036,7 +2036,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -2047,7 +2047,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -2058,7 +2058,7 @@ Default Value: `""` ### .spec.jobsTemplates.prediction.gpu.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -2069,7 +2069,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -2080,7 +2080,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -2093,7 +2093,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.gpu.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -2108,7 +2108,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -2119,7 +2119,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -2127,7 +2127,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.jobsTemplates.prediction.gpu.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -2138,7 +2138,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) Container's working directory. If not specified, the container runtime's default will be used, which @@ -2148,7 +2148,7 @@ might be configured in the container image. ### .spec.jobsTemplates.training.cpu.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -2159,7 +2159,7 @@ Links: ### .spec.jobsTemplates.training.cpu.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -2172,7 +2172,7 @@ Links: ### .spec.jobsTemplates.training.cpu.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -2189,7 +2189,7 @@ Links: ### .spec.jobsTemplates.training.cpu.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -2197,7 +2197,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.jobsTemplates.training.cpu.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -2214,7 +2214,7 @@ Links: ### .spec.jobsTemplates.training.cpu.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -2225,7 +2225,7 @@ Links: ### .spec.jobsTemplates.training.cpu.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -2236,7 +2236,7 @@ Links: ### .spec.jobsTemplates.training.cpu.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -2246,7 +2246,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.cpu.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -2257,7 +2257,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.cpu.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -2267,7 +2267,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.cpu.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) Image define image details @@ -2275,7 +2275,7 @@ Image define image details ### .spec.jobsTemplates.training.cpu.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -2285,7 +2285,7 @@ Default Value: `IfNotPresent` ### .spec.jobsTemplates.training.cpu.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -2293,7 +2293,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.jobsTemplates.training.cpu.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -2306,7 +2306,7 @@ Links: ### .spec.jobsTemplates.training.cpu.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -2314,7 +2314,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.jobsTemplates.training.cpu.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -2326,7 +2326,7 @@ Links: ### .spec.jobsTemplates.training.cpu.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -2337,7 +2337,7 @@ Links: ### .spec.jobsTemplates.training.cpu.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -2348,7 +2348,7 @@ There cannot be more than one managing controller. ### .spec.jobsTemplates.training.cpu.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -2359,7 +2359,7 @@ Links: ### .spec.jobsTemplates.training.cpu.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -2370,7 +2370,7 @@ accessible from the network. ### .spec.jobsTemplates.training.cpu.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -2382,7 +2382,7 @@ Links: ### .spec.jobsTemplates.training.cpu.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -2393,7 +2393,7 @@ Links: ### .spec.jobsTemplates.training.cpu.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -2404,7 +2404,7 @@ Default Value: `""` ### .spec.jobsTemplates.training.cpu.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -2415,7 +2415,7 @@ Links: ### .spec.jobsTemplates.training.cpu.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -2426,7 +2426,7 @@ Links: ### .spec.jobsTemplates.training.cpu.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -2439,7 +2439,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.cpu.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -2454,7 +2454,7 @@ Links: ### .spec.jobsTemplates.training.cpu.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -2465,7 +2465,7 @@ Links: ### .spec.jobsTemplates.training.cpu.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -2473,7 +2473,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.jobsTemplates.training.cpu.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -2484,7 +2484,7 @@ Links: ### .spec.jobsTemplates.training.cpu.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) Container's working directory. If not specified, the container runtime's default will be used, which @@ -2494,7 +2494,7 @@ might be configured in the container image. ### .spec.jobsTemplates.training.gpu.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -2505,7 +2505,7 @@ Links: ### .spec.jobsTemplates.training.gpu.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -2518,7 +2518,7 @@ Links: ### .spec.jobsTemplates.training.gpu.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -2535,7 +2535,7 @@ Links: ### .spec.jobsTemplates.training.gpu.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -2543,7 +2543,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.jobsTemplates.training.gpu.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -2560,7 +2560,7 @@ Links: ### .spec.jobsTemplates.training.gpu.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -2571,7 +2571,7 @@ Links: ### .spec.jobsTemplates.training.gpu.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -2582,7 +2582,7 @@ Links: ### .spec.jobsTemplates.training.gpu.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -2592,7 +2592,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.gpu.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -2603,7 +2603,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.gpu.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -2613,7 +2613,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.gpu.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) Image define image details @@ -2621,7 +2621,7 @@ Image define image details ### .spec.jobsTemplates.training.gpu.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -2631,7 +2631,7 @@ Default Value: `IfNotPresent` ### .spec.jobsTemplates.training.gpu.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -2639,7 +2639,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.jobsTemplates.training.gpu.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -2652,7 +2652,7 @@ Links: ### .spec.jobsTemplates.training.gpu.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -2660,7 +2660,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.jobsTemplates.training.gpu.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -2672,7 +2672,7 @@ Links: ### .spec.jobsTemplates.training.gpu.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -2683,7 +2683,7 @@ Links: ### .spec.jobsTemplates.training.gpu.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -2694,7 +2694,7 @@ There cannot be more than one managing controller. ### .spec.jobsTemplates.training.gpu.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -2705,7 +2705,7 @@ Links: ### .spec.jobsTemplates.training.gpu.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -2716,7 +2716,7 @@ accessible from the network. ### .spec.jobsTemplates.training.gpu.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -2728,7 +2728,7 @@ Links: ### .spec.jobsTemplates.training.gpu.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -2739,7 +2739,7 @@ Links: ### .spec.jobsTemplates.training.gpu.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -2750,7 +2750,7 @@ Default Value: `""` ### .spec.jobsTemplates.training.gpu.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -2761,7 +2761,7 @@ Links: ### .spec.jobsTemplates.training.gpu.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -2772,7 +2772,7 @@ Links: ### .spec.jobsTemplates.training.gpu.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -2785,7 +2785,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.gpu.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -2800,7 +2800,7 @@ Links: ### .spec.jobsTemplates.training.gpu.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -2811,7 +2811,7 @@ Links: ### .spec.jobsTemplates.training.gpu.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -2819,7 +2819,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.jobsTemplates.training.gpu.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -2830,7 +2830,7 @@ Links: ### .spec.jobsTemplates.training.gpu.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) Container's working directory. If not specified, the container runtime's default will be used, which @@ -2840,7 +2840,7 @@ might be configured in the container image. ### .spec.metadataService.local.arangoMLFeatureStore -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/extension_spec_metadata_service.go#L65) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/extension_spec_metadata_service.go#L65) ArangoMLFeatureStoreDatabase define Database name to be used as MetadataService Backend in ArangoMLFeatureStoreDatabase @@ -2850,7 +2850,7 @@ Default Value: `arangomlfeaturestore` ### .spec.metadataService.local.arangoPipeDatabase -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/extension_spec_metadata_service.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/extension_spec_metadata_service.go#L61) ArangoPipeDatabase define Database name to be used as MetadataService Backend in ArangoPipe @@ -2860,7 +2860,7 @@ Default Value: `arangopipe` ### .spec.storage.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -2868,7 +2868,7 @@ UID keeps the information about object Checksum ### .spec.storage.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -2876,7 +2876,7 @@ Name of the object ### .spec.storage.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -2884,7 +2884,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .spec.storage.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -2892,7 +2892,7 @@ UID keeps the information about object UID ### .status.arangoDB.secret.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -2900,7 +2900,7 @@ UID keeps the information about object Checksum ### .status.arangoDB.secret.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -2908,7 +2908,7 @@ Name of the object ### .status.arangoDB.secret.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -2916,7 +2916,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.arangoDB.secret.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -2924,7 +2924,7 @@ UID keeps the information about object UID ### .status.arangoDB.tls.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -2932,7 +2932,7 @@ UID keeps the information about object Checksum ### .status.arangoDB.tls.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -2940,7 +2940,7 @@ Name of the object ### .status.arangoDB.tls.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -2948,7 +2948,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.arangoDB.tls.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -2956,7 +2956,7 @@ UID keeps the information about object UID ### .status.conditions -Type: `api.Conditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/extension_status.go#L31) +Type: `api.Conditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/extension_status.go#L31) Conditions specific to the entire extension @@ -2964,7 +2964,7 @@ Conditions specific to the entire extension ### .status.metadataService.local.arangoMLFeatureStore -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/extension_status_metadata_service.go#L38) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/extension_status_metadata_service.go#L38) ArangoMLFeatureStoreDatabase define Database name to be used as MetadataService Backend @@ -2972,7 +2972,7 @@ ArangoMLFeatureStoreDatabase define Database name to be used as MetadataService ### .status.metadataService.local.arangoPipe -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/extension_status_metadata_service.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/extension_status_metadata_service.go#L35) ArangoPipeDatabase define Database name to be used as MetadataService Backend @@ -2980,7 +2980,7 @@ ArangoPipeDatabase define Database name to be used as MetadataService Backend ### .status.metadataService.secret.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -2988,7 +2988,7 @@ UID keeps the information about object Checksum ### .status.metadataService.secret.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -2996,7 +2996,7 @@ Name of the object ### .status.metadataService.secret.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3004,7 +3004,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.metadataService.secret.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3012,7 +3012,7 @@ UID keeps the information about object UID ### .status.reconciliation.service.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3020,7 +3020,7 @@ UID keeps the information about object Checksum ### .status.reconciliation.service.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3028,7 +3028,7 @@ Name of the object ### .status.reconciliation.service.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3036,7 +3036,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.reconciliation.service.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3044,7 +3044,7 @@ UID keeps the information about object UID ### .status.reconciliation.statefulSet.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3052,7 +3052,7 @@ UID keeps the information about object Checksum ### .status.reconciliation.statefulSet.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3060,7 +3060,7 @@ Name of the object ### .status.reconciliation.statefulSet.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3068,7 +3068,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.reconciliation.statefulSet.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3076,7 +3076,7 @@ UID keeps the information about object UID ### .status.serviceAccount.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3084,7 +3084,7 @@ UID keeps the information about object Checksum ### .status.serviceAccount.cluster.binding.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3092,7 +3092,7 @@ UID keeps the information about object Checksum ### .status.serviceAccount.cluster.binding.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3100,7 +3100,7 @@ Name of the object ### .status.serviceAccount.cluster.binding.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3108,7 +3108,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.serviceAccount.cluster.binding.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3116,7 +3116,7 @@ UID keeps the information about object UID ### .status.serviceAccount.cluster.role.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3124,7 +3124,7 @@ UID keeps the information about object Checksum ### .status.serviceAccount.cluster.role.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3132,7 +3132,7 @@ Name of the object ### .status.serviceAccount.cluster.role.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3140,7 +3140,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.serviceAccount.cluster.role.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3148,7 +3148,7 @@ UID keeps the information about object UID ### .status.serviceAccount.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3156,7 +3156,7 @@ Name of the object ### .status.serviceAccount.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3164,7 +3164,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.serviceAccount.namespaced.binding.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3172,7 +3172,7 @@ UID keeps the information about object Checksum ### .status.serviceAccount.namespaced.binding.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3180,7 +3180,7 @@ Name of the object ### .status.serviceAccount.namespaced.binding.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3188,7 +3188,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.serviceAccount.namespaced.binding.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3196,7 +3196,7 @@ UID keeps the information about object UID ### .status.serviceAccount.namespaced.role.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3204,7 +3204,7 @@ UID keeps the information about object Checksum ### .status.serviceAccount.namespaced.role.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3212,7 +3212,7 @@ Name of the object ### .status.serviceAccount.namespaced.role.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3220,7 +3220,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.serviceAccount.namespaced.role.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3228,7 +3228,7 @@ UID keeps the information about object UID ### .status.serviceAccount.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID diff --git a/docs/api/ArangoMLExtension.V1Beta1.md b/docs/api/ArangoMLExtension.V1Beta1.md index 7cd7e931a..f995d005a 100644 --- a/docs/api/ArangoMLExtension.V1Beta1.md +++ b/docs/api/ArangoMLExtension.V1Beta1.md @@ -10,7 +10,7 @@ title: ArangoMLExtension V1Beta1 ### .spec.deployment.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -21,7 +21,7 @@ Links: ### .spec.deployment.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -34,7 +34,7 @@ Links: ### .spec.deployment.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -51,7 +51,7 @@ Links: ### .spec.deployment.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -59,7 +59,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.deployment.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -76,7 +76,7 @@ Links: ### .spec.deployment.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -87,7 +87,7 @@ Links: ### .spec.deployment.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -98,7 +98,7 @@ Links: ### .spec.deployment.gpu -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/extension_spec_deployment.go#L56) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/extension_spec_deployment.go#L56) GPU defined if GPU Jobs are enabled. @@ -108,7 +108,7 @@ Default Value: `false` ### .spec.deployment.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -118,7 +118,7 @@ Default Value: `false` ### .spec.deployment.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -129,7 +129,7 @@ Default Value: `false` ### .spec.deployment.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -139,7 +139,7 @@ Default Value: `false` ### .spec.deployment.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) Image define image details @@ -147,7 +147,7 @@ Image define image details ### .spec.deployment.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -157,7 +157,7 @@ Default Value: `IfNotPresent` ### .spec.deployment.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -165,7 +165,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.deployment.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -178,7 +178,7 @@ Links: ### .spec.deployment.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -186,7 +186,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.deployment.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -198,7 +198,7 @@ Links: ### .spec.deployment.method -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) Method defines the merge method @@ -210,7 +210,7 @@ Possible Values: ### .spec.deployment.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -221,7 +221,7 @@ Links: ### .spec.deployment.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -232,7 +232,7 @@ There cannot be more than one managing controller. ### .spec.deployment.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -243,7 +243,7 @@ Links: ### .spec.deployment.port -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/extension_spec_deployment.go#L59) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/extension_spec_deployment.go#L59) Port defines on which port the container will be listening for connections @@ -251,7 +251,7 @@ Port defines on which port the container will be listening for connections ### .spec.deployment.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -262,7 +262,7 @@ accessible from the network. ### .spec.deployment.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -274,7 +274,7 @@ Links: ### .spec.deployment.replicas -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/extension_spec_deployment.go#L40) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/extension_spec_deployment.go#L40) Replicas defines the number of replicas running specified components. No replicas created if no components are defined. @@ -284,7 +284,7 @@ Default Value: `1` ### .spec.deployment.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -295,7 +295,7 @@ Links: ### .spec.deployment.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -306,7 +306,7 @@ Default Value: `""` ### .spec.deployment.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -317,7 +317,7 @@ Links: ### .spec.deployment.service.type -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/extension_spec_deployment_service.go#L38) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/extension_spec_deployment_service.go#L38) Type determines how the Service is exposed @@ -335,7 +335,7 @@ Possible Values: ### .spec.deployment.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -346,7 +346,7 @@ Links: ### .spec.deployment.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -359,7 +359,7 @@ Default Value: `false` ### .spec.deployment.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -374,7 +374,7 @@ Links: ### .spec.deployment.tls.altNames -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/tls.go#L28) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/tls.go#L28) AltNames define TLS AltNames used when TLS on the ArangoDB is enabled @@ -382,7 +382,7 @@ AltNames define TLS AltNames used when TLS on the ArangoDB is enabled ### .spec.deployment.tls.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/tls.go#L25) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/tls.go#L25) Enabled define if TLS Should be enabled. If is not set then default is taken from ArangoDeployment settings @@ -390,7 +390,7 @@ Enabled define if TLS Should be enabled. If is not set then default is taken fro ### .spec.deployment.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -401,7 +401,7 @@ Links: ### .spec.deployment.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -409,7 +409,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.deployment.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -420,7 +420,7 @@ Links: ### .spec.deployment.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) Container's working directory. If not specified, the container runtime's default will be used, which @@ -430,7 +430,7 @@ might be configured in the container image. ### .spec.init.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -441,7 +441,7 @@ Links: ### .spec.init.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -454,7 +454,7 @@ Links: ### .spec.init.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -471,7 +471,7 @@ Links: ### .spec.init.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -479,7 +479,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.init.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -496,7 +496,7 @@ Links: ### .spec.init.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -507,7 +507,7 @@ Links: ### .spec.init.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -518,7 +518,7 @@ Links: ### .spec.init.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -528,7 +528,7 @@ Default Value: `false` ### .spec.init.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -539,7 +539,7 @@ Default Value: `false` ### .spec.init.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -549,7 +549,7 @@ Default Value: `false` ### .spec.init.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) Image define image details @@ -557,7 +557,7 @@ Image define image details ### .spec.init.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -567,7 +567,7 @@ Default Value: `IfNotPresent` ### .spec.init.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -575,7 +575,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.init.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -588,7 +588,7 @@ Links: ### .spec.init.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -596,7 +596,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.init.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -608,7 +608,7 @@ Links: ### .spec.init.method -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) Method defines the merge method @@ -620,7 +620,7 @@ Possible Values: ### .spec.init.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -631,7 +631,7 @@ Links: ### .spec.init.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -642,7 +642,7 @@ There cannot be more than one managing controller. ### .spec.init.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -653,7 +653,7 @@ Links: ### .spec.init.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -664,7 +664,7 @@ accessible from the network. ### .spec.init.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -676,7 +676,7 @@ Links: ### .spec.init.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -687,7 +687,7 @@ Links: ### .spec.init.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -698,7 +698,7 @@ Default Value: `""` ### .spec.init.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -709,7 +709,7 @@ Links: ### .spec.init.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -720,7 +720,7 @@ Links: ### .spec.init.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -733,7 +733,7 @@ Default Value: `false` ### .spec.init.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -748,7 +748,7 @@ Links: ### .spec.init.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -759,7 +759,7 @@ Links: ### .spec.init.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -767,7 +767,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.init.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -778,7 +778,7 @@ Links: ### .spec.init.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) Container's working directory. If not specified, the container runtime's default will be used, which @@ -788,7 +788,7 @@ might be configured in the container image. ### .spec.integrationSidecar.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -805,7 +805,7 @@ Links: ### .spec.integrationSidecar.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -822,7 +822,7 @@ Links: ### .spec.integrationSidecar.controllerListenPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/integration/integration.go#L36) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/integration/integration.go#L36) ControllerListenPort defines on which port the sidecar container will be listening for controller requests @@ -832,7 +832,7 @@ Default Value: `9202` ### .spec.integrationSidecar.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -843,7 +843,7 @@ Links: ### .spec.integrationSidecar.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -854,7 +854,7 @@ Links: ### .spec.integrationSidecar.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) Image define image details @@ -862,7 +862,7 @@ Image define image details ### .spec.integrationSidecar.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -872,7 +872,7 @@ Default Value: `IfNotPresent` ### .spec.integrationSidecar.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -880,7 +880,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.integrationSidecar.listenPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/integration/integration.go#L32) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/integration/integration.go#L32) ListenPort defines on which port the sidecar container will be listening for connections @@ -890,7 +890,7 @@ Default Value: `9201` ### .spec.integrationSidecar.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -902,7 +902,7 @@ Links: ### .spec.integrationSidecar.method -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) Method defines the merge method @@ -914,7 +914,7 @@ Possible Values: ### .spec.integrationSidecar.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -925,7 +925,7 @@ accessible from the network. ### .spec.integrationSidecar.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -937,7 +937,7 @@ Links: ### .spec.integrationSidecar.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -948,7 +948,7 @@ Links: ### .spec.integrationSidecar.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -959,7 +959,7 @@ Links: ### .spec.integrationSidecar.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -974,7 +974,7 @@ Links: ### .spec.integrationSidecar.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -982,7 +982,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.integrationSidecar.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) Container's working directory. If not specified, the container runtime's default will be used, which @@ -992,7 +992,7 @@ might be configured in the container image. ### .spec.jobsTemplates.featurization.cpu.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -1003,7 +1003,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -1016,7 +1016,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -1033,7 +1033,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -1041,7 +1041,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.jobsTemplates.featurization.cpu.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -1058,7 +1058,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -1069,7 +1069,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -1080,7 +1080,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -1090,7 +1090,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.cpu.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -1101,7 +1101,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.cpu.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -1111,7 +1111,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.cpu.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) Image define image details @@ -1119,7 +1119,7 @@ Image define image details ### .spec.jobsTemplates.featurization.cpu.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -1129,7 +1129,7 @@ Default Value: `IfNotPresent` ### .spec.jobsTemplates.featurization.cpu.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -1137,7 +1137,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.jobsTemplates.featurization.cpu.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -1150,7 +1150,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -1158,7 +1158,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.jobsTemplates.featurization.cpu.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -1170,7 +1170,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.method -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) Method defines the merge method @@ -1182,7 +1182,7 @@ Possible Values: ### .spec.jobsTemplates.featurization.cpu.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -1193,7 +1193,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -1204,7 +1204,7 @@ There cannot be more than one managing controller. ### .spec.jobsTemplates.featurization.cpu.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -1215,7 +1215,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -1226,7 +1226,7 @@ accessible from the network. ### .spec.jobsTemplates.featurization.cpu.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -1238,7 +1238,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -1249,7 +1249,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -1260,7 +1260,7 @@ Default Value: `""` ### .spec.jobsTemplates.featurization.cpu.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -1271,7 +1271,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -1282,7 +1282,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -1295,7 +1295,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.cpu.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -1310,7 +1310,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -1321,7 +1321,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -1329,7 +1329,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.jobsTemplates.featurization.cpu.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -1340,7 +1340,7 @@ Links: ### .spec.jobsTemplates.featurization.cpu.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) Container's working directory. If not specified, the container runtime's default will be used, which @@ -1350,7 +1350,7 @@ might be configured in the container image. ### .spec.jobsTemplates.featurization.gpu.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -1361,7 +1361,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -1374,7 +1374,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -1391,7 +1391,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -1399,7 +1399,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.jobsTemplates.featurization.gpu.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -1416,7 +1416,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -1427,7 +1427,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -1438,7 +1438,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -1448,7 +1448,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.gpu.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -1459,7 +1459,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.gpu.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -1469,7 +1469,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.gpu.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) Image define image details @@ -1477,7 +1477,7 @@ Image define image details ### .spec.jobsTemplates.featurization.gpu.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -1487,7 +1487,7 @@ Default Value: `IfNotPresent` ### .spec.jobsTemplates.featurization.gpu.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -1495,7 +1495,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.jobsTemplates.featurization.gpu.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -1508,7 +1508,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -1516,7 +1516,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.jobsTemplates.featurization.gpu.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -1528,7 +1528,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.method -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) Method defines the merge method @@ -1540,7 +1540,7 @@ Possible Values: ### .spec.jobsTemplates.featurization.gpu.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -1551,7 +1551,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -1562,7 +1562,7 @@ There cannot be more than one managing controller. ### .spec.jobsTemplates.featurization.gpu.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -1573,7 +1573,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -1584,7 +1584,7 @@ accessible from the network. ### .spec.jobsTemplates.featurization.gpu.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -1596,7 +1596,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -1607,7 +1607,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -1618,7 +1618,7 @@ Default Value: `""` ### .spec.jobsTemplates.featurization.gpu.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -1629,7 +1629,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -1640,7 +1640,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -1653,7 +1653,7 @@ Default Value: `false` ### .spec.jobsTemplates.featurization.gpu.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -1668,7 +1668,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -1679,7 +1679,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -1687,7 +1687,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.jobsTemplates.featurization.gpu.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -1698,7 +1698,7 @@ Links: ### .spec.jobsTemplates.featurization.gpu.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) Container's working directory. If not specified, the container runtime's default will be used, which @@ -1708,7 +1708,7 @@ might be configured in the container image. ### .spec.jobsTemplates.prediction.cpu.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -1719,7 +1719,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -1732,7 +1732,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -1749,7 +1749,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -1757,7 +1757,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.jobsTemplates.prediction.cpu.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -1774,7 +1774,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -1785,7 +1785,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -1796,7 +1796,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -1806,7 +1806,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.cpu.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -1817,7 +1817,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.cpu.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -1827,7 +1827,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.cpu.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) Image define image details @@ -1835,7 +1835,7 @@ Image define image details ### .spec.jobsTemplates.prediction.cpu.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -1845,7 +1845,7 @@ Default Value: `IfNotPresent` ### .spec.jobsTemplates.prediction.cpu.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -1853,7 +1853,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.jobsTemplates.prediction.cpu.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -1866,7 +1866,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -1874,7 +1874,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.jobsTemplates.prediction.cpu.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -1886,7 +1886,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.method -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) Method defines the merge method @@ -1898,7 +1898,7 @@ Possible Values: ### .spec.jobsTemplates.prediction.cpu.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -1909,7 +1909,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -1920,7 +1920,7 @@ There cannot be more than one managing controller. ### .spec.jobsTemplates.prediction.cpu.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -1931,7 +1931,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -1942,7 +1942,7 @@ accessible from the network. ### .spec.jobsTemplates.prediction.cpu.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -1954,7 +1954,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -1965,7 +1965,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -1976,7 +1976,7 @@ Default Value: `""` ### .spec.jobsTemplates.prediction.cpu.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -1987,7 +1987,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -1998,7 +1998,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -2011,7 +2011,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.cpu.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -2026,7 +2026,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -2037,7 +2037,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -2045,7 +2045,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.jobsTemplates.prediction.cpu.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -2056,7 +2056,7 @@ Links: ### .spec.jobsTemplates.prediction.cpu.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) Container's working directory. If not specified, the container runtime's default will be used, which @@ -2066,7 +2066,7 @@ might be configured in the container image. ### .spec.jobsTemplates.prediction.gpu.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -2077,7 +2077,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -2090,7 +2090,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -2107,7 +2107,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -2115,7 +2115,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.jobsTemplates.prediction.gpu.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -2132,7 +2132,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -2143,7 +2143,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -2154,7 +2154,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -2164,7 +2164,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.gpu.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -2175,7 +2175,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.gpu.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -2185,7 +2185,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.gpu.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) Image define image details @@ -2193,7 +2193,7 @@ Image define image details ### .spec.jobsTemplates.prediction.gpu.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -2203,7 +2203,7 @@ Default Value: `IfNotPresent` ### .spec.jobsTemplates.prediction.gpu.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -2211,7 +2211,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.jobsTemplates.prediction.gpu.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -2224,7 +2224,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -2232,7 +2232,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.jobsTemplates.prediction.gpu.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -2244,7 +2244,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.method -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) Method defines the merge method @@ -2256,7 +2256,7 @@ Possible Values: ### .spec.jobsTemplates.prediction.gpu.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -2267,7 +2267,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -2278,7 +2278,7 @@ There cannot be more than one managing controller. ### .spec.jobsTemplates.prediction.gpu.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -2289,7 +2289,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -2300,7 +2300,7 @@ accessible from the network. ### .spec.jobsTemplates.prediction.gpu.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -2312,7 +2312,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -2323,7 +2323,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -2334,7 +2334,7 @@ Default Value: `""` ### .spec.jobsTemplates.prediction.gpu.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -2345,7 +2345,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -2356,7 +2356,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -2369,7 +2369,7 @@ Default Value: `false` ### .spec.jobsTemplates.prediction.gpu.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -2384,7 +2384,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -2395,7 +2395,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -2403,7 +2403,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.jobsTemplates.prediction.gpu.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -2414,7 +2414,7 @@ Links: ### .spec.jobsTemplates.prediction.gpu.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) Container's working directory. If not specified, the container runtime's default will be used, which @@ -2424,7 +2424,7 @@ might be configured in the container image. ### .spec.jobsTemplates.training.cpu.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -2435,7 +2435,7 @@ Links: ### .spec.jobsTemplates.training.cpu.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -2448,7 +2448,7 @@ Links: ### .spec.jobsTemplates.training.cpu.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -2465,7 +2465,7 @@ Links: ### .spec.jobsTemplates.training.cpu.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -2473,7 +2473,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.jobsTemplates.training.cpu.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -2490,7 +2490,7 @@ Links: ### .spec.jobsTemplates.training.cpu.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -2501,7 +2501,7 @@ Links: ### .spec.jobsTemplates.training.cpu.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -2512,7 +2512,7 @@ Links: ### .spec.jobsTemplates.training.cpu.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -2522,7 +2522,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.cpu.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -2533,7 +2533,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.cpu.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -2543,7 +2543,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.cpu.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) Image define image details @@ -2551,7 +2551,7 @@ Image define image details ### .spec.jobsTemplates.training.cpu.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -2561,7 +2561,7 @@ Default Value: `IfNotPresent` ### .spec.jobsTemplates.training.cpu.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -2569,7 +2569,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.jobsTemplates.training.cpu.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -2582,7 +2582,7 @@ Links: ### .spec.jobsTemplates.training.cpu.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -2590,7 +2590,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.jobsTemplates.training.cpu.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -2602,7 +2602,7 @@ Links: ### .spec.jobsTemplates.training.cpu.method -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) Method defines the merge method @@ -2614,7 +2614,7 @@ Possible Values: ### .spec.jobsTemplates.training.cpu.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -2625,7 +2625,7 @@ Links: ### .spec.jobsTemplates.training.cpu.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -2636,7 +2636,7 @@ There cannot be more than one managing controller. ### .spec.jobsTemplates.training.cpu.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -2647,7 +2647,7 @@ Links: ### .spec.jobsTemplates.training.cpu.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -2658,7 +2658,7 @@ accessible from the network. ### .spec.jobsTemplates.training.cpu.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -2670,7 +2670,7 @@ Links: ### .spec.jobsTemplates.training.cpu.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -2681,7 +2681,7 @@ Links: ### .spec.jobsTemplates.training.cpu.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -2692,7 +2692,7 @@ Default Value: `""` ### .spec.jobsTemplates.training.cpu.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -2703,7 +2703,7 @@ Links: ### .spec.jobsTemplates.training.cpu.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -2714,7 +2714,7 @@ Links: ### .spec.jobsTemplates.training.cpu.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -2727,7 +2727,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.cpu.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -2742,7 +2742,7 @@ Links: ### .spec.jobsTemplates.training.cpu.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -2753,7 +2753,7 @@ Links: ### .spec.jobsTemplates.training.cpu.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -2761,7 +2761,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.jobsTemplates.training.cpu.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -2772,7 +2772,7 @@ Links: ### .spec.jobsTemplates.training.cpu.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) Container's working directory. If not specified, the container runtime's default will be used, which @@ -2782,7 +2782,7 @@ might be configured in the container image. ### .spec.jobsTemplates.training.gpu.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -2793,7 +2793,7 @@ Links: ### .spec.jobsTemplates.training.gpu.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -2806,7 +2806,7 @@ Links: ### .spec.jobsTemplates.training.gpu.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -2823,7 +2823,7 @@ Links: ### .spec.jobsTemplates.training.gpu.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -2831,7 +2831,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.jobsTemplates.training.gpu.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -2848,7 +2848,7 @@ Links: ### .spec.jobsTemplates.training.gpu.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -2859,7 +2859,7 @@ Links: ### .spec.jobsTemplates.training.gpu.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -2870,7 +2870,7 @@ Links: ### .spec.jobsTemplates.training.gpu.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -2880,7 +2880,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.gpu.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -2891,7 +2891,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.gpu.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -2901,7 +2901,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.gpu.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) Image define image details @@ -2909,7 +2909,7 @@ Image define image details ### .spec.jobsTemplates.training.gpu.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -2919,7 +2919,7 @@ Default Value: `IfNotPresent` ### .spec.jobsTemplates.training.gpu.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -2927,7 +2927,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.jobsTemplates.training.gpu.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -2940,7 +2940,7 @@ Links: ### .spec.jobsTemplates.training.gpu.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -2948,7 +2948,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.jobsTemplates.training.gpu.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -2960,7 +2960,7 @@ Links: ### .spec.jobsTemplates.training.gpu.method -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) Method defines the merge method @@ -2972,7 +2972,7 @@ Possible Values: ### .spec.jobsTemplates.training.gpu.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -2983,7 +2983,7 @@ Links: ### .spec.jobsTemplates.training.gpu.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -2994,7 +2994,7 @@ There cannot be more than one managing controller. ### .spec.jobsTemplates.training.gpu.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -3005,7 +3005,7 @@ Links: ### .spec.jobsTemplates.training.gpu.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -3016,7 +3016,7 @@ accessible from the network. ### .spec.jobsTemplates.training.gpu.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -3028,7 +3028,7 @@ Links: ### .spec.jobsTemplates.training.gpu.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -3039,7 +3039,7 @@ Links: ### .spec.jobsTemplates.training.gpu.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -3050,7 +3050,7 @@ Default Value: `""` ### .spec.jobsTemplates.training.gpu.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -3061,7 +3061,7 @@ Links: ### .spec.jobsTemplates.training.gpu.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -3072,7 +3072,7 @@ Links: ### .spec.jobsTemplates.training.gpu.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -3085,7 +3085,7 @@ Default Value: `false` ### .spec.jobsTemplates.training.gpu.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -3100,7 +3100,7 @@ Links: ### .spec.jobsTemplates.training.gpu.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -3111,7 +3111,7 @@ Links: ### .spec.jobsTemplates.training.gpu.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -3119,7 +3119,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.jobsTemplates.training.gpu.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -3130,7 +3130,7 @@ Links: ### .spec.jobsTemplates.training.gpu.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) Container's working directory. If not specified, the container runtime's default will be used, which @@ -3140,7 +3140,7 @@ might be configured in the container image. ### .spec.metadataService.local.arangoMLFeatureStore -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/extension_spec_metadata_service.go#L65) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/extension_spec_metadata_service.go#L65) ArangoMLFeatureStoreDatabase define Database name to be used as MetadataService Backend in ArangoMLFeatureStoreDatabase @@ -3150,7 +3150,7 @@ Default Value: `arangomlfeaturestore` ### .spec.metadataService.local.arangoPipeDatabase -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/extension_spec_metadata_service.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/extension_spec_metadata_service.go#L61) ArangoPipeDatabase define Database name to be used as MetadataService Backend in ArangoPipe @@ -3160,7 +3160,7 @@ Default Value: `arangopipe` ### .spec.storage.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3168,7 +3168,7 @@ UID keeps the information about object Checksum ### .spec.storage.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3176,7 +3176,7 @@ Name of the object ### .spec.storage.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3184,15 +3184,27 @@ Namespace of the object. Should default to the namespace of the parent object ### .spec.storage.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID +*** + +### .spec.storageType + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/extension_spec.go#L52) + +ArangoMLExtensionSpecStorageType defines storage used for extension + +Possible Values: +* `"extension"` (default) - Uses AragoMLStorage +* `"platform"` - Uses AragoPlatformStorage + ## Status ### .status.arangoDB.secret.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3200,7 +3212,7 @@ UID keeps the information about object Checksum ### .status.arangoDB.secret.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3208,7 +3220,7 @@ Name of the object ### .status.arangoDB.secret.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3216,7 +3228,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.arangoDB.secret.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3224,7 +3236,7 @@ UID keeps the information about object UID ### .status.arangoDB.tls.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3232,7 +3244,7 @@ UID keeps the information about object Checksum ### .status.arangoDB.tls.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3240,7 +3252,7 @@ Name of the object ### .status.arangoDB.tls.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3248,7 +3260,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.arangoDB.tls.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3256,7 +3268,7 @@ UID keeps the information about object UID ### .status.conditions -Type: `api.Conditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/extension_status.go#L31) +Type: `api.Conditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/extension_status.go#L31) Conditions specific to the entire extension @@ -3264,7 +3276,7 @@ Conditions specific to the entire extension ### .status.metadataService.arangoMLFeatureStore -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/extension_status_metadata_service.go#L28) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/extension_status_metadata_service.go#L28) ArangoMLFeatureStoreDatabase define Database name to be used as MetadataService Backend @@ -3272,7 +3284,7 @@ ArangoMLFeatureStoreDatabase define Database name to be used as MetadataService ### .status.metadataService.arangoPipe -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/extension_status_metadata_service.go#L25) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/extension_status_metadata_service.go#L25) ArangoPipeDatabase define Database name to be used as MetadataService Backend @@ -3280,7 +3292,7 @@ ArangoPipeDatabase define Database name to be used as MetadataService Backend ### .status.reconciliation.service.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3288,7 +3300,7 @@ UID keeps the information about object Checksum ### .status.reconciliation.service.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3296,7 +3308,7 @@ Name of the object ### .status.reconciliation.service.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3304,7 +3316,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.reconciliation.service.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3312,7 +3324,7 @@ UID keeps the information about object UID ### .status.reconciliation.statefulSet.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3320,7 +3332,7 @@ UID keeps the information about object Checksum ### .status.reconciliation.statefulSet.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3328,7 +3340,7 @@ Name of the object ### .status.reconciliation.statefulSet.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3336,7 +3348,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.reconciliation.statefulSet.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3344,7 +3356,7 @@ UID keeps the information about object UID ### .status.serviceAccount.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3352,7 +3364,7 @@ UID keeps the information about object Checksum ### .status.serviceAccount.cluster.binding.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3360,7 +3372,7 @@ UID keeps the information about object Checksum ### .status.serviceAccount.cluster.binding.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3368,7 +3380,7 @@ Name of the object ### .status.serviceAccount.cluster.binding.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3376,7 +3388,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.serviceAccount.cluster.binding.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3384,7 +3396,7 @@ UID keeps the information about object UID ### .status.serviceAccount.cluster.role.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3392,7 +3404,7 @@ UID keeps the information about object Checksum ### .status.serviceAccount.cluster.role.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3400,7 +3412,7 @@ Name of the object ### .status.serviceAccount.cluster.role.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3408,7 +3420,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.serviceAccount.cluster.role.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3416,7 +3428,7 @@ UID keeps the information about object UID ### .status.serviceAccount.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3424,7 +3436,7 @@ Name of the object ### .status.serviceAccount.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3432,7 +3444,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.serviceAccount.namespaced.binding.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3440,7 +3452,7 @@ UID keeps the information about object Checksum ### .status.serviceAccount.namespaced.binding.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3448,7 +3460,7 @@ Name of the object ### .status.serviceAccount.namespaced.binding.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3456,7 +3468,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.serviceAccount.namespaced.binding.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3464,7 +3476,7 @@ UID keeps the information about object UID ### .status.serviceAccount.namespaced.role.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -3472,7 +3484,7 @@ UID keeps the information about object Checksum ### .status.serviceAccount.namespaced.role.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -3480,7 +3492,7 @@ Name of the object ### .status.serviceAccount.namespaced.role.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -3488,7 +3500,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.serviceAccount.namespaced.role.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -3496,7 +3508,7 @@ UID keeps the information about object UID ### .status.serviceAccount.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID diff --git a/docs/api/ArangoMLStorage.V1Alpha1.md b/docs/api/ArangoMLStorage.V1Alpha1.md index 76e273d7c..a16c08ed1 100644 --- a/docs/api/ArangoMLStorage.V1Alpha1.md +++ b/docs/api/ArangoMLStorage.V1Alpha1.md @@ -10,7 +10,7 @@ title: ArangoMLStorage V1Alpha1 ### .spec.backend.s3.allowInsecure -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/storage_spec_backend_s3.go#L40) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/storage_spec_backend_s3.go#L40) AllowInsecure if set to true, the Endpoint certificates won't be checked @@ -20,7 +20,7 @@ Default Value: `false` ### .spec.backend.s3.caSecret.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -28,7 +28,7 @@ UID keeps the information about object Checksum ### .spec.backend.s3.caSecret.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -36,7 +36,7 @@ Name of the object ### .spec.backend.s3.caSecret.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -44,7 +44,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .spec.backend.s3.caSecret.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -52,7 +52,7 @@ UID keeps the information about object UID ### .spec.backend.s3.credentialsSecret.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -60,7 +60,7 @@ UID keeps the information about object Checksum ### .spec.backend.s3.credentialsSecret.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -68,7 +68,7 @@ Name of the object ### .spec.backend.s3.credentialsSecret.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -76,7 +76,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .spec.backend.s3.credentialsSecret.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -84,7 +84,7 @@ UID keeps the information about object UID ### .spec.backend.s3.endpoint -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/storage_spec_backend_s3.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/storage_spec_backend_s3.go#L34) Endpoint specifies the S3 API-compatible endpoint which implements storage Required @@ -93,7 +93,7 @@ Required ### .spec.backend.s3.region -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/storage_spec_backend_s3.go#L49) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/storage_spec_backend_s3.go#L49) Region defines the availability zone name. @@ -103,7 +103,7 @@ Default Value: `""` ### .spec.bucketName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/storage_spec.go#L30) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/storage_spec.go#L30) BucketName specifies the name of the bucket Required @@ -112,7 +112,7 @@ Required ### .spec.bucketPath -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/storage_spec.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/storage_spec.go#L34) BucketPath specifies the path within the bucket @@ -122,7 +122,7 @@ Default Value: `/` ### .spec.mode.sidecar.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -139,7 +139,7 @@ Links: ### .spec.mode.sidecar.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -156,7 +156,7 @@ Links: ### .spec.mode.sidecar.controllerListenPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/storage_spec_mode_sidecar.go#L36) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/storage_spec_mode_sidecar.go#L36) ControllerListenPort defines on which port the sidecar container will be listening for controller requests @@ -166,7 +166,7 @@ Default Value: `9202` ### .spec.mode.sidecar.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -177,7 +177,7 @@ Links: ### .spec.mode.sidecar.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -188,7 +188,7 @@ Links: ### .spec.mode.sidecar.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) Image define image details @@ -196,7 +196,7 @@ Image define image details ### .spec.mode.sidecar.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -206,7 +206,7 @@ Default Value: `IfNotPresent` ### .spec.mode.sidecar.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -214,7 +214,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.mode.sidecar.listenPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/storage_spec_mode_sidecar.go#L32) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/storage_spec_mode_sidecar.go#L32) ListenPort defines on which port the sidecar container will be listening for connections @@ -224,7 +224,7 @@ Default Value: `9201` ### .spec.mode.sidecar.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -236,7 +236,7 @@ Links: ### .spec.mode.sidecar.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -247,7 +247,7 @@ accessible from the network. ### .spec.mode.sidecar.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -259,7 +259,7 @@ Links: ### .spec.mode.sidecar.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -270,7 +270,7 @@ Links: ### .spec.mode.sidecar.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -281,7 +281,7 @@ Links: ### .spec.mode.sidecar.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -296,7 +296,7 @@ Links: ### .spec.mode.sidecar.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -304,7 +304,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.mode.sidecar.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) Container's working directory. If not specified, the container runtime's default will be used, which @@ -314,7 +314,7 @@ might be configured in the container image. ### .status.conditions -Type: `api.Conditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1alpha1/storage_status.go#L28) +Type: `api.Conditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1alpha1/storage_status.go#L28) Conditions specific to the entire storage diff --git a/docs/api/ArangoMLStorage.V1Beta1.md b/docs/api/ArangoMLStorage.V1Beta1.md index c6169d908..e67918b8d 100644 --- a/docs/api/ArangoMLStorage.V1Beta1.md +++ b/docs/api/ArangoMLStorage.V1Beta1.md @@ -10,7 +10,7 @@ title: ArangoMLStorage V1Beta1 ### .spec.backend.s3.allowInsecure -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/storage_spec_backend_s3.go#L40) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/storage_spec_backend_s3.go#L40) AllowInsecure if set to true, the Endpoint certificates won't be checked @@ -20,7 +20,7 @@ Default Value: `false` ### .spec.backend.s3.caSecret.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -28,7 +28,7 @@ UID keeps the information about object Checksum ### .spec.backend.s3.caSecret.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -36,7 +36,7 @@ Name of the object ### .spec.backend.s3.caSecret.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -44,7 +44,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .spec.backend.s3.caSecret.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -52,7 +52,7 @@ UID keeps the information about object UID ### .spec.backend.s3.credentialsSecret.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -60,7 +60,7 @@ UID keeps the information about object Checksum ### .spec.backend.s3.credentialsSecret.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -68,7 +68,7 @@ Name of the object ### .spec.backend.s3.credentialsSecret.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -76,7 +76,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .spec.backend.s3.credentialsSecret.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -84,7 +84,7 @@ UID keeps the information about object UID ### .spec.backend.s3.endpoint -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/storage_spec_backend_s3.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/storage_spec_backend_s3.go#L34) Endpoint specifies the S3 API-compatible endpoint which implements storage Required @@ -93,7 +93,7 @@ Required ### .spec.backend.s3.region -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/storage_spec_backend_s3.go#L49) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/storage_spec_backend_s3.go#L49) Region defines the availability zone name. @@ -103,7 +103,7 @@ Default Value: `""` ### .spec.bucketName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/storage_spec.go#L30) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/storage_spec.go#L30) BucketName specifies the name of the bucket Required @@ -112,7 +112,7 @@ Required ### .spec.bucketPath -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/storage_spec.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/storage_spec.go#L34) BucketPath specifies the path within the bucket @@ -122,7 +122,7 @@ Default Value: `/` ### .status.conditions -Type: `api.Conditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/storage_status.go#L28) +Type: `api.Conditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/ml/v1beta1/storage_status.go#L28) Conditions specific to the entire storage diff --git a/docs/api/ArangoMember.V1.md b/docs/api/ArangoMember.V1.md index 2d345e64d..6d2197cc6 100644 --- a/docs/api/ArangoMember.V1.md +++ b/docs/api/ArangoMember.V1.md @@ -10,7 +10,7 @@ title: ArangoMember V1 ### .spec.deletion_priority -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/arango_member_spec.go#L48) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/arango_member_spec.go#L48) DeletionPriority define Deletion Priority. Higher value means higher priority. Default is 0. @@ -20,7 +20,7 @@ Example: set 1 for Coordinator which should be deleted first and scale down coor ### .spec.deploymentUID -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/arango_member_spec.go#L37) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/arango_member_spec.go#L37) DeploymentUID define Deployment UID. @@ -28,7 +28,7 @@ DeploymentUID define Deployment UID. ### .spec.group -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/arango_member_spec.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/arango_member_spec.go#L32) Group define Member Groups. @@ -36,13 +36,13 @@ Group define Member Groups. ### .spec.id -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/arango_member_spec.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/arango_member_spec.go#L34) *** ### .spec.overrides.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/arango_member_spec_overrides.go#L38) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/arango_member_spec_overrides.go#L38) Resources holds resource requests & limits. Overrides template provided on the group level. @@ -53,7 +53,7 @@ Links: ### .spec.overrides.volumeClaimTemplate -Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/arango_member_spec_overrides.go#L33) +Type: `core.PersistentVolumeClaim` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/arango_member_spec_overrides.go#L33) VolumeClaimTemplate specifies a template for volume claims. Overrides template provided on the group level. @@ -64,7 +64,7 @@ Links: ### .spec.template.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/arango_member_pod_template.go#L60) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/arango_member_pod_template.go#L60) Checksum keep the Pod Spec Checksum (with ignored fields). @@ -72,7 +72,7 @@ Checksum keep the Pod Spec Checksum (with ignored fields). ### .spec.template.endpoint -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/arango_member_pod_template.go#L63) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/arango_member_pod_template.go#L63) > [!WARNING] > ***DEPRECATED*** @@ -83,7 +83,7 @@ Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2 ### .spec.template.podSpec -Type: `core.PodTemplateSpec` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/arango_member_pod_template.go#L54) +Type: `core.PodTemplateSpec` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/arango_member_pod_template.go#L54) PodSpec specifies the Pod Spec used for this Member. @@ -94,7 +94,7 @@ Links: ### .spec.template.podSpecChecksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/arango_member_pod_template.go#L57) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/deployment/v1/arango_member_pod_template.go#L57) PodSpecChecksum keep the Pod Spec Checksum (without ignored fields). diff --git a/docs/api/ArangoPlatformChart.V1Alpha1.md b/docs/api/ArangoPlatformChart.V1Alpha1.md new file mode 100644 index 000000000..3d8b68c3d --- /dev/null +++ b/docs/api/ArangoPlatformChart.V1Alpha1.md @@ -0,0 +1,14 @@ +--- +layout: page +parent: CRD reference +title: ArangoPlatformChart V1Alpha1 +--- + +# API Reference for ArangoPlatformChart V1Alpha1 + +## Spec + +### .spec.definition + +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/platform/v1alpha1/chart_spec.go#L30) + diff --git a/docs/api/ArangoPlatformStorage.V1Alpha1.md b/docs/api/ArangoPlatformStorage.V1Alpha1.md new file mode 100644 index 000000000..35383abbf --- /dev/null +++ b/docs/api/ArangoPlatformStorage.V1Alpha1.md @@ -0,0 +1,118 @@ +--- +layout: page +parent: CRD reference +title: ArangoPlatformStorage V1Alpha1 +--- + +# API Reference for ArangoPlatformStorage V1Alpha1 + +## Spec + +### .spec.backend.s3.allowInsecure + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/platform/v1alpha1/storage_spec_backend_s3.go#L46) + +AllowInsecure if set to true, the Endpoint certificates won't be checked + +Default Value: `false` + +*** + +### .spec.backend.s3.bucketName + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/platform/v1alpha1/storage_spec_backend_s3.go#L34) + +BucketName specifies the name of the bucket +Required + +*** + +### .spec.backend.s3.bucketPath + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/platform/v1alpha1/storage_spec_backend_s3.go#L37) + +BucketPath specifies the Prefix within the bucket + +*** + +### .spec.backend.s3.caSecret.checksum + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) + +UID keeps the information about object Checksum + +*** + +### .spec.backend.s3.caSecret.name + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) + +Name of the object + +*** + +### .spec.backend.s3.caSecret.namespace + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) + +Namespace of the object. Should default to the namespace of the parent object + +*** + +### .spec.backend.s3.caSecret.uid + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) + +UID keeps the information about object UID + +*** + +### .spec.backend.s3.credentialsSecret.checksum + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) + +UID keeps the information about object Checksum + +*** + +### .spec.backend.s3.credentialsSecret.name + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) + +Name of the object + +*** + +### .spec.backend.s3.credentialsSecret.namespace + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) + +Namespace of the object. Should default to the namespace of the parent object + +*** + +### .spec.backend.s3.credentialsSecret.uid + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) + +UID keeps the information about object UID + +*** + +### .spec.backend.s3.endpoint + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/platform/v1alpha1/storage_spec_backend_s3.go#L40) + +Endpoint specifies the S3 API-compatible endpoint which implements storage +Required + +*** + +### .spec.backend.s3.region + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/platform/v1alpha1/storage_spec_backend_s3.go#L55) + +Region defines the availability zone name. + +Default Value: `""` + diff --git a/docs/api/ArangoProfile.V1Alpha1.md b/docs/api/ArangoProfile.V1Alpha1.md index b2b3d2a4d..03b35be01 100644 --- a/docs/api/ArangoProfile.V1Alpha1.md +++ b/docs/api/ArangoProfile.V1Alpha1.md @@ -10,7 +10,7 @@ title: ArangoProfile V1Alpha1 ### .spec.selectors.label -Type: `meta.LabelSelector` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/profile_selectors.go#L32) +Type: `meta.LabelSelector` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/profile_selectors.go#L32) Label keeps information about label selector @@ -18,7 +18,7 @@ Label keeps information about label selector ### .spec.template.container.all.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -29,7 +29,7 @@ Links: ### .spec.template.container.all.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -40,7 +40,7 @@ Links: ### .spec.template.container.all.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -48,7 +48,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.template.container.containers.\.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L50) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -65,7 +65,7 @@ Links: ### .spec.template.container.containers.\.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L40) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -82,7 +82,7 @@ Links: ### .spec.template.container.containers.\.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -93,7 +93,7 @@ Links: ### .spec.template.container.containers.\.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -104,7 +104,7 @@ Links: ### .spec.template.container.containers.\.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L35) Image define image details @@ -112,7 +112,7 @@ Image define image details ### .spec.template.container.containers.\.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -122,7 +122,7 @@ Default Value: `IfNotPresent` ### .spec.template.container.containers.\.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -130,7 +130,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.template.container.containers.\.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -142,7 +142,7 @@ Links: ### .spec.template.container.containers.\.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -153,7 +153,7 @@ accessible from the network. ### .spec.template.container.containers.\.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -165,7 +165,7 @@ Links: ### .spec.template.container.containers.\.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -176,7 +176,7 @@ Links: ### .spec.template.container.containers.\.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -187,7 +187,7 @@ Links: ### .spec.template.container.containers.\.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -202,7 +202,7 @@ Links: ### .spec.template.container.containers.\.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -210,7 +210,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.template.container.containers.\.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/container/resources/core.go#L55) Container's working directory. If not specified, the container runtime's default will be used, which @@ -220,7 +220,7 @@ might be configured in the container image. ### .spec.template.pod.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -231,7 +231,7 @@ Links: ### .spec.template.pod.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -244,7 +244,7 @@ Links: ### .spec.template.pod.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -252,7 +252,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.template.pod.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -262,7 +262,7 @@ Default Value: `false` ### .spec.template.pod.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -273,7 +273,7 @@ Default Value: `false` ### .spec.template.pod.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -283,7 +283,7 @@ Default Value: `false` ### .spec.template.pod.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -291,7 +291,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.template.pod.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -304,7 +304,7 @@ Links: ### .spec.template.pod.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -315,7 +315,7 @@ Links: ### .spec.template.pod.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -326,7 +326,7 @@ There cannot be more than one managing controller. ### .spec.template.pod.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -337,7 +337,7 @@ Links: ### .spec.template.pod.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -348,7 +348,7 @@ Default Value: `""` ### .spec.template.pod.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -359,7 +359,7 @@ Links: ### .spec.template.pod.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -372,7 +372,7 @@ Default Value: `false` ### .spec.template.pod.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -383,7 +383,7 @@ Links: ### .spec.template.pod.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -394,5 +394,5 @@ Links: ### .spec.template.priority -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1alpha1/profile_template.go#L30) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1alpha1/profile_template.go#L30) diff --git a/docs/api/ArangoProfile.V1Beta1.md b/docs/api/ArangoProfile.V1Beta1.md index 6b9cd3812..c7553dd68 100644 --- a/docs/api/ArangoProfile.V1Beta1.md +++ b/docs/api/ArangoProfile.V1Beta1.md @@ -10,7 +10,7 @@ title: ArangoProfile V1Beta1 ### .spec.selectors.label -Type: `meta.LabelSelector` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/profile_selectors.go#L32) +Type: `meta.LabelSelector` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/profile_selectors.go#L32) Label keeps information about label selector @@ -18,7 +18,7 @@ Label keeps information about label selector ### .spec.template.container.all.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -29,7 +29,7 @@ Links: ### .spec.template.container.all.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -40,7 +40,7 @@ Links: ### .spec.template.container.all.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -48,7 +48,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.template.container.containers.\.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -65,7 +65,7 @@ Links: ### .spec.template.container.containers.\.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -82,7 +82,7 @@ Links: ### .spec.template.container.containers.\.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -93,7 +93,7 @@ Links: ### .spec.template.container.containers.\.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -104,7 +104,7 @@ Links: ### .spec.template.container.containers.\.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) Image define image details @@ -112,7 +112,7 @@ Image define image details ### .spec.template.container.containers.\.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -122,7 +122,7 @@ Default Value: `IfNotPresent` ### .spec.template.container.containers.\.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -130,7 +130,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.template.container.containers.\.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -142,7 +142,7 @@ Links: ### .spec.template.container.containers.\.method -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) Method defines the merge method @@ -154,7 +154,7 @@ Possible Values: ### .spec.template.container.containers.\.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -165,7 +165,7 @@ accessible from the network. ### .spec.template.container.containers.\.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -177,7 +177,7 @@ Links: ### .spec.template.container.containers.\.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -188,7 +188,7 @@ Links: ### .spec.template.container.containers.\.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -199,7 +199,7 @@ Links: ### .spec.template.container.containers.\.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -214,7 +214,7 @@ Links: ### .spec.template.container.containers.\.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -222,7 +222,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.template.container.containers.\.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) Container's working directory. If not specified, the container runtime's default will be used, which @@ -232,7 +232,7 @@ might be configured in the container image. ### .spec.template.pod.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -243,7 +243,7 @@ Links: ### .spec.template.pod.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -256,7 +256,7 @@ Links: ### .spec.template.pod.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -264,7 +264,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.template.pod.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -274,7 +274,7 @@ Default Value: `false` ### .spec.template.pod.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -285,7 +285,7 @@ Default Value: `false` ### .spec.template.pod.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -295,7 +295,7 @@ Default Value: `false` ### .spec.template.pod.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -303,7 +303,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.template.pod.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -316,7 +316,7 @@ Links: ### .spec.template.pod.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -327,7 +327,7 @@ Links: ### .spec.template.pod.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -338,7 +338,7 @@ There cannot be more than one managing controller. ### .spec.template.pod.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -349,7 +349,7 @@ Links: ### .spec.template.pod.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -360,7 +360,7 @@ Default Value: `""` ### .spec.template.pod.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -371,7 +371,7 @@ Links: ### .spec.template.pod.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -384,7 +384,7 @@ Default Value: `false` ### .spec.template.pod.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -395,7 +395,7 @@ Links: ### .spec.template.pod.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -406,5 +406,8 @@ Links: ### .spec.template.priority -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/profile_template.go#L32) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/profile_template.go#L34) + +Priority defines Priority of the Profile. Higher value means Profile will get applied first. +If Priority across Profiles is same, Profiles are also sorted by name. diff --git a/docs/api/ArangoRoute.V1Alpha1.md b/docs/api/ArangoRoute.V1Alpha1.md index a2398a1e7..e38c72506 100644 --- a/docs/api/ArangoRoute.V1Alpha1.md +++ b/docs/api/ArangoRoute.V1Alpha1.md @@ -10,7 +10,7 @@ title: ArangoRoute V1Alpha1 ### .spec.deployment -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec.go#L27) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_spec.go#L27) Deployment specifies the ArangoDeployment object name @@ -18,7 +18,7 @@ Deployment specifies the ArangoDeployment object name ### .spec.destination.authentication.passMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination_authentication.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_spec_destination_authentication.go#L32) PassMode define authorization details pass mode when authorization was successful @@ -31,7 +31,7 @@ Possible Values: ### .spec.destination.authentication.type -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination_authentication.go#L37) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_spec_destination_authentication.go#L37) Type of the authentication @@ -43,7 +43,7 @@ Possible Values: ### .spec.destination.endpoints.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -51,7 +51,7 @@ UID keeps the information about object Checksum ### .spec.destination.endpoints.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -59,7 +59,7 @@ Name of the object ### .spec.destination.endpoints.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -67,7 +67,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .spec.destination.endpoints.port -Type: `intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination_endpoint.go#L36) +Type: `intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_spec_destination_endpoint.go#L36) Port defines Port or Port Name used as destination @@ -75,7 +75,7 @@ Port defines Port or Port Name used as destination ### .spec.destination.endpoints.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -83,23 +83,39 @@ UID keeps the information about object UID ### .spec.destination.path -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_spec_destination.go#L51) Path defines service path used for overrides *** +### .spec.destination.protocol + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_spec_destination.go#L45) + +Protocol defines http protocol used for the route + +Possible Values: +* `"http1"` (default) - HTTP 1.1 Protocol +* `"http2"` - HTTP 2 Protocol + +*** + ### .spec.destination.schema -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination.go#L33) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_spec_destination.go#L40) Schema defines HTTP/S schema used for connection +Possible Values: +* `"http"` (default) - HTTP Connection +* `"https"` - HTTPS Connection (HTTP with TLS) + *** ### .spec.destination.service.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -107,7 +123,7 @@ UID keeps the information about object Checksum ### .spec.destination.service.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -115,7 +131,7 @@ Name of the object ### .spec.destination.service.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -123,7 +139,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .spec.destination.service.port -Type: `intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination_service.go#L35) +Type: `intstr.IntOrString` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_spec_destination_service.go#L35) Port defines Port or Port Name used as destination @@ -131,23 +147,50 @@ Port defines Port or Port Name used as destination ### .spec.destination.service.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID *** +### .spec.destination.timeout + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_spec_destination.go#L57) + +Timeout specify the upstream request timeout + +*** + ### .spec.destination.tls.insecure -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination_tls.go#L25) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_spec_destination_tls.go#L25) Insecure allows Insecure traffic *** +### .spec.options.upgrade\[int\].enabled + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go#L50) + +Enabled defines if upgrade option is enabled + +*** + +### .spec.options.upgrade\[int\].type + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go#L47) + +Type defines type of the Upgrade + +Possible Values: +* `"websocket"` (default) - HTTP WebSocket Upgrade type + +*** + ### .spec.route.path -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_route.go#L29) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_spec_route.go#L29) Path specifies the Path route @@ -155,7 +198,7 @@ Path specifies the Path route ### .status.conditions -Type: `api.Conditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status.go#L31) +Type: `api.Conditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_status.go#L31) Conditions specific to the entire extension @@ -163,7 +206,7 @@ Conditions specific to the entire extension ### .status.deployment.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -171,7 +214,7 @@ UID keeps the information about object Checksum ### .status.deployment.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -179,7 +222,7 @@ Name of the object ### .status.deployment.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -187,7 +230,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.deployment.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -195,39 +238,74 @@ UID keeps the information about object UID ### .status.target.authentication.passMode -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target_authentication.go#L27) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_status_target_authentication.go#L27) *** ### .status.target.authentication.type -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target_authentication.go#L26) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_status_target_authentication.go#L26) *** ### .status.target.destinations\[int\].host -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target_destination.go#L38) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_status_target_destination.go#L38) *** ### .status.target.destinations\[int\].port -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target_destination.go#L39) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_status_target_destination.go#L39) + +*** + +### .status.target.options.upgrade\[int\].enabled + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_status_target_options_upgrade.go#L43) + +Enabled defines if upgrade option is enabled + +*** + +### .status.target.options.upgrade\[int\].type + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_status_target_options_upgrade.go#L40) + +Type defines type of the Upgrade + +Possible Values: +* `"websocket"` (default) - HTTP WebSocket Upgrade type *** ### .status.target.path -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target.go#L43) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_status_target.go#L51) Path specifies request path override *** -### .status.target.TLS.insecure +### .status.target.protocol + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_status_target.go#L42) + +Protocol defines http protocol used for the route + +*** + +### .status.target.timeout + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_status_target.go#L54) + +Timeout specify the upstream request timeout + +*** + +### .status.target.tls.insecure -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target_tls.go#L27) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_status_target_tls.go#L27) Insecure allows Insecure traffic @@ -235,7 +313,7 @@ Insecure allows Insecure traffic ### .status.target.type -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/networking/v1alpha1/route_status_target.go#L36) Type define destination type diff --git a/docs/api/GraphAnalyticsEngine.V1Alpha1.md b/docs/api/GraphAnalyticsEngine.V1Alpha1.md index e32df4be5..06010a491 100644 --- a/docs/api/GraphAnalyticsEngine.V1Alpha1.md +++ b/docs/api/GraphAnalyticsEngine.V1Alpha1.md @@ -10,7 +10,7 @@ title: GraphAnalyticsEngine V1Alpha1 ### .spec.deployment.affinity -Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) +Type: `core.Affinity` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L44) Affinity defines scheduling constraints for workload @@ -21,7 +21,7 @@ Links: ### .spec.deployment.annotations -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L45) Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not @@ -34,7 +34,7 @@ Links: ### .spec.deployment.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -51,7 +51,7 @@ Links: ### .spec.deployment.automountServiceAccountToken -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L38) AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. @@ -59,7 +59,7 @@ AutomountServiceAccountToken indicates whether a service account token should be ### .spec.deployment.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -76,7 +76,7 @@ Links: ### .spec.deployment.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -87,7 +87,7 @@ Links: ### .spec.deployment.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -98,7 +98,7 @@ Links: ### .spec.deployment.hostIPC -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L42) HostIPC defines to use the host's ipc namespace. @@ -108,7 +108,7 @@ Default Value: `false` ### .spec.deployment.hostNetwork -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L36) HostNetwork requests Host network for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. @@ -119,7 +119,7 @@ Default Value: `false` ### .spec.deployment.hostPID -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L39) HostPID define to use the host's pid namespace. @@ -129,7 +129,7 @@ Default Value: `false` ### .spec.deployment.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) Image define image details @@ -137,7 +137,7 @@ Image define image details ### .spec.deployment.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -147,7 +147,7 @@ Default Value: `IfNotPresent` ### .spec.deployment.imagePullSecrets -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/image.go#L36) ImagePullSecrets define Secrets used to pull Image from registry @@ -155,7 +155,7 @@ ImagePullSecrets define Secrets used to pull Image from registry ### .spec.deployment.labels -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L39) Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -168,7 +168,7 @@ Links: ### .spec.deployment.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -176,7 +176,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.deployment.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -188,7 +188,7 @@ Links: ### .spec.deployment.method -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) Method defines the merge method @@ -200,7 +200,7 @@ Possible Values: ### .spec.deployment.nodeSelector -Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) +Type: `object` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L39) NodeSelector is a selector that must be true for the workload to fit on a node. @@ -211,7 +211,7 @@ Links: ### .spec.deployment.ownerReferences -Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) +Type: `meta.OwnerReference` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/metadata.go#L52) List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, @@ -222,7 +222,7 @@ There cannot be more than one managing controller. ### .spec.deployment.podSecurityContext -Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) +Type: `core.PodSecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/security.go#L35) PodSecurityContext holds pod-level security attributes and common container settings. @@ -233,7 +233,7 @@ Links: ### .spec.deployment.port -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/analytics/v1alpha1/gae_spec_deployment.go#L50) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/analytics/v1alpha1/gae_spec_deployment.go#L50) Port defines on which port the container will be listening for connections @@ -241,7 +241,7 @@ Port defines on which port the container will be listening for connections ### .spec.deployment.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -252,7 +252,7 @@ accessible from the network. ### .spec.deployment.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -264,7 +264,7 @@ Links: ### .spec.deployment.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -275,7 +275,7 @@ Links: ### .spec.deployment.schedulerName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L54) SchedulerName specifies, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler. @@ -286,7 +286,7 @@ Default Value: `""` ### .spec.deployment.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -297,7 +297,7 @@ Links: ### .spec.deployment.service.type -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/analytics/v1alpha1/gae_spec_deployment_service.go#L38) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/analytics/v1alpha1/gae_spec_deployment_service.go#L38) Type determines how the Service is exposed @@ -315,7 +315,7 @@ Possible Values: ### .spec.deployment.serviceAccountName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/service_account.go#L35) ServiceAccountName is the name of the ServiceAccount to use to run this pod. @@ -326,7 +326,7 @@ Links: ### .spec.deployment.shareProcessNamespace -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/namespace.go#L48) ShareProcessNamespace defines to share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers @@ -339,7 +339,7 @@ Default Value: `false` ### .spec.deployment.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -354,7 +354,7 @@ Links: ### .spec.deployment.tls.altNames -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/tls.go#L28) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/tls.go#L28) AltNames define TLS AltNames used when TLS on the ArangoDB is enabled @@ -362,7 +362,7 @@ AltNames define TLS AltNames used when TLS on the ArangoDB is enabled ### .spec.deployment.tls.enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/tls.go#L25) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/tls.go#L25) Enabled define if TLS Should be enabled. If is not set then default is taken from ArangoDeployment settings @@ -370,7 +370,7 @@ Enabled define if TLS Should be enabled. If is not set then default is taken fro ### .spec.deployment.tolerations -Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) +Type: `[]core.Toleration` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/scheduling.go#L49) Tolerations defines tolerations @@ -381,7 +381,7 @@ Links: ### .spec.deployment.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -389,7 +389,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.deployment.volumes -Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) +Type: `[]core.Volume` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/pod/resources/volumes.go#L36) Volumes keeps list of volumes that can be mounted by containers belonging to the pod. @@ -400,7 +400,7 @@ Links: ### .spec.deployment.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) Container's working directory. If not specified, the container runtime's default will be used, which @@ -410,7 +410,7 @@ might be configured in the container image. ### .spec.deploymentName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/analytics/v1alpha1/gae_spec.go#L31) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/analytics/v1alpha1/gae_spec.go#L31) DeploymentName define deployment name used in the object. Immutable @@ -418,7 +418,7 @@ DeploymentName define deployment name used in the object. Immutable ### .spec.integrationSidecar.args -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L54) Arguments to the entrypoint. The container image's CMD is used if this is not provided. @@ -435,7 +435,7 @@ Links: ### .spec.integrationSidecar.command -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) +Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L44) Entrypoint array. Not executed within a shell. The container image's ENTRYPOINT is used if this is not provided. @@ -452,7 +452,7 @@ Links: ### .spec.integrationSidecar.controllerListenPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/integration/integration.go#L36) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/integration/integration.go#L36) ControllerListenPort defines on which port the sidecar container will be listening for controller requests @@ -462,7 +462,7 @@ Default Value: `9202` ### .spec.integrationSidecar.env -Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) +Type: `core.EnvVar` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L36) Env keeps the information about environment variables provided to the container @@ -473,7 +473,7 @@ Links: ### .spec.integrationSidecar.envFrom -Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) +Type: `core.EnvFromSource` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/environments.go#L41) EnvFrom keeps the information about environment variable sources provided to the container @@ -484,7 +484,7 @@ Links: ### .spec.integrationSidecar.image -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L35) Image define image details @@ -492,7 +492,7 @@ Image define image details ### .spec.integrationSidecar.imagePullPolicy -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/image.go#L39) ImagePullPolicy define Image pull policy @@ -502,7 +502,7 @@ Default Value: `IfNotPresent` ### .spec.integrationSidecar.lifecycle -Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) +Type: `core.Lifecycle` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/lifecycle.go#L35) Lifecycle keeps actions that the management system should take in response to container lifecycle events. @@ -510,7 +510,7 @@ Lifecycle keeps actions that the management system should take in response to co ### .spec.integrationSidecar.listenPort -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/integration/integration.go#L32) +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/integration/integration.go#L32) ListenPort defines on which port the sidecar container will be listening for connections @@ -520,7 +520,7 @@ Default Value: `9201` ### .spec.integrationSidecar.livenessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L37) LivenessProbe keeps configuration of periodic probe of container liveness. Container will be restarted if the probe fails. @@ -532,7 +532,7 @@ Links: ### .spec.integrationSidecar.method -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/policy/merge.go#L32) Method defines the merge method @@ -544,7 +544,7 @@ Possible Values: ### .spec.integrationSidecar.ports -Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) +Type: `[]core.ContainerPort` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/networking.go#L39) Ports contains list of ports to expose from the container. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is @@ -555,7 +555,7 @@ accessible from the network. ### .spec.integrationSidecar.readinessProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L42) ReadinessProbe keeps configuration of periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. @@ -567,7 +567,7 @@ Links: ### .spec.integrationSidecar.resources -Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) +Type: `core.ResourceRequirements` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/resources.go#L37) Resources holds resource requests & limits for container @@ -578,7 +578,7 @@ Links: ### .spec.integrationSidecar.securityContext -Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) +Type: `core.SecurityContext` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/security.go#L35) SecurityContext holds container-level security attributes and common container settings. @@ -589,7 +589,7 @@ Links: ### .spec.integrationSidecar.startupProbe -Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) +Type: `core.Probe` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/probes.go#L50) StartupProbe indicates that the Pod has successfully initialized. If specified, no other probes are executed until this completes successfully. @@ -604,7 +604,7 @@ Links: ### .spec.integrationSidecar.volumeMounts -Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) +Type: `[]core.VolumeMount` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/volume_mounts.go#L35) VolumeMounts keeps list of pod volumes to mount into the container's filesystem. @@ -612,7 +612,7 @@ VolumeMounts keeps list of pod volumes to mount into the container's filesystem. ### .spec.integrationSidecar.workingDir -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/scheduler/v1beta1/container/resources/core.go#L59) Container's working directory. If not specified, the container runtime's default will be used, which @@ -622,7 +622,7 @@ might be configured in the container image. ### .status.arangoDB.deployment.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -630,7 +630,7 @@ UID keeps the information about object Checksum ### .status.arangoDB.deployment.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -638,7 +638,7 @@ Name of the object ### .status.arangoDB.deployment.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -646,7 +646,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.arangoDB.deployment.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -654,7 +654,7 @@ UID keeps the information about object UID ### .status.arangoDB.secret.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -662,7 +662,7 @@ UID keeps the information about object Checksum ### .status.arangoDB.secret.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -670,7 +670,7 @@ Name of the object ### .status.arangoDB.secret.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -678,7 +678,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.arangoDB.secret.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -686,7 +686,7 @@ UID keeps the information about object UID ### .status.arangoDB.tls.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -694,7 +694,7 @@ UID keeps the information about object Checksum ### .status.arangoDB.tls.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -702,7 +702,7 @@ Name of the object ### .status.arangoDB.tls.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -710,7 +710,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.arangoDB.tls.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -718,7 +718,7 @@ UID keeps the information about object UID ### .status.conditions -Type: `api.Conditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/analytics/v1alpha1/gae_status.go#L30) +Type: `api.Conditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/analytics/v1alpha1/gae_status.go#L30) Conditions specific to the entire extension @@ -726,7 +726,7 @@ Conditions specific to the entire extension ### .status.reconciliation.service.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -734,7 +734,7 @@ UID keeps the information about object Checksum ### .status.reconciliation.service.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -742,7 +742,7 @@ Name of the object ### .status.reconciliation.service.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -750,7 +750,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.reconciliation.service.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID @@ -758,7 +758,7 @@ UID keeps the information about object UID ### .status.reconciliation.statefulSet.checksum -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L61) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L61) UID keeps the information about object Checksum @@ -766,7 +766,7 @@ UID keeps the information about object Checksum ### .status.reconciliation.statefulSet.name -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L52) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L52) Name of the object @@ -774,7 +774,7 @@ Name of the object ### .status.reconciliation.statefulSet.namespace -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L55) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L55) Namespace of the object. Should default to the namespace of the parent object @@ -782,7 +782,7 @@ Namespace of the object. Should default to the namespace of the parent object ### .status.reconciliation.statefulSet.uid -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/shared/v1/object.go#L58) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.44/pkg/apis/shared/v1/object.go#L58) UID keeps the information about object UID diff --git a/docs/cli/arangodb_operator.md b/docs/cli/arangodb_operator.md index 390ac513b..074cc3c2b 100644 --- a/docs/cli/arangodb_operator.md +++ b/docs/cli/arangodb_operator.md @@ -15,15 +15,16 @@ Usage: Available Commands: admin Administration operations completion Generate the autocompletion script for the specified shell - crd CRD operations - debug-package Generate debug package for debugging + crd CRD operations + debug-package Generate debug package for debugging exporter features Describe all operator features help Help about any command integration storage - task + task version + webhook Flags: --action.PVCResize.concurrency int Define limit of concurrent PVC Resizes on the cluster (default 32) @@ -41,28 +42,29 @@ Flags: --crd.install Install missing CRD if access is possible (default true) --crd.preserve-unknown-fields stringArray Controls which CRD should have enabled preserve unknown fields in validation schema =. To apply for all, use crd-name 'all'. --crd.validation-schema stringArray Overrides default set of CRDs which should have validation schema enabled =. To apply for all, use crd-name 'all'. - --deployment.feature.agency-poll Enable Agency Poll for Enterprise deployments - Required ArangoDB 3.8.0 or higher (default true) + --deployment.feature.active-failover Support for ActiveFailover mode - Required ArangoDB >= 3.8.0, < 3.12 (default true) + --deployment.feature.agency-poll Enable Agency Poll for Enterprise deployments - Required ArangoDB >= 3.8.0 (default true) --deployment.feature.all Enable ALL Features - --deployment.feature.async-backup-creation Create backups asynchronously to avoid blocking the operator and reaching the timeout - Required ArangoDB 3.8.0 or higher (default true) - --deployment.feature.backup-cleanup Cleanup imported backups if required - Required ArangoDB 3.8.0 or higher - --deployment.feature.deployment-spec-defaults-restore Restore defaults from last accepted state of deployment - Required ArangoDB 3.8.0 or higher (default true) - --deployment.feature.enforced-resign-leadership Enforce ResignLeadership and ensure that Leaders are moved from restarted DBServer - Required ArangoDB 3.8.0 or higher (default true) - --deployment.feature.ephemeral-volumes Enables ephemeral volumes for apps and tmp directory - Required ArangoDB 3.8.0 or higher - --deployment.feature.failover-leadership Support for leadership in fail-over mode - Required ArangoDB 3.8.0 or higher - --deployment.feature.init-containers-copy-resources Copy resources spec to built-in init containers if they are not specified - Required ArangoDB 3.8.0 or higher (default true) - --deployment.feature.init-containers-upscale-resources Copy resources spec to built-in init containers if they are not specified or lower - Required ArangoDB 3.8.0 or higher (default true) - --deployment.feature.local-storage.pass-reclaim-policy [LocalStorage] Pass ReclaimPolicy from StorageClass instead of using hardcoded Retain - Required ArangoDB 3.8.0 or higher - --deployment.feature.local-volume-replacement-check Replace volume for local-storage if volume is unschedulable (ex. node is gone) - Required ArangoDB 3.8.0 or higher - --deployment.feature.random-pod-names Enables generating random pod names - Required ArangoDB 3.8.0 or higher - --deployment.feature.rebalancer-v2 Rebalancer V2 feature - Required ArangoDB 3.10.0 or higher - --deployment.feature.restart-policy-always Allow to restart containers with always restart policy - Required ArangoDB 3.8.0 or higher - --deployment.feature.secured-containers Create server's containers with non root privileges. It enables 'ephemeral-volumes' feature implicitly - Required ArangoDB 3.8.0 or higher - --deployment.feature.sensitive-information-protection Hide sensitive information from metrics and logs - Required ArangoDB 3.8.0 or higher - --deployment.feature.short-pod-names Enable Short Pod Names - Required ArangoDB 3.8.0 or higher - --deployment.feature.timezone-management Enable timezone management for pods - Required ArangoDB 3.8.0 or higher - --deployment.feature.tls-sni TLS SNI Support - Required ArangoDB EE 3.8.0 or higher (default true) - --deployment.feature.upgrade-version-check Enable initContainer with pre version check - Required ArangoDB 3.8.0 or higher (default true) - --deployment.feature.upgrade-version-check-v2 Enable initContainer with pre version check based by Operator - Required ArangoDB 3.8.0 or higher + --deployment.feature.async-backup-creation Create backups asynchronously to avoid blocking the operator and reaching the timeout - Required ArangoDB >= 3.8.0 (default true) + --deployment.feature.backup-cleanup Cleanup imported backups if required - Required ArangoDB >= 3.8.0 + --deployment.feature.deployment-spec-defaults-restore Restore defaults from last accepted state of deployment - Required ArangoDB >= 3.8.0 (default true) + --deployment.feature.enforced-resign-leadership Enforce ResignLeadership and ensure that Leaders are moved from restarted DBServer - Required ArangoDB >= 3.8.0 (default true) + --deployment.feature.ephemeral-volumes Enables ephemeral volumes for apps and tmp directory - Required ArangoDB >= 3.8.0 + --deployment.feature.failover-leadership Support for leadership in fail-over mode - Required ArangoDB >= 3.8.0, < 3.12 + --deployment.feature.init-containers-copy-resources Copy resources spec to built-in init containers if they are not specified - Required ArangoDB >= 3.8.0 (default true) + --deployment.feature.init-containers-upscale-resources Copy resources spec to built-in init containers if they are not specified or lower - Required ArangoDB >= 3.8.0 (default true) + --deployment.feature.local-storage.pass-reclaim-policy [LocalStorage] Pass ReclaimPolicy from StorageClass instead of using hardcoded Retain - Required ArangoDB >= 3.8.0 + --deployment.feature.local-volume-replacement-check Replace volume for local-storage if volume is unschedulable (ex. node is gone) - Required ArangoDB >= 3.8.0 + --deployment.feature.random-pod-names Enables generating random pod names - Required ArangoDB >= 3.8.0 + --deployment.feature.rebalancer-v2 Rebalancer V2 feature - Required ArangoDB >= 3.10.0 + --deployment.feature.restart-policy-always Allow to restart containers with always restart policy - Required ArangoDB >= 3.8.0 + --deployment.feature.secured-containers Create server's containers with non root privileges. It enables 'ephemeral-volumes' feature implicitly - Required ArangoDB >= 3.8.0 + --deployment.feature.sensitive-information-protection Hide sensitive information from metrics and logs - Required ArangoDB >= 3.8.0 + --deployment.feature.short-pod-names Enable Short Pod Names - Required ArangoDB >= 3.8.0 + --deployment.feature.timezone-management Enable timezone management for pods - Required ArangoDB >= 3.8.0 + --deployment.feature.tls-sni TLS SNI Support - Required ArangoDB EE >= 3.8.0 (default true) + --deployment.feature.upgrade-version-check Enable initContainer with pre version check - Required ArangoDB >= 3.8.0 (default true) + --deployment.feature.upgrade-version-check-v2 Enable initContainer with pre version check based by Operator - Required ArangoDB >= 3.8.0 --features-config-map-name string Name of the Feature Map ConfigMap (default "arangodb-operator-feature-config-map") -h, --help help for arangodb_operator --http1.keep-alive If false, disables HTTP keep-alives and will only use the connection to the server for a single HTTP request (default true) @@ -80,7 +82,7 @@ Flags: --kubernetes.max-batch-size int Size of batch during objects read (default 256) --kubernetes.qps float32 Number of queries per second for k8s API (default 15) --log.format string Set log format. Allowed values: 'pretty', 'JSON'. If empty, default format is used (default "pretty") - --log.level stringArray Set log levels in format or =. Possible loggers: action, agency, api-server, assertion, backup-operator, chaos-monkey, crd, deployment, deployment-ci, deployment-reconcile, deployment-replication, deployment-resilience, deployment-resources, deployment-storage, deployment-storage-pc, deployment-storage-service, generic-parent-operator, http, inspector, integration-config-v1, integration-envoy-auth-v3, integrations, k8s-client, kubernetes-informer, monitor, networking-route-operator, operator, operator-arangojob-handler, operator-v2, operator-v2-event, operator-v2-worker, panics, pod_compare, root, root-event-recorder, scheduler-batchjob-operator, scheduler-cronjob-operator, scheduler-deployment-operator, scheduler-pod-operator, scheduler-profile-operator, server, server-authentication (default [info]) + --log.level stringArray Set log levels in format or =. Possible loggers: action, agency, api-server, assertion, backup-operator, chaos-monkey, crd, deployment, deployment-ci, deployment-reconcile, deployment-replication, deployment-resilience, deployment-resources, deployment-storage, deployment-storage-pc, deployment-storage-service, generic-parent-operator, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, integration-storage-v1-s3, integration-storage-v2, integrations, k8s-client, kubernetes-informer, monitor, networking-route-operator, operator, operator-arangojob-handler, operator-v2, operator-v2-event, operator-v2-worker, panics, platform-chart-operator, platform-pod-shutdown, platform-storage-operator, pod_compare, root, root-event-recorder, scheduler-batchjob-operator, scheduler-cronjob-operator, scheduler-deployment-operator, scheduler-pod-operator, scheduler-profile-operator, server, server-authentication, webhook (default [info]) --log.sampling If true, operator will try to minimize duplication of logging events (default true) --memory-limit uint Define memory limit for hard shutdown and the dump of goroutines. Used for testing --metrics.excluded-prefixes stringArray List of the excluded metrics prefixes @@ -92,6 +94,7 @@ Flags: --operator.deployment-replication Enable to run the ArangoDeploymentReplication operator --operator.ml Enable to run the ArangoML operator --operator.networking Enable to run the Networking operator + --operator.platform Enable to run the Platform operator --operator.reconciliation.retry.count int Count of retries during Object Update operations in the Reconciliation loop (default 25) --operator.reconciliation.retry.delay duration Delay between Object Update operations in the Reconciliation loop (default 1s) --operator.scheduler Enable to run the Scheduler operator diff --git a/docs/cli/arangodb_operator_integration.md b/docs/cli/arangodb_operator_integration.md index f0bbe9a5c..810b4aaeb 100644 --- a/docs/cli/arangodb_operator_integration.md +++ b/docs/cli/arangodb_operator_integration.md @@ -18,65 +18,72 @@ Available Commands: help Help about any command Flags: - --health.address string Address to expose health service (Env: HEALTH_ADDRESS) (default "0.0.0.0:9091") - --health.auth.token string Token for health service (when auth service is token) (Env: HEALTH_AUTH_TOKEN) - --health.auth.type string Auth type for health service (Env: HEALTH_AUTH_TYPE) (default "None") - --health.shutdown.enabled Determines if shutdown service should be enabled and exposed (Env: HEALTH_SHUTDOWN_ENABLED) (default true) - --health.tls.keyfile string Path to the keyfile (Env: HEALTH_TLS_KEYFILE) - -h, --help help for arangodb_operator_integration - --integration.authentication.v1 Enable AuthenticationV1 Integration Service (Env: INTEGRATION_AUTHENTICATION_V1) - --integration.authentication.v1.enabled Defines if Authentication is enabled (Env: INTEGRATION_AUTHENTICATION_V1_ENABLED) (default true) - --integration.authentication.v1.external Defones if External access to service authentication.v1 is enabled (Env: INTEGRATION_AUTHENTICATION_V1_EXTERNAL) - --integration.authentication.v1.internal Defones if Internal access to service authentication.v1 is enabled (Env: INTEGRATION_AUTHENTICATION_V1_INTERNAL) (default true) - --integration.authentication.v1.path string Path to the JWT Folder (Env: INTEGRATION_AUTHENTICATION_V1_PATH) - --integration.authentication.v1.token.allowed strings Allowed users for the Token (Env: INTEGRATION_AUTHENTICATION_V1_TOKEN_ALLOWED) - --integration.authentication.v1.token.max-size uint16 Max Token max size in bytes (Env: INTEGRATION_AUTHENTICATION_V1_TOKEN_MAX_SIZE) (default 64) - --integration.authentication.v1.token.ttl.default duration Default Token TTL (Env: INTEGRATION_AUTHENTICATION_V1_TOKEN_TTL_DEFAULT) (default 1h0m0s) - --integration.authentication.v1.token.ttl.max duration Max Token TTL (Env: INTEGRATION_AUTHENTICATION_V1_TOKEN_TTL_MAX) (default 1h0m0s) - --integration.authentication.v1.token.ttl.min duration Min Token TTL (Env: INTEGRATION_AUTHENTICATION_V1_TOKEN_TTL_MIN) (default 1m0s) - --integration.authentication.v1.token.user string Default user of the Token (Env: INTEGRATION_AUTHENTICATION_V1_TOKEN_USER) (default "root") - --integration.authentication.v1.ttl duration TTL of the JWT cache (Env: INTEGRATION_AUTHENTICATION_V1_TTL) (default 15s) - --integration.authorization.v0 Enable AuthorizationV0 Integration Service (Env: INTEGRATION_AUTHORIZATION_V0) - --integration.authorization.v0.external Defones if External access to service authorization.v0 is enabled (Env: INTEGRATION_AUTHORIZATION_V0_EXTERNAL) - --integration.authorization.v0.internal Defones if Internal access to service authorization.v0 is enabled (Env: INTEGRATION_AUTHORIZATION_V0_INTERNAL) (default true) - --integration.config.v1 Enable ConfigV1 Integration Service (Env: INTEGRATION_CONFIG_V1) - --integration.config.v1.external Defones if External access to service config.v1 is enabled (Env: INTEGRATION_CONFIG_V1_EXTERNAL) - --integration.config.v1.internal Defones if Internal access to service config.v1 is enabled (Env: INTEGRATION_CONFIG_V1_INTERNAL) (default true) - --integration.config.v1.module strings Module in the reference = (Env: INTEGRATION_CONFIG_V1_MODULE) - --integration.envoy.auth.v3 Enable EnvoyAuthV3 Integration Service (Env: INTEGRATION_ENVOY_AUTH_V3) - --integration.envoy.auth.v3.external Defones if External access to service envoy.auth.v3 is enabled (Env: INTEGRATION_ENVOY_AUTH_V3_EXTERNAL) - --integration.envoy.auth.v3.internal Defones if Internal access to service envoy.auth.v3 is enabled (Env: INTEGRATION_ENVOY_AUTH_V3_INTERNAL) (default true) - --integration.scheduler.v1 SchedulerV1 Integration (Env: INTEGRATION_SCHEDULER_V1) - --integration.scheduler.v1.external Defones if External access to service scheduler.v1 is enabled (Env: INTEGRATION_SCHEDULER_V1_EXTERNAL) - --integration.scheduler.v1.internal Defones if Internal access to service scheduler.v1 is enabled (Env: INTEGRATION_SCHEDULER_V1_INTERNAL) (default true) - --integration.scheduler.v1.namespace string Kubernetes Namespace (Env: INTEGRATION_SCHEDULER_V1_NAMESPACE) (default "default") - --integration.scheduler.v1.verify-access Verify the CRD Access (Env: INTEGRATION_SCHEDULER_V1_VERIFY_ACCESS) (default true) - --integration.shutdown.v1 ShutdownV1 Handler (Env: INTEGRATION_SHUTDOWN_V1) - --integration.shutdown.v1.external Defones if External access to service shutdown.v1 is enabled (Env: INTEGRATION_SHUTDOWN_V1_EXTERNAL) - --integration.shutdown.v1.internal Defones if Internal access to service shutdown.v1 is enabled (Env: INTEGRATION_SHUTDOWN_V1_INTERNAL) (default true) - --integration.storage.v1 StorageBucket Integration (Env: INTEGRATION_STORAGE_V1) - --integration.storage.v1.external Defones if External access to service storage.v1 is enabled (Env: INTEGRATION_STORAGE_V1_EXTERNAL) - --integration.storage.v1.internal Defones if Internal access to service storage.v1 is enabled (Env: INTEGRATION_STORAGE_V1_INTERNAL) (default true) - --integration.storage.v1.s3.access-key string Path to file containing S3 AccessKey (Env: INTEGRATION_STORAGE_V1_S3_ACCESS_KEY) - --integration.storage.v1.s3.allow-insecure If set to true, the Endpoint certificates won't be checked (Env: INTEGRATION_STORAGE_V1_S3_ALLOW_INSECURE) - --integration.storage.v1.s3.bucket string Bucket name (Env: INTEGRATION_STORAGE_V1_S3_BUCKET) - --integration.storage.v1.s3.ca-crt string Path to file containing CA certificate to validate endpoint connection (Env: INTEGRATION_STORAGE_V1_S3_CA_CRT) - --integration.storage.v1.s3.ca-key string Path to file containing keyfile to validate endpoint connection (Env: INTEGRATION_STORAGE_V1_S3_CA_KEY) - --integration.storage.v1.s3.disable-ssl If set to true, the SSL won't be used when connecting to Endpoint (Env: INTEGRATION_STORAGE_V1_S3_DISABLE_SSL) - --integration.storage.v1.s3.endpoint string Endpoint of S3 API implementation (Env: INTEGRATION_STORAGE_V1_S3_ENDPOINT) - --integration.storage.v1.s3.region string Region (Env: INTEGRATION_STORAGE_V1_S3_REGION) - --integration.storage.v1.s3.secret-key string Path to file containing S3 SecretKey (Env: INTEGRATION_STORAGE_V1_S3_SECRET_KEY) - --integration.storage.v1.type string Type of the Storage Integration (Env: INTEGRATION_STORAGE_V1_TYPE) (default "s3") - --services.address string Address to expose internal services (Env: SERVICES_ADDRESS) (default "127.0.0.1:9092") - --services.auth.token string Token for internal service (when auth service is token) (Env: SERVICES_AUTH_TOKEN) - --services.auth.type string Auth type for internal service (Env: SERVICES_AUTH_TYPE) (default "None") - --services.enabled Defines if internal access is enabled (Env: SERVICES_ENABLED) (default true) - --services.external.address string Address to expose external services (Env: SERVICES_EXTERNAL_ADDRESS) (default "0.0.0.0:9093") - --services.external.auth.token string Token for external service (when auth service is token) (Env: SERVICES_EXTERNAL_AUTH_TOKEN) - --services.external.auth.type string Auth type for external service (Env: SERVICES_EXTERNAL_AUTH_TYPE) (default "None") - --services.external.enabled Defines if external access is enabled (Env: SERVICES_EXTERNAL_ENABLED) - --services.external.tls.keyfile string Path to the keyfile (Env: SERVICES_EXTERNAL_TLS_KEYFILE) - --services.tls.keyfile string Path to the keyfile (Env: SERVICES_TLS_KEYFILE) + --health.address string Address to expose health service (Env: HEALTH_ADDRESS) (default "0.0.0.0:9091") + --health.auth.token string Token for health service (when auth service is token) (Env: HEALTH_AUTH_TOKEN) + --health.auth.type string Auth type for health service (Env: HEALTH_AUTH_TYPE) (default "None") + --health.shutdown.enabled Determines if shutdown service should be enabled and exposed (Env: HEALTH_SHUTDOWN_ENABLED) (default true) + --health.tls.keyfile string Path to the keyfile (Env: HEALTH_TLS_KEYFILE) + -h, --help help for arangodb_operator_integration + --integration.authentication.v1 Enable AuthenticationV1 Integration Service (Env: INTEGRATION_AUTHENTICATION_V1) + --integration.authentication.v1.enabled Defines if Authentication is enabled (Env: INTEGRATION_AUTHENTICATION_V1_ENABLED) (default true) + --integration.authentication.v1.external Defones if External access to service authentication.v1 is enabled (Env: INTEGRATION_AUTHENTICATION_V1_EXTERNAL) + --integration.authentication.v1.internal Defones if Internal access to service authentication.v1 is enabled (Env: INTEGRATION_AUTHENTICATION_V1_INTERNAL) (default true) + --integration.authentication.v1.path string Path to the JWT Folder (Env: INTEGRATION_AUTHENTICATION_V1_PATH) + --integration.authentication.v1.token.allowed strings Allowed users for the Token (Env: INTEGRATION_AUTHENTICATION_V1_TOKEN_ALLOWED) + --integration.authentication.v1.token.max-size uint16 Max Token max size in bytes (Env: INTEGRATION_AUTHENTICATION_V1_TOKEN_MAX_SIZE) (default 64) + --integration.authentication.v1.token.ttl.default duration Default Token TTL (Env: INTEGRATION_AUTHENTICATION_V1_TOKEN_TTL_DEFAULT) (default 1h0m0s) + --integration.authentication.v1.token.ttl.max duration Max Token TTL (Env: INTEGRATION_AUTHENTICATION_V1_TOKEN_TTL_MAX) (default 1h0m0s) + --integration.authentication.v1.token.ttl.min duration Min Token TTL (Env: INTEGRATION_AUTHENTICATION_V1_TOKEN_TTL_MIN) (default 1m0s) + --integration.authentication.v1.token.user string Default user of the Token (Env: INTEGRATION_AUTHENTICATION_V1_TOKEN_USER) (default "root") + --integration.authentication.v1.ttl duration TTL of the JWT cache (Env: INTEGRATION_AUTHENTICATION_V1_TTL) (default 15s) + --integration.authorization.v0 Enable AuthorizationV0 Integration Service (Env: INTEGRATION_AUTHORIZATION_V0) + --integration.authorization.v0.external Defones if External access to service authorization.v0 is enabled (Env: INTEGRATION_AUTHORIZATION_V0_EXTERNAL) + --integration.authorization.v0.internal Defones if Internal access to service authorization.v0 is enabled (Env: INTEGRATION_AUTHORIZATION_V0_INTERNAL) (default true) + --integration.config.v1 Enable ConfigV1 Integration Service (Env: INTEGRATION_CONFIG_V1) + --integration.config.v1.external Defones if External access to service config.v1 is enabled (Env: INTEGRATION_CONFIG_V1_EXTERNAL) + --integration.config.v1.internal Defones if Internal access to service config.v1 is enabled (Env: INTEGRATION_CONFIG_V1_INTERNAL) (default true) + --integration.config.v1.module strings Module in the reference = (Env: INTEGRATION_CONFIG_V1_MODULE) + --integration.envoy.auth.v3 Enable EnvoyAuthV3 Integration Service (Env: INTEGRATION_ENVOY_AUTH_V3) + --integration.envoy.auth.v3.external Defones if External access to service envoy.auth.v3 is enabled (Env: INTEGRATION_ENVOY_AUTH_V3_EXTERNAL) + --integration.envoy.auth.v3.internal Defones if Internal access to service envoy.auth.v3 is enabled (Env: INTEGRATION_ENVOY_AUTH_V3_INTERNAL) (default true) + --integration.scheduler.v1 SchedulerV1 Integration (Env: INTEGRATION_SCHEDULER_V1) + --integration.scheduler.v1.external Defones if External access to service scheduler.v1 is enabled (Env: INTEGRATION_SCHEDULER_V1_EXTERNAL) + --integration.scheduler.v1.internal Defones if Internal access to service scheduler.v1 is enabled (Env: INTEGRATION_SCHEDULER_V1_INTERNAL) (default true) + --integration.scheduler.v1.namespace string Kubernetes Namespace (Env: INTEGRATION_SCHEDULER_V1_NAMESPACE) (default "default") + --integration.scheduler.v1.verify-access Verify the CRD Access (Env: INTEGRATION_SCHEDULER_V1_VERIFY_ACCESS) (default true) + --integration.scheduler.v2 SchedulerV2 Integration (Env: INTEGRATION_SCHEDULER_V2) + --integration.scheduler.v2.deployment string ArangoDeployment Name (Env: INTEGRATION_SCHEDULER_V2_DEPLOYMENT) + --integration.scheduler.v2.driver string Helm Driver (Env: INTEGRATION_SCHEDULER_V2_DRIVER) (default "secret") + --integration.scheduler.v2.external Defones if External access to service scheduler.v2 is enabled (Env: INTEGRATION_SCHEDULER_V2_EXTERNAL) + --integration.scheduler.v2.internal Defones if Internal access to service scheduler.v2 is enabled (Env: INTEGRATION_SCHEDULER_V2_INTERNAL) (default true) + --integration.scheduler.v2.namespace string Kubernetes Namespace (Env: INTEGRATION_SCHEDULER_V2_NAMESPACE) (default "default") + --integration.shutdown.v1 ShutdownV1 Handler (Env: INTEGRATION_SHUTDOWN_V1) + --integration.shutdown.v1.external Defones if External access to service shutdown.v1 is enabled (Env: INTEGRATION_SHUTDOWN_V1_EXTERNAL) + --integration.shutdown.v1.internal Defones if Internal access to service shutdown.v1 is enabled (Env: INTEGRATION_SHUTDOWN_V1_INTERNAL) (default true) + --integration.storage.v2 StorageBucket V2 Integration (Env: INTEGRATION_STORAGE_V2) + --integration.storage.v2.external Defones if External access to service storage.v2 is enabled (Env: INTEGRATION_STORAGE_V2_EXTERNAL) + --integration.storage.v2.internal Defones if Internal access to service storage.v2 is enabled (Env: INTEGRATION_STORAGE_V2_INTERNAL) (default true) + --integration.storage.v2.s3.allow-insecure If set to true, the Endpoint certificates won't be checked (Env: INTEGRATION_STORAGE_V2_S3_ALLOW_INSECURE) + --integration.storage.v2.s3.bucket.name string Bucket name (Env: INTEGRATION_STORAGE_V2_S3_BUCKET_NAME) + --integration.storage.v2.s3.bucket.prefix string Bucket Prefix (Env: INTEGRATION_STORAGE_V2_S3_BUCKET_PREFIX) + --integration.storage.v2.s3.ca strings Path to file containing CA certificate to validate endpoint connection (Env: INTEGRATION_STORAGE_V2_S3_CA) + --integration.storage.v2.s3.disable-ssl If set to true, the SSL won't be used when connecting to Endpoint (Env: INTEGRATION_STORAGE_V2_S3_DISABLE_SSL) + --integration.storage.v2.s3.endpoint string Endpoint of S3 API implementation (Env: INTEGRATION_STORAGE_V2_S3_ENDPOINT) + --integration.storage.v2.s3.provider.file.access-key string Path to file containing S3 AccessKey (Env: INTEGRATION_STORAGE_V2_S3_PROVIDER_FILE_ACCESS_KEY) + --integration.storage.v2.s3.provider.file.secret-key string Path to file containing S3 SecretKey (Env: INTEGRATION_STORAGE_V2_S3_PROVIDER_FILE_SECRET_KEY) + --integration.storage.v2.s3.provider.type string S3 Credentials Provider type (Env: INTEGRATION_STORAGE_V2_S3_PROVIDER_TYPE) (default "file") + --integration.storage.v2.s3.region string Region (Env: INTEGRATION_STORAGE_V2_S3_REGION) + --integration.storage.v2.type string Type of the Storage Integration (Env: INTEGRATION_STORAGE_V2_TYPE) (default "s3") + --services.address string Address to expose internal services (Env: SERVICES_ADDRESS) (default "127.0.0.1:9092") + --services.auth.token string Token for internal service (when auth service is token) (Env: SERVICES_AUTH_TOKEN) + --services.auth.type string Auth type for internal service (Env: SERVICES_AUTH_TYPE) (default "None") + --services.enabled Defines if internal access is enabled (Env: SERVICES_ENABLED) (default true) + --services.external.address string Address to expose external services (Env: SERVICES_EXTERNAL_ADDRESS) (default "0.0.0.0:9093") + --services.external.auth.token string Token for external service (when auth service is token) (Env: SERVICES_EXTERNAL_AUTH_TOKEN) + --services.external.auth.type string Auth type for external service (Env: SERVICES_EXTERNAL_AUTH_TYPE) (default "None") + --services.external.enabled Defines if external access is enabled (Env: SERVICES_EXTERNAL_ENABLED) + --services.external.tls.keyfile string Path to the keyfile (Env: SERVICES_EXTERNAL_TLS_KEYFILE) + --services.tls.keyfile string Path to the keyfile (Env: SERVICES_TLS_KEYFILE) Use "arangodb_operator_integration [command] --help" for more information about a command. ``` diff --git a/docs/cli/arangodb_operator_ops.md b/docs/cli/arangodb_operator_ops.md index 95041fc8e..4ad48d8e2 100644 --- a/docs/cli/arangodb_operator_ops.md +++ b/docs/cli/arangodb_operator_ops.md @@ -13,10 +13,11 @@ Usage: arangodb_operator_ops [command] Available Commands: - completion Generate the autocompletion script for the specified shell - crd CRD operations - help Help about any command - task + completion Generate the autocompletion script for the specified shell + crd CRD operations + debug-package Generate debug package for debugging + help Help about any command + task Flags: -h, --help help for arangodb_operator_ops @@ -86,3 +87,34 @@ Global Flags: --crd.validation-schema stringArray Controls which CRD should have validation schema =. ``` [END_INJECT]: # (arangodb_operator_ops_cmd_crd_generate) + +# ArangoDB Operator Ops CRD Install Subcommand + +[START_INJECT]: # (arangodb_operator_ops_cmd_debug_package) +``` +Generate debug package for debugging + +Usage: + arangodb_operator_ops debug-package [flags] + +Flags: + --generator.agency-dump Define if generator agency-dump is enabled (default true) + --generator.analytics Define if generator analytics is enabled (default true) + --generator.backupBackup Define if generator backupBackup is enabled (default true) + --generator.deployments Define if generator deployments is enabled (default true) + --generator.kubernetes-configmaps Define if generator kubernetes-configmaps is enabled (default true) + --generator.kubernetes-events Define if generator kubernetes-events is enabled (default true) + --generator.kubernetes-pods Define if generator kubernetes-pods is enabled (default true) + --generator.kubernetes-secrets Define if generator kubernetes-secrets is enabled (default true) + --generator.kubernetes-services Define if generator kubernetes-services is enabled (default true) + --generator.ml Define if generator ml is enabled (default true) + --generator.networking Define if generator networking is enabled (default true) + --generator.platform Define if generator platform is enabled (default true) + --generator.scheduler Define if generator scheduler is enabled (default true) + -h, --help help for debug-package + --hide-sensitive-data Hide sensitive data (default true) + -n, --namespace string Kubernetes namespace (default "default") + -o, --output - Output of the result gz file. If set to - then stdout is used (default "out.tar.gz") + --pod-logs Collect pod logs (default true) +``` +[END_INJECT]: # (arangodb_operator_ops_cmd_debug_package) diff --git a/docs/features/README.md b/docs/features/README.md index c59b17ffb..8fc2c97d4 100644 --- a/docs/features/README.md +++ b/docs/features/README.md @@ -6,47 +6,48 @@ title: List of all features ## List of Community Edition features -| Feature | Operator Version | Introduced | ArangoDB Version | ArangoDB Edition | State | Enabled | Flag | Remarks | -|:----------------------------------------------------------------|:-----------------|:-----------|:-----------------|:----------------------|:-------------|:--------|:-------------------------------------------------------|:------------------------------------------------------------------------------------------| -| Gateway | 1.2.43 | 1.2.43 | >= 3.8.0 | Community, Enterprise | Alpha | True | N/A | Support for ArangoDeployment Gateway Group | -| Cleanup Imported Backups | 1.2.41 | 1.2.41 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.backup-cleanup | Cleanup backups created outside of the Operator and imported into Kubernetes ArangoBackup | -| Upscale resources spec in init containers | 1.2.36 | 1.2.36 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.init-containers-upscale-resources | Upscale resources spec to built-in init containers if they are not specified or lower | -| Create backups asynchronously | 1.2.35 | 1.2.41 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.async-backup-creation | Create backups asynchronously to avoid blocking the operator and reaching the timeout | -| Enforced ResignLeadership | 1.2.34 | 1.2.34 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.enforced-resign-leadership | Enforce ResignLeadership and ensure that Leaders are moved from restarted DBServer | -| Copy resources spec to init containers | 1.2.33 | 1.2.33 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.init-containers-copy-resources | Copy resources spec to built-in init containers if they are not specified | -| [Rebalancer V2](rebalancer_v2.md) | 1.2.31 | 1.2.31 | >= 3.10.0 | Community, Enterprise | Alpha | False | --deployment.feature.rebalancer-v2 | N/A | -| [Secured containers](secured_containers.md) | 1.2.31 | 1.2.31 | >= 3.8.0 | Community, Enterprise | Alpha | False | --deployment.feature.secured-containers | If set to True Operator will run containers in secure mode | -| Version Check V2 | 1.2.31 | 1.2.31 | >= 3.8.0 | Community, Enterprise | Alpha | False | --deployment.feature.upgrade-version-check-V2 | N/A | -| [Operator Ephemeral Volumes](ephemeral_volumes.md) | 1.2.31 | 1.2.2 | >= 3.8.0 | Community, Enterprise | Beta | False | --deployment.feature.ephemeral-volumes | N/A | -| [Force Rebuild Out Synced Shards](rebuild_out_synced_shards.md) | 1.2.27 | 1.2.27 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.force-rebuild-out-synced-shards | It should be used only if user is aware of the risks. | -| [Spec Default Restore](deployment_spec_defaults.md) | 1.2.25 | 1.2.21 | >= 3.8.0 | Community, Enterprise | Beta | True | --deployment.feature.deployment-spec-defaults-restore | If set to False Operator will not change ArangoDeployment Spec | -| Version Check | 1.2.23 | 1.1.4 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.upgrade-version-check | N/A | -| [Failover Leader service](failover_leader_service.md) | 1.2.13 | 1.2.13 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.failover-leadership | N/A | -| Graceful Restart | 1.2.5 | 1.0.7 | >= 3.8.0 | Community, Enterprise | Production | True | ---deployment.feature.graceful-shutdown | N/A | -| Optional Graceful Restart | 1.2.0 | 1.2.5 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.optional-graceful-shutdown | N/A | -| Operator Internal Metrics Exporter | 1.2.0 | 1.2.0 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.metrics-exporter | N/A | -| Operator Maintenance Management Support | 1.2.0 | 1.0.7 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.maintenance | N/A | -| Encryption Key Rotation Support | 1.2.0 | 1.0.3 | >= 3.8.0 | Enterprise | NotSupported | False | --deployment.feature.encryption-rotation | N/A | -| TLS Runtime Rotation Support | 1.1.0 | 1.0.4 | >= 3.8.0 | Enterprise | Production | True | --deployment.feature.tls-rotation | N/A | -| JWT Rotation Support | 1.1.0 | 1.0.3 | >= 3.8.0 | Enterprise | Production | True | --deployment.feature.jwt-rotation | N/A | -| Operator Single Mode | 1.0.4 | 1.0.4 | >= 3.8.0 | Community, Enterprise | Production | False | --mode.single | Only 1 instance of Operator allowed in namespace when feature is enabled | -| TLS SNI Support | 1.0.3 | 1.0.3 | >= 3.8.0 | Enterprise | Production | True | --deployment.feature.tls-sni | N/A | -| Disabling of liveness probes | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | -| Pod Disruption Budgets | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | -| Prometheus Metrics Exporter | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | Prometheus required | -| Sidecar Containers | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | -| Volume Claim Templates | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | -| Volume Resizing | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | +| Feature | Operator Version | Introduced | ArangoDB Version | ArangoDB Edition | State | Enabled | Flag | Remarks | +|:--- |:--- |:--- |:--- |:--- |:--- |:--- |:--- |:--- | +| Gateway | 1.2.43 | 1.2.43 | >= 3.8.0 | Community, Enterprise | Alpha | True | N/A | Support for ArangoDeployment Gateway Group | +| Cleanup Imported Backups | 1.2.41 | 1.2.41 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.backup-cleanup | Cleanup backups created outside of the Operator and imported into Kubernetes ArangoBackup | +| Upscale resources spec in init containers | 1.2.36 | 1.2.36 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.init-containers-upscale-resources | Upscale resources spec to built-in init containers if they are not specified or lower | +| Create backups asynchronously | 1.2.35 | 1.2.41 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.async-backup-creation | Create backups asynchronously to avoid blocking the operator and reaching the timeout | +| Enforced ResignLeadership | 1.2.34 | 1.2.34 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.enforced-resign-leadership | Enforce ResignLeadership and ensure that Leaders are moved from restarted DBServer | +| Copy resources spec to init containers | 1.2.33 | 1.2.33 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.init-containers-copy-resources | Copy resources spec to built-in init containers if they are not specified | +| [Rebalancer V2](rebalancer_v2.md) | 1.2.31 | 1.2.31 | >= 3.10.0 | Community, Enterprise | Alpha | False | --deployment.feature.rebalancer-v2 | N/A | +| [Secured containers](secured_containers.md) | 1.2.31 | 1.2.31 | >= 3.8.0 | Community, Enterprise | Alpha | False | --deployment.feature.secured-containers | If set to True Operator will run containers in secure mode | +| Version Check V2 | 1.2.31 | 1.2.31 | >= 3.8.0 | Community, Enterprise | Alpha | False | --deployment.feature.upgrade-version-check-V2 | N/A | +| [Operator Ephemeral Volumes](ephemeral_volumes.md) | 1.2.31 | 1.2.2 | >= 3.8.0 | Community, Enterprise | Beta | False | --deployment.feature.ephemeral-volumes | N/A | +| [Force Rebuild Out Synced Shards](rebuild_out_synced_shards.md) | 1.2.27 | 1.2.27 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.force-rebuild-out-synced-shards | It should be used only if user is aware of the risks. | +| [Spec Default Restore](deployment_spec_defaults.md) | 1.2.25 | 1.2.21 | >= 3.8.0 | Community, Enterprise | Beta | True | --deployment.feature.deployment-spec-defaults-restore | If set to False Operator will not change ArangoDeployment Spec | +| Version Check | 1.2.23 | 1.1.4 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.upgrade-version-check | N/A | +| [Failover Leader service](failover_leader_service.md) | 1.2.13 | 1.2.13 | < 3.12.0 | Community, Enterprise | Production | False | --deployment.feature.failover-leadership | N/A | +| Graceful Restart | 1.2.5 | 1.0.7 | >= 3.8.0 | Community, Enterprise | Production | True | ---deployment.feature.graceful-shutdown | N/A | +| Optional Graceful Restart | 1.2.0 | 1.2.5 | >= 3.8.0 | Community, Enterprise | Production | False | --deployment.feature.optional-graceful-shutdown | N/A | +| Operator Internal Metrics Exporter | 1.2.0 | 1.2.0 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.metrics-exporter | N/A | +| Operator Maintenance Management Support | 1.2.0 | 1.0.7 | >= 3.8.0 | Community, Enterprise | Production | True | --deployment.feature.maintenance | N/A | +| Encryption Key Rotation Support | 1.2.0 | 1.0.3 | >= 3.8.0 | Enterprise | NotSupported | False | --deployment.feature.encryption-rotation | N/A | +| TLS Runtime Rotation Support | 1.1.0 | 1.0.4 | >= 3.8.0 | Enterprise | Production | True | --deployment.feature.tls-rotation | N/A | +| JWT Rotation Support | 1.1.0 | 1.0.3 | >= 3.8.0 | Enterprise | Production | True | --deployment.feature.jwt-rotation | N/A | +| Operator Single Mode | 1.0.4 | 1.0.4 | >= 3.8.0 | Community, Enterprise | Production | False | --mode.single | Only 1 instance of Operator allowed in namespace when feature is enabled | +| TLS SNI Support | 1.0.3 | 1.0.3 | >= 3.8.0 | Enterprise | Production | True | --deployment.feature.tls-sni | N/A | +| ActiveFailover Support | 1.0.0 | 1.0.0 | < 3.12.0 | Community, Enterprise | Production | True | --deployment.feature.active-failover | N/A | +| Disabling of liveness probes | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | +| Pod Disruption Budgets | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | +| Prometheus Metrics Exporter | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | Prometheus required | +| Sidecar Containers | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | +| Volume Claim Templates | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | +| Volume Resizing | 0.3.11 | 0.3.10 | >= 3.8.0 | Community, Enterprise | Production | True | N/A | N/A | ## List of Enterprise Edition features -| Feature | Operator Version | Introduced | ArangoDB Version | ArangoDB Edition | State | Enabled | Flag | Remarks | -|:-----------------------------------------------------|:-----------------|:-----------|:-----------------|:-----------------|:-----------|:--------|:-----|:----------------------------------------------------------------------------| -| ArangoML integration | 1.2.36 | 1.2.36 | >= 3.8.0 | Enterprise | Alpha | True | N/A | Support for ArangoML CRDs | -| AgencyCache | 1.2.30 | 1.2.30 | >= 3.8.0 | Enterprise | Production | True | N/A | Enable Agency Cache mechanism in the Operator (Increase limit of the nodes) | -| Member Maintenance Support | 1.2.25 | 1.2.16 | >= 3.8.0 | Enterprise | Production | True | N/A | Enable Member Maintenance during planned restarts | -| [Rebalancer](rebalancer.md) | 1.2.15 | 1.2.5 | >= 3.8.0 | Enterprise | Production | True | N/A | N/A | -| [TopologyAwareness](../design/topology_awareness.md) | 1.2.4 | 1.2.4 | >= 3.8.0 | Enterprise | Production | True | N/A | N/A | +| Feature | Operator Version | Introduced | ArangoDB Version | ArangoDB Edition | State | Enabled | Flag | Remarks | +|:--- |:--- |:--- |:--- |:--- |:--- |:--- |:--- |:--- | +| ArangoML integration | 1.2.36 | 1.2.36 | >= 3.8.0 | Enterprise | Alpha | True | N/A | Support for ArangoML CRDs | +| AgencyCache | 1.2.30 | 1.2.30 | >= 3.8.0 | Enterprise | Production | True | N/A | Enable Agency Cache mechanism in the Operator (Increase limit of the nodes) | +| Member Maintenance Support | 1.2.25 | 1.2.16 | >= 3.8.0 | Enterprise | Production | True | N/A | Enable Member Maintenance during planned restarts | +| [Rebalancer](rebalancer.md) | 1.2.15 | 1.2.5 | >= 3.8.0 | Enterprise | Production | True | N/A | N/A | +| [TopologyAwareness](../design/topology_awareness.md) | 1.2.4 | 1.2.4 | >= 3.8.0 | Enterprise | Production | True | N/A | N/A | diff --git a/docs/generated/actions.md b/docs/generated/actions.md index 46fd22b02..adab08c78 100644 --- a/docs/generated/actions.md +++ b/docs/generated/actions.md @@ -10,93 +10,93 @@ nav_order: 11 [START_INJECT]: # (actionsTable) -| Action | Internal | Timeout | Optional | Edition | Description | -|:----------------------------------:|:--------:|:-------:|:--------:|:----------------------:|:------------------------------------------------------------------------------------------------------------------:| -| AddMember | no | 10m0s | no | Community & Enterprise | Adds new member to the Member list | -| AppendTLSCACertificate | no | 30m0s | no | Enterprise Only | Append Certificate into CA TrustStore | -| ArangoMemberUpdatePodSpec | no | 10m0s | no | Community & Enterprise | Propagate Member Pod spec (requested) | -| ArangoMemberUpdatePodStatus | no | 10m0s | no | Community & Enterprise | Propagate Member Pod status (current) | -| BackupRestore | no | 15m0s | no | Enterprise Only | Restore selected Backup | -| BackupRestoreClean | no | 15m0s | no | Enterprise Only | Clean restore status in case of restore spec change | -| BootstrapSetPassword | no | 10m0s | no | Community & Enterprise | Change password during bootstrap procedure | -| BootstrapUpdate | no | 10m0s | no | Community & Enterprise | Update bootstrap status | -| CleanMemberService | no | 30m0s | no | Community & Enterprise | Removes Server Service | -| CleanOutMember | no | 48h0m0s | no | Community & Enterprise | Run the CleanOut job on member | -| CleanTLSCACertificate | no | 30m0s | no | Enterprise Only | Remove Certificate from CA TrustStore | -| CleanTLSKeyfileCertificate | no | 30m0s | no | Enterprise Only | Remove old TLS certificate from server | -| ClusterMemberCleanup | no | 10m0s | no | Community & Enterprise | Remove member from Cluster if it is gone already (Coordinators) | -| ~~DisableClusterScaling~~ | no | 10m0s | no | Community & Enterprise | Disable Cluster Scaling integration | -| DisableMaintenance | no | 10m0s | no | Community & Enterprise | Disable ArangoDB maintenance mode | -| DisableMemberMaintenance | no | 10m0s | no | Enterprise Only | Disable ArangoDB DBServer maintenance mode | -| ~~EnableClusterScaling~~ | no | 10m0s | no | Community & Enterprise | Enable Cluster Scaling integration | -| EnableMaintenance | no | 10m0s | no | Community & Enterprise | Enable ArangoDB maintenance mode | -| EnableMemberMaintenance | no | 10m0s | no | Enterprise Only | Enable ArangoDB DBServer maintenance mode | -| EncryptionKeyAdd | no | 10m0s | no | Enterprise Only | Add the encryption key to the pool | -| EncryptionKeyPropagated | no | 10m0s | no | Enterprise Only | Update condition of encryption propagation | -| EncryptionKeyRefresh | no | 10m0s | no | Enterprise Only | Refresh the encryption keys on member | -| EncryptionKeyRemove | no | 10m0s | no | Enterprise Only | Remove the encryption key to the pool | -| EncryptionKeyStatusUpdate | no | 10m0s | no | Enterprise Only | Update status of encryption propagation | -| EnforceResignLeadership | no | 45m0s | yes | Community & Enterprise | Run the ResignLeadership job on DBServer and checks data compatibility after | -| Idle | no | 10m0s | no | Community & Enterprise | Define idle operation in case if preconditions are not meet | -| JWTAdd | no | 10m0s | no | Enterprise Only | Adds new JWT to the pool | -| JWTClean | no | 10m0s | no | Enterprise Only | Remove JWT key from the pool | -| JWTPropagated | no | 10m0s | no | Enterprise Only | Update condition of JWT propagation | -| JWTRefresh | no | 10m0s | no | Enterprise Only | Refresh current JWT secrets on the member | -| JWTSetActive | no | 10m0s | no | Enterprise Only | Change active JWT key on the cluster | -| JWTStatusUpdate | no | 10m0s | no | Enterprise Only | Update status of JWT propagation | -| KillMemberPod | no | 10m0s | no | Community & Enterprise | Execute Delete on Pod (put pod in Terminating state) | -| LicenseSet | no | 10m0s | no | Community & Enterprise | Update Cluster license (3.9+) | -| MarkToRemoveMember | no | 10m0s | no | Community & Enterprise | Marks member to be removed. Used when member Pod is annotated with replace annotation | -| MemberPhaseUpdate | no | 10m0s | no | Community & Enterprise | Change member phase | -| ~~MemberRIDUpdate~~ | no | 10m0s | no | Community & Enterprise | Update Run ID of member | -| MemberStatusSync | no | 10m0s | no | Community & Enterprise | Sync ArangoMember Status with ArangoDeployment Status, to keep Member information up to date | -| PVCResize | no | 30m0s | no | Community & Enterprise | Start the resize procedure. Updates PVC Requests field | -| PVCResized | no | 15m0s | no | Community & Enterprise | Waits for PVC resize to be completed | -| PlaceHolder | no | 10m0s | no | Community & Enterprise | Empty placeholder action | -| RebalancerCheck | no | 10m0s | no | Enterprise Only | Check Rebalancer job progress | -| RebalancerCheckV2 | no | 10m0s | no | Community & Enterprise | Check Rebalancer job progress | -| RebalancerClean | no | 10m0s | no | Enterprise Only | Cleans Rebalancer jobs | -| RebalancerCleanV2 | no | 10m0s | no | Community & Enterprise | Cleans Rebalancer jobs | -| RebalancerGenerate | yes | 10m0s | no | Enterprise Only | Generates the Rebalancer plan | -| RebalancerGenerateV2 | yes | 10m0s | no | Community & Enterprise | Generates the Rebalancer plan | -| RebuildOutSyncedShards | no | 24h0m0s | no | Community & Enterprise | Run Rebuild Out Synced Shards procedure for DBServers | -| RecreateMember | no | 15m0s | no | Community & Enterprise | Recreate member with same ID and Data | -| RefreshTLSCA | no | 30m0s | no | Enterprise Only | Refresh internal CA | -| RefreshTLSKeyfileCertificate | no | 30m0s | no | Enterprise Only | Recreate Server TLS Certificate secret | -| RemoveMember | no | 15m0s | no | Community & Enterprise | Removes member from the Cluster and Status | -| RemoveMemberPVC | no | 15m0s | no | Community & Enterprise | Removes member PVC and enforce recreate procedure | -| RenewTLSCACertificate | no | 30m0s | no | Enterprise Only | Recreate Managed CA secret | -| RenewTLSCertificate | no | 30m0s | no | Enterprise Only | Recreate Server TLS Certificate secret | -| ResignLeadership | no | 30m0s | yes | Community & Enterprise | Run the ResignLeadership job on DBServer | -| ResourceSync | no | 10m0s | no | Community & Enterprise | Runs the Resource sync | -| RotateMember | no | 15m0s | no | Community & Enterprise | Waits for Pod restart and recreation | -| RotateStartMember | no | 15m0s | no | Community & Enterprise | Start member rotation. After this action member is down | -| RotateStopMember | no | 15m0s | no | Community & Enterprise | Finalize member rotation. After this action member is started back | -| RuntimeContainerArgsLogLevelUpdate | no | 10m0s | no | Community & Enterprise | Change ArangoDB Member log levels in runtime | -| RuntimeContainerImageUpdate | no | 10m0s | no | Community & Enterprise | Update Container Image in runtime | -| RuntimeContainerSyncTolerations | no | 10m0s | no | Community & Enterprise | Update Pod Tolerations in runtime | -| ~~SetCondition~~ | no | 10m0s | no | Community & Enterprise | Set deployment condition | -| SetConditionV2 | no | 10m0s | no | Community & Enterprise | Set deployment condition | -| SetCurrentImage | no | 6h0m0s | no | Community & Enterprise | Update deployment current image after image discovery | -| SetCurrentMemberArch | no | 10m0s | no | Community & Enterprise | Set current member architecture | -| SetMaintenanceCondition | no | 10m0s | no | Community & Enterprise | Update ArangoDB maintenance condition | -| ~~SetMemberCondition~~ | no | 10m0s | no | Community & Enterprise | Set member condition | -| SetMemberConditionV2 | no | 10m0s | no | Community & Enterprise | Set member condition | -| SetMemberCurrentImage | no | 10m0s | no | Community & Enterprise | Update Member current image | -| ShutdownMember | no | 30m0s | no | Community & Enterprise | Sends Shutdown requests and waits for container to be stopped | -| TLSKeyStatusUpdate | no | 10m0s | no | Enterprise Only | Update Status of TLS propagation process | -| TLSPropagated | no | 10m0s | no | Enterprise Only | Update TLS propagation condition | -| TimezoneSecretSet | no | 30m0s | no | Community & Enterprise | Set timezone details in cluster | -| TopologyDisable | no | 10m0s | no | Enterprise Only | Disable TopologyAwareness | -| TopologyEnable | no | 10m0s | no | Enterprise Only | Enable TopologyAwareness | -| TopologyMemberAssignment | no | 10m0s | no | Enterprise Only | Update TopologyAwareness Members assignments | -| TopologyZonesUpdate | no | 10m0s | no | Enterprise Only | Update TopologyAwareness Zones info | -| UpToDateUpdate | no | 10m0s | no | Community & Enterprise | Update UpToDate condition | -| UpdateTLSSNI | no | 10m0s | no | Enterprise Only | Update certificate in SNI | -| UpgradeMember | no | 6h0m0s | no | Community & Enterprise | Run the Upgrade procedure on member | -| WaitForMemberInSync | no | 30m0s | no | Community & Enterprise | Wait for member to be in sync. In case of DBServer waits for shards. In case of Agents to catch-up on Agency index | -| WaitForMemberReady | no | 30m0s | no | Community & Enterprise | Wait for member Ready condition | -| WaitForMemberUp | no | 30m0s | no | Community & Enterprise | Wait for member to be responsive | +| Action | Internal | Timeout | Optional | Edition | Description | +|:---:|:---:|:---:|:---:|:---:|:---:| +| AddMember | no | 10m0s | no | Community & Enterprise | Adds new member to the Member list | +| AppendTLSCACertificate | no | 30m0s | no | Enterprise Only | Append Certificate into CA TrustStore | +| ArangoMemberUpdatePodSpec | no | 10m0s | no | Community & Enterprise | Propagate Member Pod spec (requested) | +| ArangoMemberUpdatePodStatus | no | 10m0s | no | Community & Enterprise | Propagate Member Pod status (current) | +| BackupRestore | no | 15m0s | no | Enterprise Only | Restore selected Backup | +| BackupRestoreClean | no | 15m0s | no | Enterprise Only | Clean restore status in case of restore spec change | +| BootstrapSetPassword | no | 10m0s | no | Community & Enterprise | Change password during bootstrap procedure | +| BootstrapUpdate | no | 10m0s | no | Community & Enterprise | Update bootstrap status | +| CleanMemberService | no | 30m0s | no | Community & Enterprise | Removes Server Service | +| CleanOutMember | no | 48h0m0s | no | Community & Enterprise | Run the CleanOut job on member | +| CleanTLSCACertificate | no | 30m0s | no | Enterprise Only | Remove Certificate from CA TrustStore | +| CleanTLSKeyfileCertificate | no | 30m0s | no | Enterprise Only | Remove old TLS certificate from server | +| ClusterMemberCleanup | no | 10m0s | no | Community & Enterprise | Remove member from Cluster if it is gone already (Coordinators) | +| ~~DisableClusterScaling~~ | no | 10m0s | no | Community & Enterprise | Disable Cluster Scaling integration | +| DisableMaintenance | no | 10m0s | no | Community & Enterprise | Disable ArangoDB maintenance mode | +| DisableMemberMaintenance | no | 10m0s | no | Enterprise Only | Disable ArangoDB DBServer maintenance mode | +| ~~EnableClusterScaling~~ | no | 10m0s | no | Community & Enterprise | Enable Cluster Scaling integration | +| EnableMaintenance | no | 10m0s | no | Community & Enterprise | Enable ArangoDB maintenance mode | +| EnableMemberMaintenance | no | 10m0s | no | Enterprise Only | Enable ArangoDB DBServer maintenance mode | +| EncryptionKeyAdd | no | 10m0s | no | Enterprise Only | Add the encryption key to the pool | +| EncryptionKeyPropagated | no | 10m0s | no | Enterprise Only | Update condition of encryption propagation | +| EncryptionKeyRefresh | no | 10m0s | no | Enterprise Only | Refresh the encryption keys on member | +| EncryptionKeyRemove | no | 10m0s | no | Enterprise Only | Remove the encryption key to the pool | +| EncryptionKeyStatusUpdate | no | 10m0s | no | Enterprise Only | Update status of encryption propagation | +| EnforceResignLeadership | no | 45m0s | yes | Community & Enterprise | Run the ResignLeadership job on DBServer and checks data compatibility after | +| Idle | no | 10m0s | no | Community & Enterprise | Define idle operation in case if preconditions are not meet | +| JWTAdd | no | 10m0s | no | Enterprise Only | Adds new JWT to the pool | +| JWTClean | no | 10m0s | no | Enterprise Only | Remove JWT key from the pool | +| JWTPropagated | no | 10m0s | no | Enterprise Only | Update condition of JWT propagation | +| JWTRefresh | no | 10m0s | no | Enterprise Only | Refresh current JWT secrets on the member | +| JWTSetActive | no | 10m0s | no | Enterprise Only | Change active JWT key on the cluster | +| JWTStatusUpdate | no | 10m0s | no | Enterprise Only | Update status of JWT propagation | +| KillMemberPod | no | 10m0s | no | Community & Enterprise | Execute Delete on Pod (put pod in Terminating state) | +| LicenseSet | no | 10m0s | no | Community & Enterprise | Update Cluster license (3.9+) | +| MarkToRemoveMember | no | 10m0s | no | Community & Enterprise | Marks member to be removed. Used when member Pod is annotated with replace annotation | +| MemberPhaseUpdate | no | 10m0s | no | Community & Enterprise | Change member phase | +| ~~MemberRIDUpdate~~ | no | 10m0s | no | Community & Enterprise | Update Run ID of member | +| MemberStatusSync | no | 10m0s | no | Community & Enterprise | Sync ArangoMember Status with ArangoDeployment Status, to keep Member information up to date | +| PVCResize | no | 30m0s | no | Community & Enterprise | Start the resize procedure. Updates PVC Requests field | +| PVCResized | no | 15m0s | no | Community & Enterprise | Waits for PVC resize to be completed | +| PlaceHolder | no | 10m0s | no | Community & Enterprise | Empty placeholder action | +| RebalancerCheck | no | 10m0s | no | Enterprise Only | Check Rebalancer job progress | +| RebalancerCheckV2 | no | 10m0s | no | Community & Enterprise | Check Rebalancer job progress | +| RebalancerClean | no | 10m0s | no | Enterprise Only | Cleans Rebalancer jobs | +| RebalancerCleanV2 | no | 10m0s | no | Community & Enterprise | Cleans Rebalancer jobs | +| RebalancerGenerate | yes | 10m0s | no | Enterprise Only | Generates the Rebalancer plan | +| RebalancerGenerateV2 | yes | 10m0s | no | Community & Enterprise | Generates the Rebalancer plan | +| RebuildOutSyncedShards | no | 24h0m0s | no | Community & Enterprise | Run Rebuild Out Synced Shards procedure for DBServers | +| RecreateMember | no | 15m0s | no | Community & Enterprise | Recreate member with same ID and Data | +| RefreshTLSCA | no | 30m0s | no | Enterprise Only | Refresh internal CA | +| RefreshTLSKeyfileCertificate | no | 30m0s | no | Enterprise Only | Recreate Server TLS Certificate secret | +| RemoveMember | no | 15m0s | no | Community & Enterprise | Removes member from the Cluster and Status | +| RemoveMemberPVC | no | 15m0s | no | Community & Enterprise | Removes member PVC and enforce recreate procedure | +| RenewTLSCACertificate | no | 30m0s | no | Enterprise Only | Recreate Managed CA secret | +| RenewTLSCertificate | no | 30m0s | no | Enterprise Only | Recreate Server TLS Certificate secret | +| ResignLeadership | no | 30m0s | yes | Community & Enterprise | Run the ResignLeadership job on DBServer | +| ResourceSync | no | 10m0s | no | Community & Enterprise | Runs the Resource sync | +| RotateMember | no | 15m0s | no | Community & Enterprise | Waits for Pod restart and recreation | +| RotateStartMember | no | 15m0s | no | Community & Enterprise | Start member rotation. After this action member is down | +| RotateStopMember | no | 15m0s | no | Community & Enterprise | Finalize member rotation. After this action member is started back | +| RuntimeContainerArgsLogLevelUpdate | no | 10m0s | no | Community & Enterprise | Change ArangoDB Member log levels in runtime | +| RuntimeContainerImageUpdate | no | 10m0s | no | Community & Enterprise | Update Container Image in runtime | +| RuntimeContainerSyncTolerations | no | 10m0s | no | Community & Enterprise | Update Pod Tolerations in runtime | +| ~~SetCondition~~ | no | 10m0s | no | Community & Enterprise | Set deployment condition | +| SetConditionV2 | no | 10m0s | no | Community & Enterprise | Set deployment condition | +| SetCurrentImage | no | 6h0m0s | no | Community & Enterprise | Update deployment current image after image discovery | +| SetCurrentMemberArch | no | 10m0s | no | Community & Enterprise | Set current member architecture | +| SetMaintenanceCondition | no | 10m0s | no | Community & Enterprise | Update ArangoDB maintenance condition | +| ~~SetMemberCondition~~ | no | 10m0s | no | Community & Enterprise | Set member condition | +| SetMemberConditionV2 | no | 10m0s | no | Community & Enterprise | Set member condition | +| SetMemberCurrentImage | no | 10m0s | no | Community & Enterprise | Update Member current image | +| ShutdownMember | no | 30m0s | no | Community & Enterprise | Sends Shutdown requests and waits for container to be stopped | +| TLSKeyStatusUpdate | no | 10m0s | no | Enterprise Only | Update Status of TLS propagation process | +| TLSPropagated | no | 10m0s | no | Enterprise Only | Update TLS propagation condition | +| TimezoneSecretSet | no | 30m0s | no | Community & Enterprise | Set timezone details in cluster | +| TopologyDisable | no | 10m0s | no | Enterprise Only | Disable TopologyAwareness | +| TopologyEnable | no | 10m0s | no | Enterprise Only | Enable TopologyAwareness | +| TopologyMemberAssignment | no | 10m0s | no | Enterprise Only | Update TopologyAwareness Members assignments | +| TopologyZonesUpdate | no | 10m0s | no | Enterprise Only | Update TopologyAwareness Zones info | +| UpToDateUpdate | no | 10m0s | no | Community & Enterprise | Update UpToDate condition | +| UpdateTLSSNI | no | 10m0s | no | Enterprise Only | Update certificate in SNI | +| UpgradeMember | no | 6h0m0s | no | Community & Enterprise | Run the Upgrade procedure on member | +| WaitForMemberInSync | no | 30m0s | no | Community & Enterprise | Wait for member to be in sync. In case of DBServer waits for shards. In case of Agents to catch-up on Agency index | +| WaitForMemberReady | no | 30m0s | no | Community & Enterprise | Wait for member Ready condition | +| WaitForMemberUp | no | 30m0s | no | Community & Enterprise | Wait for member to be responsive | [END_INJECT]: # (actionsTable) diff --git a/docs/generated/metrics/README.md b/docs/generated/metrics/README.md index f432feeec..c88a10603 100644 --- a/docs/generated/metrics/README.md +++ b/docs/generated/metrics/README.md @@ -12,41 +12,41 @@ has_toc: false [START_INJECT]: # (metricsTable) -| Name | Namespace | Group | Type | Description | -|:-------------------------------------------------------------------------------------------------------------------------------------:|:------------------:|:---------------------:|:-------:|:--------------------------------------------------------------------------------------| -| [arangodb_operator_agency_errors](./arangodb_operator_agency_errors.md) | arangodb_operator | agency | Counter | Current count of agency cache fetch errors | -| [arangodb_operator_agency_fetches](./arangodb_operator_agency_fetches.md) | arangodb_operator | agency | Counter | Current count of agency cache fetches | -| [arangodb_operator_agency_index](./arangodb_operator_agency_index.md) | arangodb_operator | agency | Gauge | Current index of the agency cache | -| [arangodb_operator_agency_cache_health_present](./arangodb_operator_agency_cache_health_present.md) | arangodb_operator | agency_cache | Gauge | Determines if local agency cache health is present | -| [arangodb_operator_agency_cache_healthy](./arangodb_operator_agency_cache_healthy.md) | arangodb_operator | agency_cache | Gauge | Determines if agency is healthy | -| [arangodb_operator_agency_cache_leaders](./arangodb_operator_agency_cache_leaders.md) | arangodb_operator | agency_cache | Gauge | Determines agency leader vote count | -| [arangodb_operator_agency_cache_member_commit_offset](./arangodb_operator_agency_cache_member_commit_offset.md) | arangodb_operator | agency_cache | Gauge | Determines agency member commit offset | -| [arangodb_operator_agency_cache_member_serving](./arangodb_operator_agency_cache_member_serving.md) | arangodb_operator | agency_cache | Gauge | Determines if agency member is reachable | -| [arangodb_operator_agency_cache_present](./arangodb_operator_agency_cache_present.md) | arangodb_operator | agency_cache | Gauge | Determines if local agency cache is present | -| [arangodb_operator_agency_cache_serving](./arangodb_operator_agency_cache_serving.md) | arangodb_operator | agency_cache | Gauge | Determines if agency is serving | -| [arangodb_operator_deployment_conditions](./arangodb_operator_deployment_conditions.md) | arangodb_operator | deployment | Gauge | Representation of the ArangoDeployment condition state (true/false) | -| [arangodb_operator_engine_assertions](./arangodb_operator_engine_assertions.md) | arangodb_operator | engine | Counter | Number of assertions invoked during Operator runtime | -| [arangodb_operator_engine_ops_alerts](./arangodb_operator_engine_ops_alerts.md) | arangodb_operator | engine | Counter | Counter for actions which requires ops attention | -| [arangodb_operator_engine_panics_recovered](./arangodb_operator_engine_panics_recovered.md) | arangodb_operator | engine | Counter | Number of Panics recovered inside Operator reconciliation loop | -| [arangodb_operator_kubernetes_client_request_errors](./arangodb_operator_kubernetes_client_request_errors.md) | arangodb_operator | kubernetes_client | Counter | Number of Kubernetes Client request errors | -| [arangodb_operator_kubernetes_client_requests](./arangodb_operator_kubernetes_client_requests.md) | arangodb_operator | kubernetes_client | Counter | Number of Kubernetes Client requests | -| [arangodb_operator_members_conditions](./arangodb_operator_members_conditions.md) | arangodb_operator | members | Gauge | Representation of the ArangoMember condition state (true/false) | -| [arangodb_operator_members_unexpected_container_exit_codes](./arangodb_operator_members_unexpected_container_exit_codes.md) | arangodb_operator | members | Counter | Counter of unexpected restarts in pod (Containers/InitContainers/EphemeralContainers) | -| [arangodb_operator_objects_processed](./arangodb_operator_objects_processed.md) | arangodb_operator | objects | Counter | Number of the processed objects | -| [arangodb_operator_rebalancer_enabled](./arangodb_operator_rebalancer_enabled.md) | arangodb_operator | rebalancer | Gauge | Determines if rebalancer is enabled | -| [arangodb_operator_rebalancer_moves_current](./arangodb_operator_rebalancer_moves_current.md) | arangodb_operator | rebalancer | Gauge | Define how many moves are currently in progress | -| [arangodb_operator_rebalancer_moves_failed](./arangodb_operator_rebalancer_moves_failed.md) | arangodb_operator | rebalancer | Counter | Define how many moves failed | -| [arangodb_operator_rebalancer_moves_generated](./arangodb_operator_rebalancer_moves_generated.md) | arangodb_operator | rebalancer | Counter | Define how many moves were generated | -| [arangodb_operator_rebalancer_moves_succeeded](./arangodb_operator_rebalancer_moves_succeeded.md) | arangodb_operator | rebalancer | Counter | Define how many moves succeeded | -| [arangodb_operator_resources_arangodeployment_accepted](./arangodb_operator_resources_arangodeployment_accepted.md) | arangodb_operator | resources | Gauge | Defines if ArangoDeployment has been accepted | -| [arangodb_operator_resources_arangodeployment_immutable_errors](./arangodb_operator_resources_arangodeployment_immutable_errors.md) | arangodb_operator | resources | Counter | Counter for deployment immutable errors | -| [arangodb_operator_resources_arangodeployment_propagated](./arangodb_operator_resources_arangodeployment_propagated.md) | arangodb_operator | resources | Gauge | Defines if ArangoDeployment Spec is propagated | -| [arangodb_operator_resources_arangodeployment_status_restores](./arangodb_operator_resources_arangodeployment_status_restores.md) | arangodb_operator | resources | Counter | Counter for deployment status restored | -| [arangodb_operator_resources_arangodeployment_uptodate](./arangodb_operator_resources_arangodeployment_uptodate.md) | arangodb_operator | resources | Gauge | Defines if ArangoDeployment is uptodate | -| [arangodb_operator_resources_arangodeployment_validation_errors](./arangodb_operator_resources_arangodeployment_validation_errors.md) | arangodb_operator | resources | Counter | Counter for deployment validation errors | -| [arangodb_operator_resources_arangodeploymentreplication_active](./arangodb_operator_resources_arangodeploymentreplication_active.md) | arangodb_operator | resources | Gauge | Defines if ArangoDeploymentReplication is configured and running | -| [arangodb_operator_resources_arangodeploymentreplication_failed](./arangodb_operator_resources_arangodeploymentreplication_failed.md) | arangodb_operator | resources | Gauge | Defines if ArangoDeploymentReplication is in Failed phase | -| [arangodb_resources_deployment_config_map_duration](./arangodb_resources_deployment_config_map_duration.md) | arangodb_resources | deployment_config_map | Gauge | Duration of inspected ConfigMaps by Deployment in seconds | -| [arangodb_resources_deployment_config_map_inspected](./arangodb_resources_deployment_config_map_inspected.md) | arangodb_resources | deployment_config_map | Counter | Number of inspected ConfigMaps by Deployment | +| Name | Namespace | Group | Type | Description | +|:---:|:---:|:---:|:---:|:--- | +| [arangodb_operator_agency_errors](./arangodb_operator_agency_errors.md) | arangodb_operator | agency | Counter | Current count of agency cache fetch errors | +| [arangodb_operator_agency_fetches](./arangodb_operator_agency_fetches.md) | arangodb_operator | agency | Counter | Current count of agency cache fetches | +| [arangodb_operator_agency_index](./arangodb_operator_agency_index.md) | arangodb_operator | agency | Gauge | Current index of the agency cache | +| [arangodb_operator_agency_cache_health_present](./arangodb_operator_agency_cache_health_present.md) | arangodb_operator | agency_cache | Gauge | Determines if local agency cache health is present | +| [arangodb_operator_agency_cache_healthy](./arangodb_operator_agency_cache_healthy.md) | arangodb_operator | agency_cache | Gauge | Determines if agency is healthy | +| [arangodb_operator_agency_cache_leaders](./arangodb_operator_agency_cache_leaders.md) | arangodb_operator | agency_cache | Gauge | Determines agency leader vote count | +| [arangodb_operator_agency_cache_member_commit_offset](./arangodb_operator_agency_cache_member_commit_offset.md) | arangodb_operator | agency_cache | Gauge | Determines agency member commit offset | +| [arangodb_operator_agency_cache_member_serving](./arangodb_operator_agency_cache_member_serving.md) | arangodb_operator | agency_cache | Gauge | Determines if agency member is reachable | +| [arangodb_operator_agency_cache_present](./arangodb_operator_agency_cache_present.md) | arangodb_operator | agency_cache | Gauge | Determines if local agency cache is present | +| [arangodb_operator_agency_cache_serving](./arangodb_operator_agency_cache_serving.md) | arangodb_operator | agency_cache | Gauge | Determines if agency is serving | +| [arangodb_operator_deployment_conditions](./arangodb_operator_deployment_conditions.md) | arangodb_operator | deployment | Gauge | Representation of the ArangoDeployment condition state (true/false) | +| [arangodb_operator_engine_assertions](./arangodb_operator_engine_assertions.md) | arangodb_operator | engine | Counter | Number of assertions invoked during Operator runtime | +| [arangodb_operator_engine_ops_alerts](./arangodb_operator_engine_ops_alerts.md) | arangodb_operator | engine | Counter | Counter for actions which requires ops attention | +| [arangodb_operator_engine_panics_recovered](./arangodb_operator_engine_panics_recovered.md) | arangodb_operator | engine | Counter | Number of Panics recovered inside Operator reconciliation loop | +| [arangodb_operator_kubernetes_client_request_errors](./arangodb_operator_kubernetes_client_request_errors.md) | arangodb_operator | kubernetes_client | Counter | Number of Kubernetes Client request errors | +| [arangodb_operator_kubernetes_client_requests](./arangodb_operator_kubernetes_client_requests.md) | arangodb_operator | kubernetes_client | Counter | Number of Kubernetes Client requests | +| [arangodb_operator_members_conditions](./arangodb_operator_members_conditions.md) | arangodb_operator | members | Gauge | Representation of the ArangoMember condition state (true/false) | +| [arangodb_operator_members_unexpected_container_exit_codes](./arangodb_operator_members_unexpected_container_exit_codes.md) | arangodb_operator | members | Counter | Counter of unexpected restarts in pod (Containers/InitContainers/EphemeralContainers) | +| [arangodb_operator_objects_processed](./arangodb_operator_objects_processed.md) | arangodb_operator | objects | Counter | Number of the processed objects | +| [arangodb_operator_rebalancer_enabled](./arangodb_operator_rebalancer_enabled.md) | arangodb_operator | rebalancer | Gauge | Determines if rebalancer is enabled | +| [arangodb_operator_rebalancer_moves_current](./arangodb_operator_rebalancer_moves_current.md) | arangodb_operator | rebalancer | Gauge | Define how many moves are currently in progress | +| [arangodb_operator_rebalancer_moves_failed](./arangodb_operator_rebalancer_moves_failed.md) | arangodb_operator | rebalancer | Counter | Define how many moves failed | +| [arangodb_operator_rebalancer_moves_generated](./arangodb_operator_rebalancer_moves_generated.md) | arangodb_operator | rebalancer | Counter | Define how many moves were generated | +| [arangodb_operator_rebalancer_moves_succeeded](./arangodb_operator_rebalancer_moves_succeeded.md) | arangodb_operator | rebalancer | Counter | Define how many moves succeeded | +| [arangodb_operator_resources_arangodeployment_accepted](./arangodb_operator_resources_arangodeployment_accepted.md) | arangodb_operator | resources | Gauge | Defines if ArangoDeployment has been accepted | +| [arangodb_operator_resources_arangodeployment_immutable_errors](./arangodb_operator_resources_arangodeployment_immutable_errors.md) | arangodb_operator | resources | Counter | Counter for deployment immutable errors | +| [arangodb_operator_resources_arangodeployment_propagated](./arangodb_operator_resources_arangodeployment_propagated.md) | arangodb_operator | resources | Gauge | Defines if ArangoDeployment Spec is propagated | +| [arangodb_operator_resources_arangodeployment_status_restores](./arangodb_operator_resources_arangodeployment_status_restores.md) | arangodb_operator | resources | Counter | Counter for deployment status restored | +| [arangodb_operator_resources_arangodeployment_uptodate](./arangodb_operator_resources_arangodeployment_uptodate.md) | arangodb_operator | resources | Gauge | Defines if ArangoDeployment is uptodate | +| [arangodb_operator_resources_arangodeployment_validation_errors](./arangodb_operator_resources_arangodeployment_validation_errors.md) | arangodb_operator | resources | Counter | Counter for deployment validation errors | +| [arangodb_operator_resources_arangodeploymentreplication_active](./arangodb_operator_resources_arangodeploymentreplication_active.md) | arangodb_operator | resources | Gauge | Defines if ArangoDeploymentReplication is configured and running | +| [arangodb_operator_resources_arangodeploymentreplication_failed](./arangodb_operator_resources_arangodeploymentreplication_failed.md) | arangodb_operator | resources | Gauge | Defines if ArangoDeploymentReplication is in Failed phase | +| [arangodb_resources_deployment_config_map_duration](./arangodb_resources_deployment_config_map_duration.md) | arangodb_resources | deployment_config_map | Gauge | Duration of inspected ConfigMaps by Deployment in seconds | +| [arangodb_resources_deployment_config_map_inspected](./arangodb_resources_deployment_config_map_inspected.md) | arangodb_resources | deployment_config_map | Counter | Number of inspected ConfigMaps by Deployment | [END_INJECT]: # (metricsTable) diff --git a/docs/generated/metrics/arangodb_operator_agency_cache_health_present.md b/docs/generated/metrics/arangodb_operator_agency_cache_health_present.md index 994245025..f25526780 100644 --- a/docs/generated/metrics/arangodb_operator_agency_cache_health_present.md +++ b/docs/generated/metrics/arangodb_operator_agency_cache_health_present.md @@ -12,7 +12,7 @@ Determines if local agency cache health is present ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_agency_cache_healthy.md b/docs/generated/metrics/arangodb_operator_agency_cache_healthy.md index 53da88e7b..266674431 100644 --- a/docs/generated/metrics/arangodb_operator_agency_cache_healthy.md +++ b/docs/generated/metrics/arangodb_operator_agency_cache_healthy.md @@ -12,7 +12,7 @@ Determines if agency is healthy ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_agency_cache_leaders.md b/docs/generated/metrics/arangodb_operator_agency_cache_leaders.md index 534429709..6f7e7a262 100644 --- a/docs/generated/metrics/arangodb_operator_agency_cache_leaders.md +++ b/docs/generated/metrics/arangodb_operator_agency_cache_leaders.md @@ -12,8 +12,8 @@ Determines agency leader vote count. Should be always one ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | -| agent | Agent ID | +| name | Deployment Name | +| agent | Agent ID | diff --git a/docs/generated/metrics/arangodb_operator_agency_cache_member_commit_offset.md b/docs/generated/metrics/arangodb_operator_agency_cache_member_commit_offset.md index aeedb88b5..ee79180ee 100644 --- a/docs/generated/metrics/arangodb_operator_agency_cache_member_commit_offset.md +++ b/docs/generated/metrics/arangodb_operator_agency_cache_member_commit_offset.md @@ -12,8 +12,8 @@ Determines agency member commit offset. Set to -1 if Agent is not reachable ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | -| agent | Agent ID | +| name | Deployment Name | +| agent | Agent ID | diff --git a/docs/generated/metrics/arangodb_operator_agency_cache_member_serving.md b/docs/generated/metrics/arangodb_operator_agency_cache_member_serving.md index c082fc3c0..3df0b62d7 100644 --- a/docs/generated/metrics/arangodb_operator_agency_cache_member_serving.md +++ b/docs/generated/metrics/arangodb_operator_agency_cache_member_serving.md @@ -12,8 +12,8 @@ Determines if agency member is reachable ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | -| agent | Agent ID | +| name | Deployment Name | +| agent | Agent ID | diff --git a/docs/generated/metrics/arangodb_operator_agency_cache_present.md b/docs/generated/metrics/arangodb_operator_agency_cache_present.md index c3c2ec52c..414ba1c51 100644 --- a/docs/generated/metrics/arangodb_operator_agency_cache_present.md +++ b/docs/generated/metrics/arangodb_operator_agency_cache_present.md @@ -12,7 +12,7 @@ Determines if local agency cache is present ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_agency_cache_serving.md b/docs/generated/metrics/arangodb_operator_agency_cache_serving.md index e6d05bf68..be5457762 100644 --- a/docs/generated/metrics/arangodb_operator_agency_cache_serving.md +++ b/docs/generated/metrics/arangodb_operator_agency_cache_serving.md @@ -12,7 +12,7 @@ Determines if agency is serving ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_agency_errors.md b/docs/generated/metrics/arangodb_operator_agency_errors.md index 26b78aa74..f62059136 100644 --- a/docs/generated/metrics/arangodb_operator_agency_errors.md +++ b/docs/generated/metrics/arangodb_operator_agency_errors.md @@ -12,7 +12,7 @@ Current count of agency cache fetch errors ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_agency_fetches.md b/docs/generated/metrics/arangodb_operator_agency_fetches.md index 4c2b53826..224cfe3d3 100644 --- a/docs/generated/metrics/arangodb_operator_agency_fetches.md +++ b/docs/generated/metrics/arangodb_operator_agency_fetches.md @@ -12,7 +12,7 @@ Current count of agency cache fetches ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_agency_index.md b/docs/generated/metrics/arangodb_operator_agency_index.md index f60da240e..4f04a507b 100644 --- a/docs/generated/metrics/arangodb_operator_agency_index.md +++ b/docs/generated/metrics/arangodb_operator_agency_index.md @@ -12,7 +12,7 @@ Current index of the agency cache ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_deployment_conditions.md b/docs/generated/metrics/arangodb_operator_deployment_conditions.md index c868006b6..18d65a7a4 100644 --- a/docs/generated/metrics/arangodb_operator_deployment_conditions.md +++ b/docs/generated/metrics/arangodb_operator_deployment_conditions.md @@ -12,8 +12,8 @@ Representation of the ArangoDeployment condition state (true/false) ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | -| condition | Condition Name | +| name | Deployment Name | +| condition | Condition Name | diff --git a/docs/generated/metrics/arangodb_operator_engine_assertions.md b/docs/generated/metrics/arangodb_operator_engine_assertions.md index 86750fe54..3408125ac 100644 --- a/docs/generated/metrics/arangodb_operator_engine_assertions.md +++ b/docs/generated/metrics/arangodb_operator_engine_assertions.md @@ -12,13 +12,13 @@ Number of assertions invoked during Operator runtime ## Labels -| Label | Description | -|:-----:|:--------------| -| key | Assertion Key | +| Label | Description | +|:---:|:--- | +| key | Assertion Key | ## Alerting -| Priority | Query | Description | -|:--------:|:--------------------------------------------------:|:--------------------------------------------| -| Warning | irate(arangodb_operator_engine_assertions[1m]) > 1 | Trigger an alert if OPS attention is needed | +| Priority | Query | Description | +|:---:|:---:|:--- | +| Warning | irate(arangodb_operator_engine_assertions[1m]) > 1 | Trigger an alert if OPS attention is needed | diff --git a/docs/generated/metrics/arangodb_operator_engine_ops_alerts.md b/docs/generated/metrics/arangodb_operator_engine_ops_alerts.md index d9f461b3f..5289c030b 100644 --- a/docs/generated/metrics/arangodb_operator_engine_ops_alerts.md +++ b/docs/generated/metrics/arangodb_operator_engine_ops_alerts.md @@ -12,14 +12,14 @@ Counter for actions which requires ops attention ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | ## Alerting -| Priority | Query | Description | -|:--------:|:--------------------------------------------------:|:--------------------------------------------| -| Warning | irate(arangodb_operator_engine_ops_alerts[1m]) > 1 | Trigger an alert if OPS attention is needed | +| Priority | Query | Description | +|:---:|:---:|:--- | +| Warning | irate(arangodb_operator_engine_ops_alerts[1m]) > 1 | Trigger an alert if OPS attention is needed | diff --git a/docs/generated/metrics/arangodb_operator_engine_panics_recovered.md b/docs/generated/metrics/arangodb_operator_engine_panics_recovered.md index 7ae12248d..b2efeab8a 100644 --- a/docs/generated/metrics/arangodb_operator_engine_panics_recovered.md +++ b/docs/generated/metrics/arangodb_operator_engine_panics_recovered.md @@ -12,6 +12,6 @@ Number of Panics recovered inside Operator reconciliation loop. Section represen ## Labels -| Label | Description | -|:-------:|:--------------| +| Label | Description | +|:---:|:--- | | section | Panic Section | diff --git a/docs/generated/metrics/arangodb_operator_kubernetes_client_request_errors.md b/docs/generated/metrics/arangodb_operator_kubernetes_client_request_errors.md index e2eaa331e..72c8e0920 100644 --- a/docs/generated/metrics/arangodb_operator_kubernetes_client_request_errors.md +++ b/docs/generated/metrics/arangodb_operator_kubernetes_client_request_errors.md @@ -12,7 +12,7 @@ Number of Kubernetes Client request errors ## Labels -| Label | Description | -|:---------:|:-------------------------------------------------------------| -| component | K8S Resource name | -| verb | Verb (create,update,update-status,patch,delete,force-delete) | +| Label | Description | +|:---:|:--- | +| component | K8S Resource name | +| verb | Verb (create,update,update-status,patch,delete,force-delete) | diff --git a/docs/generated/metrics/arangodb_operator_kubernetes_client_requests.md b/docs/generated/metrics/arangodb_operator_kubernetes_client_requests.md index 6b1e5a478..c57128806 100644 --- a/docs/generated/metrics/arangodb_operator_kubernetes_client_requests.md +++ b/docs/generated/metrics/arangodb_operator_kubernetes_client_requests.md @@ -12,7 +12,7 @@ Number of Kubernetes Client requests ## Labels -| Label | Description | -|:---------:|:-------------------------------------------------------------| -| component | K8S Resource name | -| verb | Verb (create,update,update-status,patch,delete,force-delete) | +| Label | Description | +|:---:|:--- | +| component | K8S Resource name | +| verb | Verb (create,update,update-status,patch,delete,force-delete) | diff --git a/docs/generated/metrics/arangodb_operator_members_conditions.md b/docs/generated/metrics/arangodb_operator_members_conditions.md index 43084b4ab..a27a5306d 100644 --- a/docs/generated/metrics/arangodb_operator_members_conditions.md +++ b/docs/generated/metrics/arangodb_operator_members_conditions.md @@ -12,9 +12,9 @@ Representation of the ArangoMember condition state (true/false) ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | -| member | Member ID | -| condition | Condition Name | +| name | Deployment Name | +| member | Member ID | +| condition | Condition Name | diff --git a/docs/generated/metrics/arangodb_operator_members_unexpected_container_exit_codes.md b/docs/generated/metrics/arangodb_operator_members_unexpected_container_exit_codes.md index fd9d024ee..a8089f041 100644 --- a/docs/generated/metrics/arangodb_operator_members_unexpected_container_exit_codes.md +++ b/docs/generated/metrics/arangodb_operator_members_unexpected_container_exit_codes.md @@ -12,12 +12,12 @@ Counter of unexpected restarts in pod (Containers/InitContainers/EphemeralContai ## Labels -| Label | Description | -|:--------------:|:-------------------------------------------| -| namespace | Deployment Namespace | -| name | Deployment Name | -| member | Member ID | -| container | Container Name | +| Label | Description | +|:---:|:--- | +| namespace | Deployment Namespace | +| name | Deployment Name | +| member | Member ID | +| container | Container Name | | container_type | Container/InitContainer/EphemeralContainer | -| code | ExitCode | -| reason | Reason | +| code | ExitCode | +| reason | Reason | diff --git a/docs/generated/metrics/arangodb_operator_objects_processed.md b/docs/generated/metrics/arangodb_operator_objects_processed.md index 0964806e8..959b7edaf 100644 --- a/docs/generated/metrics/arangodb_operator_objects_processed.md +++ b/docs/generated/metrics/arangodb_operator_objects_processed.md @@ -12,6 +12,6 @@ Number of the processed objects ## Labels -| Label | Description | -|:-------------:|:--------------| +| Label | Description | +|:---:|:--- | | operator_name | Operator Name | diff --git a/docs/generated/metrics/arangodb_operator_rebalancer_enabled.md b/docs/generated/metrics/arangodb_operator_rebalancer_enabled.md index 22e159143..fcd3adfe0 100644 --- a/docs/generated/metrics/arangodb_operator_rebalancer_enabled.md +++ b/docs/generated/metrics/arangodb_operator_rebalancer_enabled.md @@ -12,7 +12,7 @@ Determines if rebalancer is enabled ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_rebalancer_moves_current.md b/docs/generated/metrics/arangodb_operator_rebalancer_moves_current.md index fb3d54378..380677892 100644 --- a/docs/generated/metrics/arangodb_operator_rebalancer_moves_current.md +++ b/docs/generated/metrics/arangodb_operator_rebalancer_moves_current.md @@ -12,7 +12,7 @@ Define how many moves are currently in progress ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_rebalancer_moves_failed.md b/docs/generated/metrics/arangodb_operator_rebalancer_moves_failed.md index 21d173516..49a46514f 100644 --- a/docs/generated/metrics/arangodb_operator_rebalancer_moves_failed.md +++ b/docs/generated/metrics/arangodb_operator_rebalancer_moves_failed.md @@ -12,7 +12,7 @@ Define how many moves failed ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_rebalancer_moves_generated.md b/docs/generated/metrics/arangodb_operator_rebalancer_moves_generated.md index 48e63e604..86bae4945 100644 --- a/docs/generated/metrics/arangodb_operator_rebalancer_moves_generated.md +++ b/docs/generated/metrics/arangodb_operator_rebalancer_moves_generated.md @@ -12,7 +12,7 @@ Define how many moves were generated ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_rebalancer_moves_succeeded.md b/docs/generated/metrics/arangodb_operator_rebalancer_moves_succeeded.md index 4760b7011..4c108e730 100644 --- a/docs/generated/metrics/arangodb_operator_rebalancer_moves_succeeded.md +++ b/docs/generated/metrics/arangodb_operator_rebalancer_moves_succeeded.md @@ -12,7 +12,7 @@ Define how many moves succeeded ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_resources_arangodeployment_accepted.md b/docs/generated/metrics/arangodb_operator_resources_arangodeployment_accepted.md index 220548263..9bf3be9e2 100644 --- a/docs/generated/metrics/arangodb_operator_resources_arangodeployment_accepted.md +++ b/docs/generated/metrics/arangodb_operator_resources_arangodeployment_accepted.md @@ -12,7 +12,7 @@ Defines if ArangoDeployment has been accepted ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_resources_arangodeployment_immutable_errors.md b/docs/generated/metrics/arangodb_operator_resources_arangodeployment_immutable_errors.md index 74560e861..ab5b9ede4 100644 --- a/docs/generated/metrics/arangodb_operator_resources_arangodeployment_immutable_errors.md +++ b/docs/generated/metrics/arangodb_operator_resources_arangodeployment_immutable_errors.md @@ -12,7 +12,7 @@ Counter for deployment immutable errors ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_resources_arangodeployment_propagated.md b/docs/generated/metrics/arangodb_operator_resources_arangodeployment_propagated.md index 816c86cf6..13f95b296 100644 --- a/docs/generated/metrics/arangodb_operator_resources_arangodeployment_propagated.md +++ b/docs/generated/metrics/arangodb_operator_resources_arangodeployment_propagated.md @@ -12,7 +12,7 @@ Defines if ArangoDeployment Spec is propagated ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_resources_arangodeployment_status_restores.md b/docs/generated/metrics/arangodb_operator_resources_arangodeployment_status_restores.md index 1be9fff45..cc8e7d3a9 100644 --- a/docs/generated/metrics/arangodb_operator_resources_arangodeployment_status_restores.md +++ b/docs/generated/metrics/arangodb_operator_resources_arangodeployment_status_restores.md @@ -12,7 +12,7 @@ Counter for deployment status restored ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_resources_arangodeployment_uptodate.md b/docs/generated/metrics/arangodb_operator_resources_arangodeployment_uptodate.md index 82fc98c20..9652d904f 100644 --- a/docs/generated/metrics/arangodb_operator_resources_arangodeployment_uptodate.md +++ b/docs/generated/metrics/arangodb_operator_resources_arangodeployment_uptodate.md @@ -12,7 +12,7 @@ Defines if ArangoDeployment is uptodate ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_resources_arangodeployment_validation_errors.md b/docs/generated/metrics/arangodb_operator_resources_arangodeployment_validation_errors.md index a6482ffb6..b770f708f 100644 --- a/docs/generated/metrics/arangodb_operator_resources_arangodeployment_validation_errors.md +++ b/docs/generated/metrics/arangodb_operator_resources_arangodeployment_validation_errors.md @@ -12,7 +12,7 @@ Counter for deployment validation errors ## Labels -| Label | Description | -|:---------:|:---------------------| +| Label | Description | +|:---:|:--- | | namespace | Deployment Namespace | -| name | Deployment Name | +| name | Deployment Name | diff --git a/docs/generated/metrics/arangodb_operator_resources_arangodeploymentreplication_active.md b/docs/generated/metrics/arangodb_operator_resources_arangodeploymentreplication_active.md index 3770bdd2a..6595f8b82 100644 --- a/docs/generated/metrics/arangodb_operator_resources_arangodeploymentreplication_active.md +++ b/docs/generated/metrics/arangodb_operator_resources_arangodeploymentreplication_active.md @@ -12,7 +12,7 @@ Defines if ArangoDeploymentReplication is configured and running ## Labels -| Label | Description | -|:---------:|:--------------------------------| +| Label | Description | +|:---:|:--- | | namespace | DeploymentReplication Namespace | -| name | DeploymentReplication Name | +| name | DeploymentReplication Name | diff --git a/docs/generated/metrics/arangodb_operator_resources_arangodeploymentreplication_failed.md b/docs/generated/metrics/arangodb_operator_resources_arangodeploymentreplication_failed.md index c8a8beb5f..8e5c0453c 100644 --- a/docs/generated/metrics/arangodb_operator_resources_arangodeploymentreplication_failed.md +++ b/docs/generated/metrics/arangodb_operator_resources_arangodeploymentreplication_failed.md @@ -12,7 +12,7 @@ Defines if ArangoDeploymentReplication is in Failed phase ## Labels -| Label | Description | -|:---------:|:--------------------------------| +| Label | Description | +|:---:|:--- | | namespace | DeploymentReplication Namespace | -| name | DeploymentReplication Name | +| name | DeploymentReplication Name | diff --git a/docs/generated/metrics/arangodb_resources_deployment_config_map_duration.md b/docs/generated/metrics/arangodb_resources_deployment_config_map_duration.md index 856d6b269..152d6e23a 100644 --- a/docs/generated/metrics/arangodb_resources_deployment_config_map_duration.md +++ b/docs/generated/metrics/arangodb_resources_deployment_config_map_duration.md @@ -12,6 +12,6 @@ Duration of inspected ConfigMaps by Deployment in seconds ## Labels -| Label | Description | -|:----------:|:----------------| +| Label | Description | +|:---:|:--- | | deployment | Deployment Name | diff --git a/docs/generated/metrics/arangodb_resources_deployment_config_map_inspected.md b/docs/generated/metrics/arangodb_resources_deployment_config_map_inspected.md index 34b719489..638262ee0 100644 --- a/docs/generated/metrics/arangodb_resources_deployment_config_map_inspected.md +++ b/docs/generated/metrics/arangodb_resources_deployment_config_map_inspected.md @@ -12,6 +12,6 @@ Number of inspected ConfigMaps by Deployment ## Labels -| Label | Description | -|:----------:|:----------------| +| Label | Description | +|:---:|:--- | | deployment | Deployment Name | diff --git a/docs/helm.md b/docs/helm.md index fb190c8b5..cce66a9f6 100644 --- a/docs/helm.md +++ b/docs/helm.md @@ -130,6 +130,31 @@ Define if RBAC should be enabled. Default: `true` +### `certificate.enabled` + +Define if Cert via CertManager should be enabled. + +Default: `false` + +### `certificate.ca.duration` + +CA Duration. + +Default: `43800h` + +### `certificate.ca.commonName` + +CA CommonName. + +Default: `kube-arangodb.operator.cert` + +### `certificate.cert.duration` + +Cert Duration. + +Default: `8760h` + + ## Alternate namespaces The `kube-arangodb` chart supports deployment into a non-default namespace. diff --git a/docs/how-to/debugging.md b/docs/how-to/debugging.md index 8927410d7..f5d12da4d 100644 --- a/docs/how-to/debugging.md +++ b/docs/how-to/debugging.md @@ -33,5 +33,5 @@ helm upgrade --install kube-arangodb \ Then run: ```shell -kubectl exec -ti {POD_kube-arangodb-operator} -- /usr/bin/arangodb_operator debugPackage --namespace {namespace} -o - > db.tar.gz +kubectl exec {POD_kube-arangodb-operator} -- /usr/bin/arangodb_operator debug-package --namespace {namespace} -o - > db.tar.gz ``` diff --git a/docs/how-to/replace-pod.md b/docs/how-to/replace-pod.md new file mode 100644 index 000000000..f1abde090 --- /dev/null +++ b/docs/how-to/replace-pod.md @@ -0,0 +1,25 @@ +--- +layout: page +title: How to replace Pod +parent: How to ... +--- + +# How to replace Pod + +Replacement of ArangoDeployment Pods can be triggered by annotation. + +Replacement of the pod will ensure that destruction of the member will never result in data loss. + +Replacement is disabled for: +- Single Servers + +Replacement of member for particular groups will result in: +- Agents - Member and PVC is recreated, Operator ensures that Quorum is kept during this operation +- DBServers - New DBServer is added where data is migrated before removal +- Coordinator, Gateway - Simple shutdown + +Key: `deployment.arangodb.com/replace` +Value: `true` + +To rotate ArangoDeployment Pod kubectl command can be used: +`kubectl annotate pod arango-pod deployment.arangodb.com/replace=true` diff --git a/docs/how-to/set_root_user_password.md b/docs/how-to/set_root_user_password.md index de6a6d820..306f6b83c 100644 --- a/docs/how-to/set_root_user_password.md +++ b/docs/how-to/set_root_user_password.md @@ -8,7 +8,7 @@ parent: How to ... 1) Create a kubernetes [Secret](https://kubernetes.io/docs/tasks/configmap-secret/managing-secret-using-kubectl/) with root password: ```bash -kubectl create secret generic arango-root-pwd --from-literal=password= +kubectl create secret generic arango-root-pwd --from-literal=password= --from-literal=username=root ``` 1) Then specify the newly created secret in the ArangoDeploymentSpec: diff --git a/docs/integration-sidecar.md b/docs/integration-sidecar.md new file mode 100644 index 000000000..849eddc08 --- /dev/null +++ b/docs/integration-sidecar.md @@ -0,0 +1,261 @@ +--- +layout: page +has_children: true +title: Integration Sidecars +parent: ArangoDBPlatform +has_toc: false +--- + +# Integration + +## Profile + +### Injection + +#### Selector + +Using [Selector](./api/ArangoProfile.V1Beta1.md) `.spec.selectors.label` you can select which profiles are going to be applied on the Pod. + +To not match any pod: +```yaml +apiVersion: scheduler.arangodb.com/v1beta1 +kind: ArangoProfile +metadata: + name: example +spec: + selectors: + label: + matchLabels: {} + template: ... +``` + +To match all pods: +```yaml +apiVersion: scheduler.arangodb.com/v1beta1 +kind: ArangoProfile +metadata: + name: example +spec: + selectors: + label: + matchLabels: {} + template: ... +``` + +To match specific pods (with label key=value): +```yaml +apiVersion: scheduler.arangodb.com/v1beta1 +kind: ArangoProfile +metadata: + name: example +spec: + selectors: + label: + matchLabels: + key: value + template: ... +``` + +#### Selection + +Profiles can be injected using name (not only selectors). + +In order to inject specific profiles to the pod use label (split by `,`): + +```yaml +metadata: + labels: + profiles.arangodb.com/profiles: "gpu" +``` + +or + +```yaml +metadata: + labels: + profiles.arangodb.com/profiles: "gpu,internal" +``` + +## Sidecar + +### Resource Types + +Integration Sidecar is supported in a few resources managed by Operator: + +- ArangoSchedulerDeployment (scheduler.arangodb.com/v1beta1) +- ArangoSchedulerBatchJob (scheduler.arangodb.com/v1beta1) +- ArangoSchedulerCronJob (scheduler.arangodb.com/v1beta1) +- ArangoSchedulerPod (scheduler.arangodb.com/v1beta1) + +To enable integration sidecar for specific deployment label needs to be defined: + +```yaml +metadata: + labels: + profiles.arangodb.com/deployment: << deployment name >> +``` + +### Webhooks + +When Webhook support is enabled Integration Sidecar is supported in Kubernetes Pod resources. + +To inject integration sidecar for specific deployment label needs to be defined: + +```yaml +apiVersion: v1 +kind: Pod +metadata: + labels: + profiles.arangodb.com/deployment: << deployment name >> +``` + +### Integrations + +To enable integration in specific version, labels needs to be added: + +```yaml +metadata: + labels: + integration.profiles.arangodb.com/<< integration name >>: << integration version >> +``` + +#### [Authentication V1](/docs/integration/authentication.v1.md) + +Authentication Integration Sidecar + +To enable: + +```yaml +metadata: + labels: + integration.profiles.arangodb.com/authn: v1 +``` + +#### [Authorization V0](/docs/integration/authorization.v0.md) + +Authorization Integration Sidecar + +To enable: + +```yaml +metadata: + labels: + integration.profiles.arangodb.com/authz: v0 +``` + +#### [Scheduler V2](/docs/integration/scheduler.v2.md) + +Scheduler Integration Sidecar + +To enable: + +```yaml +metadata: + labels: + integration.profiles.arangodb.com/sched: v2 +``` + +#### [Storage V2](/docs/integration/storage.v2.md) + +Storage Integration Sidecar + +To enable: + +```yaml +metadata: + labels: + integration.profiles.arangodb.com/storage: v2 +``` + +#### [Shutdown V1](/docs/integration/shutdown.v1.md) + +Shutdown Integration Sidecar + +To enable: + +```yaml +metadata: + labels: + integration.profiles.arangodb.com/shutdown: v1 +``` + +### Envs + +#### INTEGRATION_API_ADDRESS + +Integration Service API Address + +Example: `localhost:1234` + +#### INTEGRATION_SERVICE_ADDRESS + +Integration Service API Address + +Example: `localhost:1234` + +#### ARANGO_DEPLOYMENT_NAME + +ArangoDeployment name. + +Example: `deployment` + +#### ARANGO_DEPLOYMENT_ENDPOINT / ARANGODB_ENDPOINT + +HTTP/S Endpoint of the ArangoDeployment Internal Service. + +Example: `https://deployment.default.svc:8529` + +#### ARANGO_DEPLOYMENT_CA (optional) + +Path to the CA in the PEM format. If not set, TLS is disabled. + +Example: `/etc/deployment-int/ca/ca.pem` + +#### KUBERNETES_NAMESPACE + +Kubernetes Namespace. + +Example: `default` + +#### KUBERNETES_POD_NAME + +Kubernetes Pod Name. + +Example: `example` + +#### KUBERNETES_POD_IP + +Kubernetes Pod IP. + +Example: `127.0.0.1` + +#### KUBERNETES_SERVICE_ACCOUNT + +Kubernetes Service Account mounted for the Pod. + +Example: `sa-example` + +#### CONTAINER_CPU_REQUESTS + +Kubernetes Pod Container CPU Requests (1000 = 1CPU). + +Example: `500` + +#### CONTAINER_MEMORY_REQUESTS + +Kubernetes Pod Container Memory Requests in Megabytes. + +Example: `128` + +#### CONTAINER_CPU_LIMITS + +Kubernetes Pod Container CPU Limits (1000 = 1CPU). + +Example: `500` + +#### CONTAINER_MEMORY_LIMITS + +Kubernetes Pod Container Memory Limits in Megabytes. + +Example: `128` + diff --git a/docs/integration/authentication.v1.md b/docs/integration/authentication.v1.md new file mode 100644 index 000000000..0840ab907 --- /dev/null +++ b/docs/integration/authentication.v1.md @@ -0,0 +1,11 @@ +--- +layout: page +title: Authentication V1 +parent: ArangoDBPlatform +--- + +# Authentication V1 + +Definitions: + +- [Service](../../integrations/authentication/v1/definition/definition.proto) diff --git a/docs/integration/authorization.v0.md b/docs/integration/authorization.v0.md new file mode 100644 index 000000000..9c8877d56 --- /dev/null +++ b/docs/integration/authorization.v0.md @@ -0,0 +1,12 @@ +--- +layout: page +title: Authentication V1 +parent: ArangoDBPlatform +--- + +# Authorization V0 + +Definitions: + +- [Service](../../integrations/authorization/v0/definition/definition.proto) + diff --git a/docs/integration/scheduler.v2.md b/docs/integration/scheduler.v2.md new file mode 100644 index 000000000..a92e39413 --- /dev/null +++ b/docs/integration/scheduler.v2.md @@ -0,0 +1,12 @@ +--- +layout: page +title: Authentication V1 +parent: ArangoDBPlatform +--- + +# Scheduler V2 + +Definitions: + +- [Service](../../integrations/scheduler/v2/definition/definition.proto) + diff --git a/docs/integration/shutdown.v1.md b/docs/integration/shutdown.v1.md new file mode 100644 index 000000000..15d95b6c4 --- /dev/null +++ b/docs/integration/shutdown.v1.md @@ -0,0 +1,32 @@ +--- +layout: page +title: Authentication V1 +parent: ArangoDBPlatform +--- + +# Shutdown V1 + +Definitions: + +- [Service](../../integrations/shutdown/v1/definition/definition.proto) + +Operator will send shutdown request once all containers marked with annotation are stopped. + +Example: + +```yaml +metadata: + annotations: + core.shutdown.arangodb.com/app: "wait" + core.shutdown.arangodb.com/app2: "wait" + container.shutdown.arangodb.com/app3: port1 +spec: + containers: + - name: app + - name: app2 + - name: app3 + ports: + name: port1 +``` + +Pod will receive shutdown request on port `port1` if containers `app` and `app2` will be in non running state. diff --git a/docs/integration/storage.v2.md b/docs/integration/storage.v2.md new file mode 100644 index 000000000..1cdafd5eb --- /dev/null +++ b/docs/integration/storage.v2.md @@ -0,0 +1,12 @@ +--- +layout: page +title: Authentication V1 +parent: ArangoDBPlatform +--- + +# Storage V2 + +Definitions: + +- [Service](./definition.proto) + diff --git a/docs/platform.md b/docs/platform.md new file mode 100644 index 000000000..b3866b7f5 --- /dev/null +++ b/docs/platform.md @@ -0,0 +1,28 @@ +--- +layout: page +has_children: true +title: ArangoDBPlatform +has_toc: false +--- + +# Platform + + +#### Community & Enterprise Edition + +[Full CustomResourceDefinition reference ->](./api/ArangoPlatformStorage.V1Alpha1.md) + +This instruction covers only the steps to enable ArangoPlatform in Kubernetes cluster with already running ArangoDeployment. +If you don't have one yet, consider checking [kube-arangodb installation guide](./using-the-operator.md) and [ArangoDeployment CR description](./deployment-resource-reference.md). + +### To enable Platform on your cluster, follow next steps: + +1) Install [CertManager](https://github.com/cert-manager/cert-manager) on your cluster. + +2) Enable Gateway Feature. Add `--deployment.feature.gateway=true` option to the Operator arguments. + +3) Enable Webhooks. e.g. if you are using Helm package, add `--set "webhooks.enabled=true"` option to the Helm command. + +4) Enable Managed Certificates. e.g. if you are using Helm package, add `--set "certificate.enabled=true"` option to the Helm command. + +5) Enable Gateways in the ArangoDeployment. Set `.spec.gateway.enabled` and `.spec.gateway.dynamic` to True diff --git a/examples/reboot-pod.yaml b/examples/reboot-pod.yaml index ad0790a7d..2f777a3c6 100644 --- a/examples/reboot-pod.yaml +++ b/examples/reboot-pod.yaml @@ -6,7 +6,7 @@ spec: restartPolicy: Never serviceAccountName: arango-deployment-operator-reboot containers: - - image: arangodb/kube-arangodb:1.2.43 + - image: arangodb/kube-arangodb:1.2.44 name: reboot command: ["arangodb_operator", "reboot"] args: diff --git a/go.mod b/go.mod index beb5040e7..e96d89907 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,6 @@ module github.com/arangodb/kube-arangodb -go 1.22 - -toolchain go1.22.4 +go 1.22.7 replace ( github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring => github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.71.2 @@ -10,17 +8,17 @@ replace ( github.com/stretchr/testify => github.com/stretchr/testify v1.9.0 github.com/ugorji/go => github.com/ugorji/go v0.0.0-20181209151446-772ced7fd4c2 - k8s.io/api => k8s.io/api v0.29.6 - k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.29.6 - k8s.io/apimachinery => k8s.io/apimachinery v0.29.6 - k8s.io/apiserver => k8s.io/apiserver v0.29.6 - k8s.io/client-go => k8s.io/client-go v0.29.6 - k8s.io/cloud-provider => k8s.io/cloud-provider v0.29.6 - k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.29.6 + k8s.io/api => k8s.io/api v0.31.2 + k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.31.2 + k8s.io/apimachinery => k8s.io/apimachinery v0.31.2 + k8s.io/apiserver => k8s.io/apiserver v0.31.2 + k8s.io/client-go => k8s.io/client-go v0.31.2 + k8s.io/cloud-provider => k8s.io/cloud-provider v0.31.2 + k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.31.2 k8s.io/code-generator => ./deps/k8s.io/code-generator - k8s.io/component-base => k8s.io/component-base v0.29.6 - k8s.io/kubernetes => k8s.io/kubernetes v0.29.6 - k8s.io/metrics => k8s.io/metrics v0.29.6 + k8s.io/component-base => k8s.io/component-base v0.31.2 + k8s.io/kubernetes => k8s.io/kubernetes v0.31.2 + k8s.io/metrics => k8s.io/metrics v0.31.2 ) require ( @@ -35,11 +33,12 @@ require ( github.com/cenkalti/backoff v2.2.1+incompatible github.com/coreos/go-semver v0.3.1 github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9 - github.com/envoyproxy/go-control-plane v0.11.1 + github.com/envoyproxy/go-control-plane v0.13.1 github.com/fsnotify/fsnotify v1.7.0 github.com/gin-gonic/gin v1.9.1 github.com/golang-jwt/jwt v3.2.2+incompatible - github.com/google/uuid v1.4.0 + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/uuid v1.6.0 github.com/jessevdk/go-assets v0.0.0-20160921144138-4f4301a06e15 github.com/josephburnett/jd v1.6.1 github.com/julienschmidt/httprouter v1.3.0 @@ -47,97 +46,185 @@ require ( github.com/pkg/errors v0.9.1 github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.71.2 github.com/prometheus-operator/prometheus-operator/pkg/client v0.0.0-00010101000000-000000000000 - github.com/prometheus/client_golang v1.16.0 - github.com/prometheus/client_model v0.4.0 + github.com/prometheus/client_golang v1.19.1 + github.com/prometheus/client_model v0.6.1 github.com/prometheus/prom2json v1.3.3 github.com/robfig/cron v1.2.0 github.com/rs/zerolog v1.19.0 - github.com/spf13/cobra v1.8.0 + github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.8.4 - golang.org/x/sync v0.6.0 - golang.org/x/sys v0.18.0 - golang.org/x/text v0.14.0 + github.com/stretchr/testify v1.10.0 + golang.org/x/sync v0.10.0 + golang.org/x/sys v0.28.0 + golang.org/x/text v0.21.0 golang.org/x/time v0.5.0 - google.golang.org/grpc v1.60.1 - google.golang.org/protobuf v1.33.0 + google.golang.org/genproto/googleapis/rpc v0.0.0-20241113202542-65e8d215514f + google.golang.org/grpc v1.68.0 + google.golang.org/protobuf v1.35.2 gopkg.in/yaml.v3 v3.0.1 - k8s.io/api v0.29.6 - k8s.io/apiextensions-apiserver v0.29.6 - k8s.io/apimachinery v0.29.6 - k8s.io/client-go v0.29.6 - k8s.io/kube-openapi v0.0.0-20231129212854-f0671cc7e66a + k8s.io/api v0.31.2 + k8s.io/apiextensions-apiserver v0.31.2 + k8s.io/apimachinery v0.31.2 + k8s.io/client-go v0.31.2 + k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 sigs.k8s.io/yaml v1.4.0 - github.com/golang/protobuf v1.5.4 - google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917 ) require ( + github.com/Masterminds/semver/v3 v3.3.0 + github.com/arangodb-managed/apis v0.89.1 + github.com/arangodb-managed/integration-apis v0.2.1 + github.com/aws/aws-sdk-go v1.55.5 + github.com/jedib0t/go-pretty/v6 v6.6.5 + helm.sh/helm/v3 v3.16.2 +) + +require ( + cel.dev/expr v0.16.1 // indirect + dario.cat/mergo v1.0.1 // indirect + github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect + github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect + github.com/BurntSushi/toml v1.3.2 // indirect + github.com/MakeNowJust/heredoc v1.0.0 // indirect + github.com/Masterminds/goutils v1.1.1 // indirect + github.com/Masterminds/sprig/v3 v3.3.0 // indirect + github.com/Masterminds/squirrel v1.5.4 // indirect + github.com/Microsoft/hcsshim v0.11.4 // indirect github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e // indirect + github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/blang/semver/v4 v4.0.0 // indirect github.com/bytedance/sonic v1.9.1 // indirect - github.com/cenkalti/backoff/v4 v4.2.1 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/chai2010/gettext-go v1.0.2 // indirect github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect - github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 // indirect + github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect + github.com/containerd/containerd v1.7.12 // indirect + github.com/containerd/log v0.1.0 // indirect + github.com/cyphar/filepath-securejoin v0.3.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dchest/siphash v1.2.2 // indirect + github.com/distribution/reference v0.5.0 // indirect + github.com/docker/cli v25.0.1+incompatible // indirect + github.com/docker/distribution v2.8.3+incompatible // indirect + github.com/docker/docker v25.0.6+incompatible // indirect + github.com/docker/docker-credential-helpers v0.7.0 // indirect + github.com/docker/go-connections v0.5.0 // indirect + github.com/docker/go-metrics v0.0.1 // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect - github.com/envoyproxy/protoc-gen-validate v1.0.2 // indirect - github.com/evanphx/json-patch v5.7.0+incompatible // indirect + github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect + github.com/evanphx/json-patch v5.9.0+incompatible // indirect + github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/gin-contrib/sse v0.1.0 // indirect - github.com/go-logr/logr v1.4.1 // indirect + github.com/go-errors/errors v1.4.2 // indirect + github.com/go-gorp/gorp/v3 v3.1.0 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/jsonpointer v0.20.0 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.22.4 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.14.0 // indirect + github.com/gobwas/glob v0.2.3 // indirect github.com/goccy/go-json v0.10.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/google/btree v1.0.1 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect + github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect - github.com/imdario/mergo v0.3.6 // indirect + github.com/gosuri/uitable v0.0.4 // indirect + github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/huandu/xstrings v1.5.0 // indirect + github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/jmoiron/sqlx v1.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kkdai/maglev v0.2.0 // indirect + github.com/klauspost/compress v1.16.0 // indirect github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect + github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect github.com/leodido/go-urn v1.2.4 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect - github.com/moby/spdystream v0.2.0 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + 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.4.0 // indirect + github.com/moby/term v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // 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/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.1.0 // indirect github.com/pavel-v-chernykh/keystore-go v2.1.0+incompatible // indirect github.com/pelletier/go-toml/v2 v2.1.1 // indirect + github.com/peterbourgon/diskv v2.0.1+incompatible // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/common v0.44.0 // indirect - github.com/prometheus/procfs v0.10.1 // indirect + github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/procfs v0.15.1 // indirect + github.com/rivo/uniseg v0.2.0 // indirect + github.com/rubenv/sql-migrate v1.7.0 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/shopspring/decimal v1.4.0 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + github.com/spf13/cast v1.7.0 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.11 // indirect + github.com/x448/float16 v0.8.4 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + github.com/xeipuuv/gojsonschema v1.2.0 // indirect + github.com/xlab/treeprint v1.2.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect + go.opentelemetry.io/otel v1.28.0 // indirect + go.opentelemetry.io/otel/metric v1.28.0 // indirect + go.opentelemetry.io/otel/trace v1.28.0 // indirect + go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect golang.org/x/arch v0.3.0 // indirect - golang.org/x/crypto v0.21.0 // indirect - golang.org/x/net v0.23.0 // indirect - golang.org/x/oauth2 v0.15.0 // indirect - golang.org/x/term v0.18.0 // indirect - golang.org/x/tools v0.17.0 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 // indirect + golang.org/x/crypto v0.31.0 // indirect + golang.org/x/net v0.31.0 // indirect + golang.org/x/oauth2 v0.23.0 // indirect + golang.org/x/term v0.27.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20241113202542-65e8d215514f // indirect + gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - k8s.io/klog/v2 v2.110.1 // indirect - k8s.io/utils v0.0.0-20231127182322-b307cd553661 // indirect + k8s.io/apiserver v0.31.2 // indirect + k8s.io/cli-runtime v0.31.1 // indirect + k8s.io/component-base v0.31.2 // indirect + k8s.io/klog/v2 v2.130.1 // indirect + k8s.io/kubectl v0.31.1 // indirect + k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect + oras.land/oras-go v1.2.5 // indirect sigs.k8s.io/controller-runtime v0.16.3 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/kustomize/api v0.17.2 // indirect + sigs.k8s.io/kustomize/kyaml v0.17.1 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect ) diff --git a/go.sum b/go.sum index 8d68fe4f6..609882be3 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,831 @@ +cel.dev/expr v0.15.0 h1:O1jzfJCQBfL5BFoYktaxwIhuttaQPsVWerH9/EEKx0w= +cel.dev/expr v0.15.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg= +cel.dev/expr v0.16.1 h1:NR0+oFYzR1CqLFhTAqg3ql59G9VfN8fKq1TCHJ6gq1g= +cel.dev/expr v0.16.1/go.mod h1:AsGA5zb3WruAEQeQng1RZdGEXmBj0jvMWh6l5SnNuC8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.6/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= +cloud.google.com/go/accessapproval v1.7.1/go.mod h1:JYczztsHRMK7NTXb6Xw+dwbs/WnOJxbo/2mTI+Kgg68= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= +cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= +cloud.google.com/go/accesscontextmanager v1.8.0/go.mod h1:uI+AI/r1oyWK99NN8cQ3UK76AMelMzgZCvJfsi2c+ps= +cloud.google.com/go/accesscontextmanager v1.8.1/go.mod h1:JFJHfvuaTC+++1iL1coPiG1eu5D24db2wXCDWDjIrxo= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= +cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k= +cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= +cloud.google.com/go/aiplatform v1.45.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= +cloud.google.com/go/aiplatform v1.48.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= +cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= +cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= +cloud.google.com/go/analytics v0.21.2/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= +cloud.google.com/go/analytics v0.21.3/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigateway v1.6.1/go.mod h1:ufAS3wpbRjqfZrzpvLC2oh0MFlpRJm2E/ts25yyqmXA= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeconnect v1.6.1/go.mod h1:C4awq7x0JpLtrlQCr8AzVIzAaYgngRqWf9S5Uhg+wWs= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= +cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= +cloud.google.com/go/apigeeregistry v0.7.1/go.mod h1:1XgyjZye4Mqtw7T9TsY4NW10U7BojBvG4RMD+vRDrIw= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= +cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= +cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A= +cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= +cloud.google.com/go/appengine v1.8.1/go.mod h1:6NJXGLVhZCN9aQ/AEDvmfzKEfoYBlfB80/BHiKVputY= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= +cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= +cloud.google.com/go/area120 v0.8.1/go.mod h1:BVfZpGpB7KFVNxPiQBuHkX6Ed0rS51xIgmGyjrAfzsg= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= +cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= +cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI= +cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= +cloud.google.com/go/artifactregistry v1.14.1/go.mod h1:nxVdG19jTaSTu7yA7+VbWL346r3rIdkZ142BSQqhn5E= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= +cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg= +cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= +cloud.google.com/go/asset v1.14.1/go.mod h1:4bEJ3dnHCqWCDbWJ/6Vn7GVI9LerSi7Rfdi03hd+WTQ= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= +cloud.google.com/go/assuredworkloads v1.11.1/go.mod h1:+F04I52Pgn5nmPG36CWFtxmav6+7Q+c5QyJoL18Lry0= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/automl v1.13.1/go.mod h1:1aowgAHWYZU27MybSCFiukPO7xnyawv7pt3zK4bheQE= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= +cloud.google.com/go/baremetalsolution v1.1.1/go.mod h1:D1AV6xwOksJMV4OSlWHtWuFNZZYujJknMAP4Qa27QIA= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= +cloud.google.com/go/batch v1.3.1/go.mod h1:VguXeQKXIYaeeIYbuozUmBR13AfL4SJP7IltNPS+A4A= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= +cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= +cloud.google.com/go/beyondcorp v0.6.1/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= +cloud.google.com/go/beyondcorp v1.0.0/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= +cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= +cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= +cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= +cloud.google.com/go/bigquery v1.52.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= +cloud.google.com/go/bigquery v1.53.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= +cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= +cloud.google.com/go/billing v1.16.0/go.mod h1:y8vx09JSSJG02k5QxbycNRrN7FGZB6F3CAcgum7jvGA= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/binaryauthorization v1.6.1/go.mod h1:TKt4pa8xhowwffiBmbrbcxijJRZED4zrqnwZ1lKH51U= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/certificatemanager v1.7.1/go.mod h1:iW8J3nG6SaRYImIa+wXQ0g8IgoofDFRp5UMzaNk1UqI= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= +cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +cloud.google.com/go/channel v1.16.0/go.mod h1:eN/q1PFSl5gyu0dYdmxNXscY/4Fi7ABmeHCJNf/oHmc= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= +cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= +cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= +cloud.google.com/go/cloudbuild v1.10.1/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/cloudbuild v1.13.0/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= +cloud.google.com/go/clouddms v1.6.1/go.mod h1:Ygo1vL52Ov4TBZQquhz5fiw2CQ58gvu+PlS6PVXCpZI= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= +cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= +cloud.google.com/go/cloudtasks v1.11.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= +cloud.google.com/go/cloudtasks v1.12.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/contactcenterinsights v1.9.1/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= +cloud.google.com/go/contactcenterinsights v1.10.0/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= +cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= +cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= +cloud.google.com/go/container v1.22.1/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= +cloud.google.com/go/container v1.24.0/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= +cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= +cloud.google.com/go/containeranalysis v0.10.1/go.mod h1:Ya2jiILITMY68ZLPaogjmOMNkwsDrWBSTyBubGXO7j0= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= +cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= +cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= +cloud.google.com/go/datacatalog v1.14.0/go.mod h1:h0PrGtlihoutNMp/uvwhawLQ9+c63Kz65UFqh49Yo+E= +cloud.google.com/go/datacatalog v1.14.1/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= +cloud.google.com/go/datacatalog v1.16.0/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= +cloud.google.com/go/dataflow v0.9.1/go.mod h1:Wp7s32QjYuQDWqJPFFlnBKhkAtiFpMTdg00qGbnIHVw= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= +cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +cloud.google.com/go/dataform v0.8.1/go.mod h1:3BhPSiw8xmppbgzeBbmDvmSWlwouuJkXsXsb8UBih9M= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datafusion v1.7.1/go.mod h1:KpoTBbFmoToDExJUso/fcCiguGDk7MEzOWXUsJo0wsI= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/datalabeling v0.8.1/go.mod h1:XS62LBSVPbYR54GfYQsPXZjTW8UxCK2fkDciSrpRFdY= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= +cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +cloud.google.com/go/dataplex v1.8.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataplex v1.9.0/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataproc/v2 v2.0.1/go.mod h1:7Ez3KRHdFGcfY7GcevBbvozX+zyWGcwLJvvAMwCaoZ4= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= +cloud.google.com/go/dataqna v0.8.1/go.mod h1:zxZM0Bl6liMePWsHA8RMGAfmTG34vJMapbHAxQ5+WA8= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= +cloud.google.com/go/datastore v1.12.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.12.1/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastore v1.13.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= +cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= +cloud.google.com/go/datastream v1.9.1/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= +cloud.google.com/go/datastream v1.10.0/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= +cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= +cloud.google.com/go/deploy v1.11.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= +cloud.google.com/go/deploy v1.13.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= +cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= +cloud.google.com/go/dialogflow v1.38.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= +cloud.google.com/go/dialogflow v1.40.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= +cloud.google.com/go/dlp v1.10.1/go.mod h1:IM8BWz1iJd8njcNcG0+Kyd9OPnqnRNkDV8j42VT5KOI= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= +cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= +cloud.google.com/go/documentai v1.20.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= +cloud.google.com/go/documentai v1.22.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/domains v0.9.1/go.mod h1:aOp1c0MbejQQ2Pjf1iJvnVyT+z6R6s8pX66KaCSDYfE= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= +cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +cloud.google.com/go/edgecontainer v1.1.1/go.mod h1:O5bYcS//7MELQZs3+7mabRqoWQhXCzenBu0R8bz2rwk= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/essentialcontacts v1.6.2/go.mod h1:T2tB6tX+TRak7i88Fb2N9Ok3PvY3UNbUsMag9/BARh4= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= +cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +cloud.google.com/go/eventarc v1.12.1/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= +cloud.google.com/go/eventarc v1.13.0/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= +cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= +cloud.google.com/go/filestore v1.7.1/go.mod h1:y10jsorq40JJnjR/lQ8AfFbbcGlw3g+Dp8oN7i7FjV4= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/firestore v1.12.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= +cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= +cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= +cloud.google.com/go/functions v1.15.1/go.mod h1:P5yNWUTkyU+LvW/S9O6V+V423VZooALQlqoXdoPz5AE= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gaming v1.10.1/go.mod h1:XQQvtfP8Rb9Rxnxm5wFVpAp9zCQkJi2bLIb7iHGwB3s= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= +cloud.google.com/go/gkebackup v1.3.0/go.mod h1:vUDOu++N0U5qs4IhG1pcOnD1Mac79xWy6GoBFlWCWBU= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkeconnect v0.8.1/go.mod h1:KWiK1g9sDLZqhxB2xEuPV8V9NYzrqTUmQR9shJHpOZw= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= +cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +cloud.google.com/go/gkehub v0.14.1/go.mod h1:VEXKIJZ2avzrbd7u+zeMtW00Y8ddk/4V9511C9CQGTY= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= +cloud.google.com/go/gkemulticloud v0.6.1/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= +cloud.google.com/go/gkemulticloud v1.0.0/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/grafeas v0.3.0/go.mod h1:P7hgN24EyONOTMyeJH6DxG4zD7fwiYa5Q6GUgyFSOU8= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= +cloud.google.com/go/gsuiteaddons v1.6.1/go.mod h1:CodrdOqRZcLp5WOwejHWYBjZvfY0kOphkAKpF/3qdZY= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBalRE8= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= +cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo= +cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= +cloud.google.com/go/iap v1.8.1/go.mod h1:sJCbeqg3mvWLqjZNsI6dfAtbbV1DL2Rl7e1mTyXYREQ= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/ids v1.4.1/go.mod h1:np41ed8YMU8zOgv53MMMoCntLTn2lF+SUzlM+O3u/jw= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= +cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= +cloud.google.com/go/iot v1.7.1/go.mod h1:46Mgw7ev1k9KqK1ao0ayW9h0lI+3hxeanz+L1zmbbbk= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= +cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= +cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24= +cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= +cloud.google.com/go/kms v1.11.0/go.mod h1:hwdiYC0xjnWsKQQCQQmIQnS9asjYVSK6jtXm+zFqXLM= +cloud.google.com/go/kms v1.12.1/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/kms v1.15.0/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/language v1.10.1/go.mod h1:CPp94nsdVNiQEt1CNjF5WkTcisLiHPyIbMhvR8H2AW0= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/lifesciences v0.9.1/go.mod h1:hACAOd1fFbCGLr/+weUKRAJas82Y4vrL3O5326N//Wc= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/longrunning v0.4.2/go.mod h1:OHrnaYyLUV6oqwh0xiS7e5sLQhP1m0QU9R+WhGDMgIQ= +cloud.google.com/go/longrunning v0.5.0/go.mod h1:0JNuqRShmscVAhIACGtskSAWtqtOoPkwP0YF1oVEchc= +cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/managedidentities v1.6.1/go.mod h1:h/irGhTN2SkZ64F43tfGPMbHnypMbu4RB3yl8YcuEak= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= +cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= +cloud.google.com/go/maps v1.3.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s= +cloud.google.com/go/maps v1.4.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= +cloud.google.com/go/mediatranslation v0.8.1/go.mod h1:L/7hBdEYbYHQJhX2sldtTO5SZZ1C1vkapubj0T2aGig= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= +cloud.google.com/go/memcache v1.10.1/go.mod h1:47YRQIarv4I3QS5+hoETgKO40InqzLP6kpNLvyXuyaA= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/metastore v1.11.1/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= +cloud.google.com/go/metastore v1.12.0/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= +cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/monitoring v1.15.1/go.mod h1:lADlSAlFdbqQuwwpaImhsJXu1QSdd3ojypXrFSMr2rM= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= +cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= +cloud.google.com/go/networkconnectivity v1.12.1/go.mod h1:PelxSWYM7Sh9/guf8CFhi6vIqf19Ir/sbfZRUwXh92E= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networkmanagement v1.8.0/go.mod h1:Ho/BUGmtyEqrttTgWEe7m+8vDdK74ibQc+Be0q7Fof0= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= +cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= +cloud.google.com/go/networksecurity v0.9.1/go.mod h1:MCMdxOKQ30wsBI1eI659f9kEp4wuuAueoC9AJKSPWZQ= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= +cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= +cloud.google.com/go/notebooks v1.9.1/go.mod h1:zqG9/gk05JrzgBt4ghLzEepPHNwE5jgPcHZRKhlC1A8= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/optimization v1.4.1/go.mod h1:j64vZQP7h9bO49m2rVaTVoNM0vEBEN5eKPUPbZyXOrk= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orchestration v1.8.1/go.mod h1:4sluRF3wgbYVRqz7zJ1/EUNc90TTprliq9477fGobD8= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= +cloud.google.com/go/orgpolicy v1.11.0/go.mod h1:2RK748+FtVvnfuynxBzdnyu7sygtoZa1za/0ZfpOs1M= +cloud.google.com/go/orgpolicy v1.11.1/go.mod h1:8+E3jQcpZJQliP+zaFfayC2Pg5bmhuLK755wKhIIUCE= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= +cloud.google.com/go/osconfig v1.12.0/go.mod h1:8f/PaYzoS3JMVfdfTubkowZYGmAhUCjjwnjqWI7NVBc= +cloud.google.com/go/osconfig v1.12.1/go.mod h1:4CjBxND0gswz2gfYRCUoUzCm9zCABp91EeTtWXyz0tE= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/oslogin v1.10.1/go.mod h1:x692z7yAue5nE7CsSnoG0aaMbNoRJRXO4sn73R+ZqAs= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/phishingprotection v0.8.1/go.mod h1:AxonW7GovcA8qdEk13NfHq9hNx5KPtfxXNeUxTDxB6I= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= +cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= +cloud.google.com/go/policytroubleshooter v1.7.1/go.mod h1:0NaT5v3Ag1M7U5r0GfDCpUFkWd9YqpubBWsQlhanRv0= +cloud.google.com/go/policytroubleshooter v1.8.0/go.mod h1:tmn5Ir5EToWe384EuboTcVQT7nTag2+DuH3uHmKd1HU= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= +cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= +cloud.google.com/go/privatecatalog v0.9.1/go.mod h1:0XlDXW2unJXdf9zFz968Hp35gl/bhF4twwpXZAW50JA= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= +cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/pubsub v1.32.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= +cloud.google.com/go/pubsub v1.33.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= +cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= +cloud.google.com/go/pubsublite v1.8.1/go.mod h1:fOLdU4f5xldK4RGJrBMm+J7zMWNj/k4PxwEZXy39QS0= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.2/go.mod h1:kR0KjsJS7Jt1YSyWFkseQ756D45kaYNTlDPPaRAvDBU= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= +cloud.google.com/go/recommendationengine v0.8.1/go.mod h1:MrZihWwtFYWDzE6Hz5nKcNz3gLizXVIDI/o3G1DLcrE= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= +cloud.google.com/go/recommender v1.10.1/go.mod h1:XFvrE4Suqn5Cq0Lf+mCP6oBHD/yRMA8XxP5sb7Q7gpA= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/redis v1.13.1/go.mod h1:VP7DGLpE91M6bcsDdMuyCm2hIpB6Vp2hI090Mfd1tcg= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= +cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= +cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/resourcemanager v1.9.1/go.mod h1:dVCuosgrh1tINZ/RwBufr8lULmWGOkPS8gL5gqyjdT8= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= +cloud.google.com/go/resourcesettings v1.6.1/go.mod h1:M7mk9PIZrC5Fgsu1kZJci6mpgN8o0IUzVx3eJU3y4Jw= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/retail v1.14.1/go.mod h1:y3Wv3Vr2k54dLNIrCzenyKG8g8dhvhncT2NcNjb/6gE= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= +cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= +cloud.google.com/go/run v1.2.0/go.mod h1:36V1IlDzQ0XxbQjUx6IYbw8H3TJnWvhii963WW3B/bo= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= +cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= +cloud.google.com/go/scheduler v1.10.1/go.mod h1:R63Ldltd47Bs4gnhQkmNDse5w8gBRrhObZ54PxgR2Oo= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= +cloud.google.com/go/secretmanager v1.11.1/go.mod h1:znq9JlXgTNdBeQk9TBW/FnR/W4uChEKGeqQWAJ8SXFw= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= +cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= +cloud.google.com/go/security v1.15.1/go.mod h1:MvTnnbsWnehoizHi09zoiZob0iCHVcL4AUBj76h9fXA= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= +cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= +cloud.google.com/go/securitycenter v1.23.0/go.mod h1:8pwQ4n+Y9WCWM278R8W3nF65QtY172h4S8aXyI9/hsQ= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= +cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= +cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= +cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= +cloud.google.com/go/servicedirectory v1.10.1/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= +cloud.google.com/go/servicedirectory v1.11.0/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= +cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= +cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/shell v1.7.1/go.mod h1:u1RaM+huXFaTojTbW4g9P5emOrrmLE69KrxqQahKn4g= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= +cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= +cloud.google.com/go/spanner v1.47.0/go.mod h1:IXsJwVW2j4UKs0eYDqodab6HgGuA1bViSqW4uH9lfUI= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= +cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= +cloud.google.com/go/speech v1.17.1/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= +cloud.google.com/go/speech v1.19.0/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= +cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= +cloud.google.com/go/storagetransfer v1.10.0/go.mod h1:DM4sTlSmGiNczmV6iZyceIh2dbs+7z2Ayg6YAiQlYfA= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/talent v1.6.2/go.mod h1:CbGvmKCG61mkdjcqTcLOkb2ZN1SrQI8MDyma2l7VD24= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/texttospeech v1.7.1/go.mod h1:m7QfG5IXxeneGqTapXNxv2ItxP/FS0hCZBwXYqucgSk= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/tpu v1.6.1/go.mod h1:sOdcHVIgDEEOKuqUoi6Fq53MKHJAtOwtz0GuKsWSH3E= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= +cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/trace v1.10.1/go.mod h1:gbtL94KE5AJLH3y+WVpfWILmqgc6dXcqgNXdOPAQTYk= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= +cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.8.1/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/translate v1.8.2/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= +cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= +cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.17.1/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= +cloud.google.com/go/video v1.19.0/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= +cloud.google.com/go/videointelligence v1.11.1/go.mod h1:76xn/8InyQHarjTWsBR058SmlPCwQjgcvoW0aZykOvo= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= +cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +cloud.google.com/go/vision/v2 v2.7.2/go.mod h1:jKa8oSYBWhYiXarHPvP4USxYANYUEdEsQrloLjrSwJU= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= +cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= +cloud.google.com/go/vmmigration v1.7.1/go.mod h1:WD+5z7a/IpZ5bKK//YmT9E047AD+rjycCAvyMxGJbro= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= +cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= +cloud.google.com/go/vmwareengine v0.4.1/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= +cloud.google.com/go/vmwareengine v1.0.0/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= +cloud.google.com/go/vpcaccess v1.7.1/go.mod h1:FogoD46/ZU+JUBX9D606X21EnxiszYi2tArQwLY4SXs= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/webrisk v1.9.1/go.mod h1:4GCmXKcOa2BZcZPn6DCEvE7HypmEJcJkr4mtM+sqYPc= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= +cloud.google.com/go/websecurityscanner v1.6.1/go.mod h1:Njgaw3rttgRHXzwCB8kgCYqv5/rGpFCsBOvPbYgszpg= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= +cloud.google.com/go/workflows v1.11.1/go.mod h1:Z+t10G1wF7h8LgdY/EmRcQY8ptBD/nvofaL6FqlET6g= +dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= +dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= +github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= +github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= +github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= +github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= +github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver/v3 v3.3.0 h1:B8LGeaivUe71a5qox1ICM/JLl0NqZSW5CHyL+hmvYS0= +github.com/Masterminds/semver/v3 v3.3.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs= +github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0= +github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8afzqM= +github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8= +github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w= +github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= +github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= +github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= +github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= +github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= +github.com/apache/arrow/go/v12 v12.0.0/go.mod h1:d+tV/eHZZ7Dz7RPrFKtPK02tpr+c9/PEd/zm8mDS9Vg= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= github.com/arangodb-helper/go-certificates v0.0.0-20180821055445-9fca24fc2680 h1:5YCGq0gkf/sCEkDFIsMBPj59GOm5cMibGqDBH2OWWfQ= github.com/arangodb-helper/go-certificates v0.0.0-20180821055445-9fca24fc2680/go.mod h1:xDyzBwyYzcEhsaDXtmxCNM4p5BrtuoVYYsRTuJqmCeg= github.com/arangodb-helper/go-helper v0.4.2 h1:Ekf8EtPYQdhlwtqJAEn17i7zbtuavksWamasxcyOGWQ= github.com/arangodb-helper/go-helper v0.4.2/go.mod h1:RHgEwQTFWdJ9wFDGUCgUZzaz9NLaFUskSsHgOPM5XR4= +github.com/arangodb-managed/apis v0.83.3/go.mod h1:ZlvA803MmUI3m6ijvaAYKKaWgLJq8bBZZuq8uyZo2PY= +github.com/arangodb-managed/apis v0.85.0 h1:kttOyVZ8nTlEn7zkaUsKuPoFu3KcBPvoTx9TT8EsjIo= +github.com/arangodb-managed/apis v0.85.0/go.mod h1:ZlvA803MmUI3m6ijvaAYKKaWgLJq8bBZZuq8uyZo2PY= +github.com/arangodb-managed/apis v0.89.1 h1:qFzMhkV7Di5VfR2tZmWKMYAViCKho52Y5XCXH/iML9o= +github.com/arangodb-managed/apis v0.89.1/go.mod h1:NqGYEs2tPU9ZEC+2N1kYR8mvkeA3oQ2FAxgvX6rJLIw= +github.com/arangodb-managed/integration-apis v0.1.1 h1:M/+STV2XCjCSc7BtVY+c8fyIKrjLCvPAFknFyuRQxac= +github.com/arangodb-managed/integration-apis v0.1.1/go.mod h1:U+dREXyJPDt6gEOLlHbA+yqZJMVYs7I6uKAdOb1lT6c= +github.com/arangodb-managed/integration-apis v0.2.1 h1:/crCuhBCIIvx+r+RC3cMJ7Mo5FHDjclcwf5ENqUpTcY= +github.com/arangodb-managed/integration-apis v0.2.1/go.mod h1:yMK28s6LsYk7j0NfmuutYRSJI47iCcTTNWXmYGmi1h8= github.com/arangodb/arangosync-client v0.9.0 h1:XhY+5gGGpl9Gk8Prqmdv0SpK3HydFUXvN2CmTIKUxKI= github.com/arangodb/arangosync-client v0.9.0/go.mod h1:kU2UaOkv2AeHLAFMEo4Ug3qLbUQVKOuRtkfr6pZqmuk= +github.com/arangodb/go-agency-helper v0.4.1 h1:p/lbjz0ludEw30ig/Dv+lueZAIHIsTmXp/HQm5t5F94= +github.com/arangodb/go-agency-helper v0.4.1/go.mod h1:IMzQ1JilLu764DgFQ1qh21jPEzsMohcWQ4334BBxixE= +github.com/arangodb/go-driver v1.2.1/go.mod h1:zdDkJJnCj8DAkfbtIjIXnsTrWIiy6VhP3Vy14p+uQeY= github.com/arangodb/go-driver v1.6.1 h1:bnhrpbA4U1NU13JOWs5sWWYMtQwdjKT0+jkl8dSndyY= github.com/arangodb/go-driver v1.6.1/go.mod h1:ywucwwi34GBxxXFWw/ym+7/66//L4K9abxk/sFJro2k= github.com/arangodb/go-driver/v2 v2.0.3 h1:B/tKSgf4KSiLN0biqcH8Tm/Dj8nZdP5Lia2/xdy8KD0= @@ -14,33 +834,104 @@ github.com/arangodb/go-upgrade-rules v0.0.0-20180809110947-031b4774ff21 h1:+W7D5 github.com/arangodb/go-upgrade-rules v0.0.0-20180809110947-031b4774ff21/go.mod h1:RkPIG6JJ2pcJUoymc18NxAJGraZd+iAEVnOTDjZey/w= github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e h1:Xg+hGrY2LcQBbxd0ZFdbGSyRKTYMZCfBbw/pMJFOk1g= github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e/go.mod h1:mq7Shfa/CaixoDxiyAAc5jZ6CVBAyPaNQCGS7mkj4Ho= +github.com/arangodb/rebalancer v0.1.1 h1:8MikmxlhywKnw/wiDqctD8FFwBZhAAF1E3mIqh8nzCA= +github.com/arangodb/rebalancer v0.1.1/go.mod h1:wLvglmYNuoTUYbLQq/UESIMVkINmSX9eZWC5QB9kNyk= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 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/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= +github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= +github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= -github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= +github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230428030218-4003588d1b74/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b h1:ga8SEFjZ60pxLcmhnThWgvH2wg8376yUJmPhEH4H3kw= +github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI= +github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= +github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= +github.com/containerd/containerd v1.7.12 h1:+KQsnv4VnzyxWcfO9mlxxELaoztsDEjOuCMPAuPqgU0= +github.com/containerd/containerd v1.7.12/go.mod h1:/5OMpE1p0ylxtEUGY8kuCYkDRzJm9NO1TFMWjUpdevk= +github.com/containerd/continuity v0.4.2 h1:v3y/4Yz5jwnvqPKJJ+7Wf93fyWoCB3F5EclWG023MDM= +github.com/containerd/continuity v0.4.2/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= +github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= +github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/coreos/go-iptables v0.4.3/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/cyphar/filepath-securejoin v0.3.1 h1:1V7cHiaW+C+39wEfpH6XlLBQo3j/PciWFrgfCLS8XrE= +github.com/cyphar/filepath-securejoin v0.3.1/go.mod h1:F7i41x/9cBF7lzCrVsYs9fuzwRZm4NQsGTBdpp6mETc= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -48,27 +939,104 @@ github.com/dchest/siphash v1.2.2 h1:9DFz8tQwl9pTVt5iok/9zKyzA1Q6bRGiF3HPiEEVr9I= github.com/dchest/siphash v1.2.2/go.mod h1:q+IRvb2gOSrUnYoPqHiyHXS0FOBBOdl6tONBlVnOnt4= github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9 h1:74lLNRzvsdIlkTgfDSMuaPjBr4cf6k7pwQQANm/yLKU= github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9/go.mod h1:GgB8SF9nRG+GqaDtLcwJZsQFhcogVCJ79j4EdT0c2V4= +github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 h1:aBfCb7iqHmDEIp6fBvC/hQUddQfg+3qdYjwzaiP9Hnc= +github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI= +github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= +github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/cli v25.0.1+incompatible h1:mFpqnrS6Hsm3v1k7Wa/BO23oz0k121MTbTO1lpcGSkU= +github.com/docker/cli v25.0.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 v25.0.6+incompatible h1:5cPwbwriIcsua2REJe8HqQV+6WlWc1byg2QSXzBxBGg= +github.com/docker/docker v25.0.6+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= +github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= +github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= +github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.11.1 h1:wSUXTlLfiAQRWs2F+p+EKOY9rUyis1MyGqJ2DIk5HpM= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= +github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g= +github.com/envoyproxy/go-control-plane v0.13.1 h1:vPfJZCkob6yTMEgS+0TwfTUfbHjfy/6vOJ8hUWX/uXE= +github.com/envoyproxy/go-control-plane v0.13.1/go.mod h1:X45hY0mufo6Fd0KW3rqsGvQMw58jvjymeCzBU3mWyHw= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/envoyproxy/protoc-gen-validate v1.0.1/go.mod h1:0vj8bNkYbSTNS2PIyH87KZaeN4x9zpL9Qt8fQC7d+vs= github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= -github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI= -github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= +github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= +github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls= +github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/foxcpp/go-mockdns v1.1.0 h1:jI0rD8M0wuYAxL7r/ynTrCQQq0BVqfB99Vgk7DlmewI= +github.com/foxcpp/go-mockdns v1.1.0/go.mod h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= +github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= -github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs= +github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= @@ -77,6 +1045,8 @@ github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -85,272 +1055,1445 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= +github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= +github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/cel-go v0.20.1 h1:nDx9r8S3L4pE61eDdt8igGj8rf5kjYR3ILxWIpWNi84= +github.com/google/cel-go v0.20.1/go.mod h1:kWcIzTsPX0zmQ+H3TirHstLLf9ep5QTsZBN9u4dOYLg= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af h1:kmjWCqn2qkEml422C2Rrd27c3VGxi6a/6HNq8QmHRKM= +github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.0/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM= +github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= +github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28= -github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +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-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI= +github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= +github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jedib0t/go-pretty/v6 v6.6.5 h1:9PgMJOVBedpgYLI56jQRJYqngxYAAzfEUua+3NgSqAo= +github.com/jedib0t/go-pretty/v6 v6.6.5/go.mod h1:Uq/HrbhuFty5WSVNfjpQQe47x16RwVGXIveNGEyGtHs= github.com/jessevdk/go-assets v0.0.0-20160921144138-4f4301a06e15 h1:cW/amwGEJK5MSKntPXRjX4dxs/nGxGT8gXKIsKFmHGc= github.com/jessevdk/go-assets v0.0.0-20160921144138-4f4301a06e15/go.mod h1:Fdm/oWRW+CH8PRbLntksCNtmcCBximKPkVQYvmMl80k= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= +github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY= github.com/josephburnett/jd v1.6.1 h1:Uzqhcje4WqvVyp85F3Oj0ezISPTlnhnr/KaLZIy8qh0= github.com/josephburnett/jd v1.6.1/go.mod h1:R8ZnZnLt2D4rhW4NvBc/USTo6mzyNT6fYNIIWOJA9GY= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/maglev v0.2.0 h1:w6DCW0kAA6fstZqXkrBrlgIC3jeIRXkjOYea/m6EK/Y= github.com/kkdai/maglev v0.2.0/go.mod h1:d+mt8Lmt3uqi9aRb/BnPjzD0fy+ETs1vVXiGRnqHVZ4= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4= +github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw= +github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= +github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk= +github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw= github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= +github.com/lyft/protoc-gen-star/v2 v2.0.3/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= +github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= +github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= -github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM= +github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +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.4.0 h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8= +github.com/moby/spdystream v0.4.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= +github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78= +github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/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/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= -github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= -github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= -github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= +github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= +github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= +github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= +github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= +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/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pavel-v-chernykh/keystore-go v2.1.0+incompatible h1:Jd6xfriVlJ6hWPvYOE0Ni0QWcNTLRehfGPFxr3eSL80= github.com/pavel-v-chernykh/keystore-go v2.1.0+incompatible/go.mod h1:xlUlxe/2ItGlQyMTstqeDv9r3U4obH7xYd26TbDQutY= +github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.1.1 h1:LWAJwfNvjQZCFIDKWYQaM62NcYeYViCmWIwmOStowAI= github.com/pelletier/go-toml/v2 v2.1.1/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= +github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= +github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= +github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY= +github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg= github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.71.2 h1:HZdPRm0ApWPg7F4sHgbqWkL+ddWfpTZsopm5HM/2g4o= github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.71.2/go.mod h1:3RiUkFmR9kmPZi9r/8a5jw0a9yg+LMmr7qa0wjqvSiI= github.com/prometheus-operator/prometheus-operator/pkg/client v0.71.2 h1:7eyX8MypewjShiOFj6sOX+Ad+EJUIQ5qzdvM/U76cHs= github.com/prometheus-operator/prometheus-operator/pkg/client v0.71.2/go.mod h1:dH5cun6jo8vesIzplptAQpdXW9dL8rD2jpvWylG4B6s= -github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= -github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= +github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= +github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= -github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= -github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= -github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= -github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= +github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= +github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/prometheus/prom2json v1.3.3 h1:IYfSMiZ7sSOfliBoo89PcufjWO4eAR0gznGcETyaUgo= github.com/prometheus/prom2json v1.3.3/go.mod h1:Pv4yIPktEkK7btWsrUTWDDDrnpUrAELaOCj+oFwlgmc= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.19.0 h1:hYz4ZVdUgjXTBUmrkrw55j1nHx68LfOKIQk5IYtyScg= github.com/rs/zerolog v1.19.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= +github.com/rubenv/sql-migrate v1.7.0 h1:HtQq1xyTN2ISmQDggnh0c9U3JlP8apWh8YO2jzlXpTI= +github.com/rubenv/sql-migrate v1.7.0/go.mod h1:S4wtDEG1CKn+0ShpTtzWhFpHHI5PvCUtiGI+C+Z2THE= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= +github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= +github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= 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/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= +github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= +github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.14 h1:vHObSCxyB9zlF60w7qzAdTcGaglbJOpSj1Xj9+WGxq0= +go.etcd.io/etcd/api/v3 v3.5.14/go.mod h1:BmtWcRlQvwa1h3G2jvKYwIQy4PkHlDej5t7uLMUdJUU= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.14 h1:SaNH6Y+rVEdxfpA2Jr5wkEvN6Zykme5+YnbCkxvuWxQ= +go.etcd.io/etcd/client/pkg/v3 v3.5.14/go.mod h1:8uMgAokyG1czCtIdsq+AGyYQMvpIKnSvPjFMunkgeZI= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v3 v3.5.14 h1:CWfRs4FDaDoSz81giL7zPpZH2Z35tbOrAJkkjMqOupg= +go.etcd.io/etcd/client/v3 v3.5.14/go.mod h1:k3XfdV/VIHy/97rqWjoUzrj9tk7GgJGH9J8L4dNXmAk= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 h1:9G6E0TXzGFVfTnawRzrPl83iHOAV7L8NJiR8RSGYV1g= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= +go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= +go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ= +go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= +go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= +go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= +go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= +go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= +go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= +go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= +go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY= +go.starlark.net v0.0.0-20230525235612-a134d8f9ddca/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= +golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= +golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= -golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= +golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= +golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= +golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= +golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= -golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= +google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= +google.golang.org/api v0.118.0/go.mod h1:76TtD3vkgmZ66zZzp72bUUklpmQmKlhh6sYtIjYK+5E= +google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4= +google.golang.org/api v0.125.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU= -google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917 h1:6G8oQ016D88m1xAKljMlBOOGWDZkes4kMhgGFlf8WcQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917/go.mod h1:xtjpI3tXFPP051KaWnhvxkiubL/6dJ18vLVf7q2pTOU= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY= +google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= +google.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= +google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:0ggbjUrZYpy1q+ANUS30SEoGZ53cdfwtbuG7Ptgy108= +google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d h1:VBu5YqKPv6XiJ199exd8Br+Aetz+o08F+PLMnwJQHAY= +google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:mPBs5jNgx2GuQGvFwUvVKqtn6HsUw9nP64BedgvqEsQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q= +google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= +google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 h1:7whR9kGa5LUwFtpLm2ArCEejtnxlGeLbAyjFY8sGNFw= +google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU= +google.golang.org/genproto/googleapis/api v0.0.0-20241113202542-65e8d215514f h1:M65LEviCfuZTfrfzwwEoxVtgvfkFkBUbFnRbxCXuXhU= +google.golang.org/genproto/googleapis/api v0.0.0-20241113202542-65e8d215514f/go.mod h1:Yo94eF2nj7igQt+TiJ49KxjIH8ndLYPZMIRSiRcEbg0= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230731190214-cbb8c96f2d6d/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 h1:BwIjyKYGsK9dMCBOorzRri8MQwmi7mT9rGHsCEinZkA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241113202542-65e8d215514f h1:C1QccEa9kUwvMgEUORqQD9S17QesQijxjZ84sO82mfo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241113202542-65e8d215514f/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= -google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= +google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= +google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= +google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= +gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= +helm.sh/helm/v3 v3.16.2 h1:Y9v7ry+ubQmi+cb5zw1Llx8OKHU9Hk9NQ/+P+LGBe2o= +helm.sh/helm/v3 v3.16.2/go.mod h1:SyTXgKBjNqi2NPsHCW5dDAsHqvGIu0kdNYNH9gQaw70= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.29.6 h1:eDxIl8+PeEpwbe2YyS5RXJ9vdn4hnKWMBf4WUJP9DQM= -k8s.io/api v0.29.6/go.mod h1:ZuUPMhJV74DJXapldbg6upaHfiOjrBb+0ffUbBi1jaw= -k8s.io/apiextensions-apiserver v0.29.6 h1:tUu1N6Zt9GT8KVcPF5aGDqfISz1mveM4yFh7eL5bxmE= -k8s.io/apiextensions-apiserver v0.29.6/go.mod h1:iw1EbwZat08I219qrQKoFMHGo7J9KxPqMpVKxCbNbCs= -k8s.io/apimachinery v0.29.6 h1:CLjJ5b0hWW7531n/njRE3rnusw3rhVGCFftPfnG54CI= -k8s.io/apimachinery v0.29.6/go.mod h1:i3FJVwhvSp/6n8Fl4K97PJEP8C+MM+aoDq4+ZJBf70Y= -k8s.io/client-go v0.29.6 h1:5E2ebuB/p0F0THuQatyvhDvPL2SIeqwTPrtnrwKob/8= -k8s.io/client-go v0.29.6/go.mod h1:jHZcrQqDplyv20v7eu+iFM4gTpglZSZoMVcKrh8sRGg= -k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= -k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= -k8s.io/kube-openapi v0.0.0-20231129212854-f0671cc7e66a h1:ZeIPbyHHqahGIbeyLJJjAUhnxCKqXaDY+n89Ms8szyA= -k8s.io/kube-openapi v0.0.0-20231129212854-f0671cc7e66a/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= -k8s.io/utils v0.0.0-20231127182322-b307cd553661 h1:FepOBzJ0GXm8t0su67ln2wAZjbQ6RxQGZDnzuLcrUTI= -k8s.io/utils v0.0.0-20231127182322-b307cd553661/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +k8s.io/api v0.31.1 h1:Xe1hX/fPW3PXYYv8BlozYqw63ytA92snr96zMW9gWTU= +k8s.io/api v0.31.1/go.mod h1:sbN1g6eY6XVLeqNsZGLnI5FwVseTrZX7Fv3O26rhAaI= +k8s.io/api v0.31.2 h1:3wLBbL5Uom/8Zy98GRPXpJ254nEFpl+hwndmk9RwmL0= +k8s.io/api v0.31.2/go.mod h1:bWmGvrGPssSK1ljmLzd3pwCQ9MgoTsRCuK35u6SygUk= +k8s.io/apiextensions-apiserver v0.31.1 h1:L+hwULvXx+nvTYX/MKM3kKMZyei+UiSXQWciX/N6E40= +k8s.io/apiextensions-apiserver v0.31.1/go.mod h1:tWMPR3sgW+jsl2xm9v7lAyRF1rYEK71i9G5dRtkknoQ= +k8s.io/apiextensions-apiserver v0.31.2 h1:W8EwUb8+WXBLu56ser5IudT2cOho0gAKeTOnywBLxd0= +k8s.io/apiextensions-apiserver v0.31.2/go.mod h1:i+Geh+nGCJEGiCGR3MlBDkS7koHIIKWVfWeRFiOsUcM= +k8s.io/apimachinery v0.31.1 h1:mhcUBbj7KUjaVhyXILglcVjuS4nYXiwC+KKFBgIVy7U= +k8s.io/apimachinery v0.31.1/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/apimachinery v0.31.2 h1:i4vUt2hPK56W6mlT7Ry+AO8eEsyxMD1U44NR22CLTYw= +k8s.io/apimachinery v0.31.2/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/apiserver v0.31.1 h1:Sars5ejQDCRBY5f7R3QFHdqN3s61nhkpaX8/k1iEw1c= +k8s.io/apiserver v0.31.1/go.mod h1:lzDhpeToamVZJmmFlaLwdYZwd7zB+WYRYIboqA1kGxM= +k8s.io/apiserver v0.31.2 h1:VUzOEUGRCDi6kX1OyQ801m4A7AUPglpsmGvdsekmcI4= +k8s.io/apiserver v0.31.2/go.mod h1:o3nKZR7lPlJqkU5I3Ove+Zx3JuoFjQobGX1Gctw6XuE= +k8s.io/cli-runtime v0.31.1 h1:/ZmKhmZ6hNqDM+yf9s3Y4KEYakNXUn5sod2LWGGwCuk= +k8s.io/cli-runtime v0.31.1/go.mod h1:pKv1cDIaq7ehWGuXQ+A//1OIF+7DI+xudXtExMCbe9U= +k8s.io/client-go v0.31.1 h1:f0ugtWSbWpxHR7sjVpQwuvw9a3ZKLXX0u0itkFXufb0= +k8s.io/client-go v0.31.1/go.mod h1:sKI8871MJN2OyeqRlmA4W4KM9KBdBUpDLu/43eGemCg= +k8s.io/client-go v0.31.2 h1:Y2F4dxU5d3AQj+ybwSMqQnpZH9F30//1ObxOKlTI9yc= +k8s.io/client-go v0.31.2/go.mod h1:NPa74jSVR/+eez2dFsEIHNa+3o09vtNaWwWwb1qSxSs= +k8s.io/cloud-provider v0.31.2 h1:ZdstxJOcHzP45j8giE79VJmgNckBbw1ldtIqnhZvKIA= +k8s.io/cloud-provider v0.31.2/go.mod h1:+4L8YpYCEx1Ko5EKS/PzXyBY5YREwDKChsJjAxHRf08= +k8s.io/cluster-bootstrap v0.31.2 h1:tnycetMTbbCysYcx6AolV7DvPA/WXMnAYIl/vXIm7kM= +k8s.io/cluster-bootstrap v0.31.2/go.mod h1:V4D+Zc7aJ5dcRYualA94kGN95ELRM61xegQpVN2ruY8= +k8s.io/component-base v0.31.1 h1:UpOepcrX3rQ3ab5NB6g5iP0tvsgJWzxTyAo20sgYSy8= +k8s.io/component-base v0.31.1/go.mod h1:WGeaw7t/kTsqpVTaCoVEtillbqAhF2/JgvO0LDOMa0w= +k8s.io/component-base v0.31.2 h1:Z1J1LIaC0AV+nzcPRFqfK09af6bZ4D1nAOpWsy9owlA= +k8s.io/component-base v0.31.2/go.mod h1:9PeyyFN/drHjtJZMCTkSpQJS3U9OXORnHQqMLDz0sUQ= +k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70 h1:NGrVE502P0s0/1hudf8zjgwki1X/TByhmAoILTarmzo= +k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +k8s.io/kms v0.31.2 h1:pyx7l2qVOkClzFMIWMVF/FxsSkgd+OIGH7DecpbscJI= +k8s.io/kms v0.31.2/go.mod h1:OZKwl1fan3n3N5FFxnW5C4V3ygrah/3YXeJWS3O6+94= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= +k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= +k8s.io/kubectl v0.31.1 h1:ih4JQJHxsEggFqDJEHSOdJ69ZxZftgeZvYo7M/cpp24= +k8s.io/kubectl v0.31.1/go.mod h1:aNuQoR43W6MLAtXQ/Bu4GDmoHlbhHKuyD49lmTC8eJM= +k8s.io/metrics v0.31.2 h1:sQhujR9m3HN/Nu/0fTfTscjnswQl0qkQAodEdGBS0N4= +k8s.io/metrics v0.31.2/go.mod h1:QqqyReApEWO1UEgXOSXiHCQod6yTxYctbAAQBWZkboU= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.37.0/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= +modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= +modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= +modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= +modernc.org/ccgo/v3 v3.0.0-20220904174949-82d86e1b6d56/go.mod h1:YSXjPL62P2AMSxBphRHPn7IkzhVHqkvOnRKAKh+W6ZI= +modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= +modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= +modernc.org/ccgo/v3 v3.16.13-0.20221017192402-261537637ce8/go.mod h1:fUB3Vn0nVPReA+7IG7yZDfjv1TMWjhQP8gCxrFAtL5g= +modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= +modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= +modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= +modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= +modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= +modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA= +modernc.org/libc v1.18.0/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0= +modernc.org/libc v1.20.3/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= +modernc.org/libc v1.21.4/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= +modernc.org/libc v1.22.2/go.mod h1:uvQavJ1pZ0hIoC/jfqNoMLURIMhKzINIWypNM17puug= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= +modernc.org/sqlite v1.18.2/go.mod h1:kvrTLEWgxUcHa2GfHBQtanR1H9ht3hTJNtKpzH9k1u0= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= +modernc.org/tcl v1.13.2/go.mod h1:7CLiGIPo1M8Rv1Mitpv5akc2+8fxUd2y2UzC/MfMzy0= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= +oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo= +oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 h1:2770sDpzrjjsAtVhSeUFseziht227YAWYHLGNM8QPwY= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw= sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/kustomize/api v0.17.2 h1:E7/Fjk7V5fboiuijoZHgs4aHuexi5Y2loXlVOAVAG5g= +sigs.k8s.io/kustomize/api v0.17.2/go.mod h1:UWTz9Ct+MvoeQsHcJ5e+vziRRkwimm3HytpZgIYqye0= +sigs.k8s.io/kustomize/kyaml v0.17.1 h1:TnxYQxFXzbmNG6gOINgGWQt09GghzgTP6mIurOgrLCQ= +sigs.k8s.io/kustomize/kyaml v0.17.1/go.mod h1:9V0mCjIEYjlXuCdYsSXvyoy2BTsLESH7TlGV81S282U= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= diff --git a/integrations/config/v1/definition/config.pb.go b/integrations/config/v1/definition/config.pb.go index eb38dd889..220e9feb9 100644 --- a/integrations/config/v1/definition/config.pb.go +++ b/integrations/config/v1/definition/config.pb.go @@ -354,9 +354,9 @@ type ConfigV1File struct { // Sha256Sum of the file (if requested) Checksum *string `protobuf:"bytes,3,opt,name=checksum,proto3,oneof" json:"checksum,omitempty"` // Timestamp of the file creation - CreatedAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + Created *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` // Timestamp of the file update - UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + Updated *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=updated,proto3" json:"updated,omitempty"` } func (x *ConfigV1File) Reset() { @@ -412,16 +412,16 @@ func (x *ConfigV1File) GetChecksum() string { return "" } -func (x *ConfigV1File) GetCreatedAt() *timestamppb.Timestamp { +func (x *ConfigV1File) GetCreated() *timestamppb.Timestamp { if x != nil { - return x.CreatedAt + return x.Created } return nil } -func (x *ConfigV1File) GetUpdatedAt() *timestamppb.Timestamp { +func (x *ConfigV1File) GetUpdated() *timestamppb.Timestamp { if x != nil { - return x.UpdatedAt + return x.Updated } return nil } @@ -470,41 +470,40 @@ var file_integrations_config_v1_definition_config_proto_rawDesc = []byte{ 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x31, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, - 0x22, 0xda, 0x01, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x31, 0x46, 0x69, 0x6c, + 0x22, 0xd0, 0x01, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x31, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1f, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x32, 0xfb, 0x01, - 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x31, 0x12, 0x39, 0x0a, 0x07, 0x4d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x56, 0x31, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0d, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x31, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x07, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x12, 0x34, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x73, 0x75, 0x6d, 0x32, 0xfb, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x31, + 0x12, 0x39, 0x0a, 0x07, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x64, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x31, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x0d, 0x4d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x31, 0x4d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x12, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x56, 0x31, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x31, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x45, 0x5a, 0x43, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x61, 0x6e, 0x67, 0x6f, - 0x64, 0x62, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x2d, 0x61, 0x72, 0x61, 0x6e, 0x67, 0x6f, 0x64, 0x62, - 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x64, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x56, 0x31, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x0b, 0x46, 0x69, 0x6c, + 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x31, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x31, 0x46, 0x69, + 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x42, 0x45, 0x5a, 0x43, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x61, 0x72, 0x61, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x2d, 0x61, 0x72, + 0x61, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -533,8 +532,8 @@ var file_integrations_config_v1_definition_config_proto_goTypes = []interface{}{ var file_integrations_config_v1_definition_config_proto_depIdxs = []int32{ 5, // 0: config.ConfigV1ModuleDetailsResponse.files:type_name -> config.ConfigV1File 5, // 1: config.ConfigV1FileDetailsResponse.file:type_name -> config.ConfigV1File - 6, // 2: config.ConfigV1File.created_at:type_name -> google.protobuf.Timestamp - 6, // 3: config.ConfigV1File.updated_at:type_name -> google.protobuf.Timestamp + 6, // 2: config.ConfigV1File.created:type_name -> google.protobuf.Timestamp + 6, // 3: config.ConfigV1File.updated:type_name -> google.protobuf.Timestamp 7, // 4: config.ConfigV1.Modules:input_type -> shared.Empty 1, // 5: config.ConfigV1.ModuleDetails:input_type -> config.ConfigV1ModuleDetailsRequest 3, // 6: config.ConfigV1.FileDetails:input_type -> config.ConfigV1FileDetailsRequest diff --git a/integrations/config/v1/definition/config.proto b/integrations/config/v1/definition/config.proto index 72c280549..c5d8831d4 100644 --- a/integrations/config/v1/definition/config.proto +++ b/integrations/config/v1/definition/config.proto @@ -30,8 +30,11 @@ option go_package = "github.com/arangodb/kube-arangodb/integrations/config/v1/de // ConfigV1 Service implementation service ConfigV1 { + // Returns list of registered modules rpc Modules(shared.Empty) returns (ConfigV1ModulesResponse); + // Returns details of the module rpc ModuleDetails(ConfigV1ModuleDetailsRequest) returns (ConfigV1ModuleDetailsResponse); + // Returns file details rpc FileDetails(ConfigV1FileDetailsRequest) returns (ConfigV1FileDetailsResponse); } @@ -99,8 +102,8 @@ message ConfigV1File { optional string checksum = 3; // Timestamp of the file creation - google.protobuf.Timestamp created_at = 4; + google.protobuf.Timestamp created = 4; // Timestamp of the file update - google.protobuf.Timestamp updated_at = 5; + google.protobuf.Timestamp updated = 5; } \ No newline at end of file diff --git a/integrations/config/v1/definition/config_grpc.pb.go b/integrations/config/v1/definition/config_grpc.pb.go index 61215d82f..82a7d074f 100644 --- a/integrations/config/v1/definition/config_grpc.pb.go +++ b/integrations/config/v1/definition/config_grpc.pb.go @@ -23,8 +23,11 @@ const _ = grpc.SupportPackageIsVersion7 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type ConfigV1Client interface { + // Returns list of registered modules Modules(ctx context.Context, in *definition.Empty, opts ...grpc.CallOption) (*ConfigV1ModulesResponse, error) + // Returns details of the module ModuleDetails(ctx context.Context, in *ConfigV1ModuleDetailsRequest, opts ...grpc.CallOption) (*ConfigV1ModuleDetailsResponse, error) + // Returns file details FileDetails(ctx context.Context, in *ConfigV1FileDetailsRequest, opts ...grpc.CallOption) (*ConfigV1FileDetailsResponse, error) } @@ -67,8 +70,11 @@ func (c *configV1Client) FileDetails(ctx context.Context, in *ConfigV1FileDetail // All implementations must embed UnimplementedConfigV1Server // for forward compatibility type ConfigV1Server interface { + // Returns list of registered modules Modules(context.Context, *definition.Empty) (*ConfigV1ModulesResponse, error) + // Returns details of the module ModuleDetails(context.Context, *ConfigV1ModuleDetailsRequest) (*ConfigV1ModuleDetailsResponse, error) + // Returns file details FileDetails(context.Context, *ConfigV1FileDetailsRequest) (*ConfigV1FileDetailsResponse, error) mustEmbedUnimplementedConfigV1Server() } diff --git a/integrations/config/v1/impl_darwin.go b/integrations/config/v1/impl_darwin.go index 6e265afa7..409ceda87 100644 --- a/integrations/config/v1/impl_darwin.go +++ b/integrations/config/v1/impl_darwin.go @@ -64,8 +64,8 @@ func (i *impl) fileDetails(module ModuleDefinition, file string, checksum bool) f.Path = strings.TrimPrefix(expectedPath, fmt.Sprintf("%s/", module.Path)) f.Size = finfo.Size - f.CreatedAt = timestamppb.New(time.Unix(finfo.Ctimespec.Sec, finfo.Ctimespec.Nsec)) - f.UpdatedAt = timestamppb.New(time.Unix(finfo.Mtimespec.Sec, finfo.Mtimespec.Nsec)) + f.Created = timestamppb.New(time.Unix(finfo.Ctimespec.Sec, finfo.Ctimespec.Nsec)) + f.Updated = timestamppb.New(time.Unix(finfo.Mtimespec.Sec, finfo.Mtimespec.Nsec)) if checksum { c, err := util.SHA256FromFile(expectedPath) diff --git a/integrations/config/v1/impl_linux.go b/integrations/config/v1/impl_linux.go index cc5091702..d7b683092 100644 --- a/integrations/config/v1/impl_linux.go +++ b/integrations/config/v1/impl_linux.go @@ -64,8 +64,8 @@ func (i *impl) fileDetails(module ModuleDefinition, file string, checksum bool) f.Path = strings.TrimPrefix(expectedPath, fmt.Sprintf("%s/", module.Path)) f.Size = finfo.Size - f.CreatedAt = timestamppb.New(time.Unix(finfo.Ctim.Sec, finfo.Ctim.Nsec)) - f.UpdatedAt = timestamppb.New(time.Unix(finfo.Mtim.Sec, finfo.Mtim.Nsec)) + f.Created = timestamppb.New(time.Unix(finfo.Ctim.Sec, finfo.Ctim.Nsec)) + f.Updated = timestamppb.New(time.Unix(finfo.Mtim.Sec, finfo.Mtim.Nsec)) if checksum { c, err := util.SHA256FromFile(expectedPath) diff --git a/integrations/envoy/auth/v3/response.go b/integrations/envoy/auth/v3/response.go index 15cc2499b..e65dc3959 100644 --- a/integrations/envoy/auth/v3/response.go +++ b/integrations/envoy/auth/v3/response.go @@ -66,7 +66,7 @@ func (d DeniedResponse) GetCheckResponse() (*pbEnvoyAuthV3.CheckResponse, error) resp.Body = string(z) resp.Headers = append(resp.Headers, &corev3.HeaderValueOption{ Header: &corev3.HeaderValue{ - Key: "content/type", + Key: "content-type", Value: "application/json", }, AppendAction: corev3.HeaderValueOption_OVERWRITE_IF_EXISTS_OR_ADD, diff --git a/integrations/pong/v1/definition/pong.pb.go b/integrations/pong/v1/definition/pong.pb.go index 2466d3c5a..a5f103843 100644 --- a/integrations/pong/v1/definition/pong.pb.go +++ b/integrations/pong/v1/definition/pong.pb.go @@ -91,6 +91,122 @@ func (x *PongV1PingResponse) GetTime() *timestamppb.Timestamp { return nil } +// PongV1 Services Call Response +type PongV1ServicesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of the Services + Services []*PongV1Service `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"` +} + +func (x *PongV1ServicesResponse) Reset() { + *x = PongV1ServicesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_pong_v1_definition_pong_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PongV1ServicesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PongV1ServicesResponse) ProtoMessage() {} + +func (x *PongV1ServicesResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_pong_v1_definition_pong_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PongV1ServicesResponse.ProtoReflect.Descriptor instead. +func (*PongV1ServicesResponse) Descriptor() ([]byte, []int) { + return file_integrations_pong_v1_definition_pong_proto_rawDescGZIP(), []int{1} +} + +func (x *PongV1ServicesResponse) GetServices() []*PongV1Service { + if x != nil { + return x.Services + } + return nil +} + +// Service Definition +type PongV1Service struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Service Name + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Service Version + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // states if service is enabled + Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` +} + +func (x *PongV1Service) Reset() { + *x = PongV1Service{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_pong_v1_definition_pong_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PongV1Service) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PongV1Service) ProtoMessage() {} + +func (x *PongV1Service) ProtoReflect() protoreflect.Message { + mi := &file_integrations_pong_v1_definition_pong_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PongV1Service.ProtoReflect.Descriptor instead. +func (*PongV1Service) Descriptor() ([]byte, []int) { + return file_integrations_pong_v1_definition_pong_proto_rawDescGZIP(), []int{2} +} + +func (x *PongV1Service) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PongV1Service) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *PongV1Service) GetEnabled() bool { + if x != nil { + return x.Enabled + } + return false +} + var File_integrations_pong_v1_definition_pong_proto protoreflect.FileDescriptor var file_integrations_pong_v1_definition_pong_proto_rawDesc = []byte{ @@ -106,15 +222,29 @@ var file_integrations_pong_v1_definition_pong_proto_rawDesc = []byte{ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x32, 0x39, 0x0a, 0x06, 0x50, 0x6f, 0x6e, 0x67, - 0x56, 0x31, 0x12, 0x2f, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x0d, 0x2e, 0x73, 0x68, 0x61, - 0x72, 0x65, 0x64, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x70, 0x6f, 0x6e, 0x67, - 0x2e, 0x50, 0x6f, 0x6e, 0x67, 0x56, 0x31, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x43, 0x5a, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x61, 0x72, 0x61, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x2d, - 0x61, 0x72, 0x61, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x70, 0x6f, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x49, 0x0a, 0x16, 0x50, 0x6f, 0x6e, 0x67, + 0x56, 0x31, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x6f, 0x6e, 0x67, 0x2e, 0x50, 0x6f, 0x6e, 0x67, + 0x56, 0x31, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x22, 0x57, 0x0a, 0x0d, 0x50, 0x6f, 0x6e, 0x67, 0x56, 0x31, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x32, 0x72, 0x0a, 0x06, + 0x50, 0x6f, 0x6e, 0x67, 0x56, 0x31, 0x12, 0x2f, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x0d, + 0x2e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, + 0x70, 0x6f, 0x6e, 0x67, 0x2e, 0x50, 0x6f, 0x6e, 0x67, 0x56, 0x31, 0x50, 0x69, 0x6e, 0x67, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x12, 0x0d, 0x2e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x45, 0x6d, 0x70, + 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x70, 0x6f, 0x6e, 0x67, 0x2e, 0x50, 0x6f, 0x6e, 0x67, 0x56, 0x31, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x42, 0x43, 0x5a, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, + 0x72, 0x61, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x2d, 0x61, 0x72, 0x61, + 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x70, 0x6f, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -129,21 +259,26 @@ func file_integrations_pong_v1_definition_pong_proto_rawDescGZIP() []byte { return file_integrations_pong_v1_definition_pong_proto_rawDescData } -var file_integrations_pong_v1_definition_pong_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_integrations_pong_v1_definition_pong_proto_msgTypes = make([]protoimpl.MessageInfo, 3) var file_integrations_pong_v1_definition_pong_proto_goTypes = []interface{}{ - (*PongV1PingResponse)(nil), // 0: pong.PongV1PingResponse - (*timestamppb.Timestamp)(nil), // 1: google.protobuf.Timestamp - (*definition.Empty)(nil), // 2: shared.Empty + (*PongV1PingResponse)(nil), // 0: pong.PongV1PingResponse + (*PongV1ServicesResponse)(nil), // 1: pong.PongV1ServicesResponse + (*PongV1Service)(nil), // 2: pong.PongV1Service + (*timestamppb.Timestamp)(nil), // 3: google.protobuf.Timestamp + (*definition.Empty)(nil), // 4: shared.Empty } var file_integrations_pong_v1_definition_pong_proto_depIdxs = []int32{ - 1, // 0: pong.PongV1PingResponse.time:type_name -> google.protobuf.Timestamp - 2, // 1: pong.PongV1.Ping:input_type -> shared.Empty - 0, // 2: pong.PongV1.Ping:output_type -> pong.PongV1PingResponse - 2, // [2:3] is the sub-list for method output_type - 1, // [1:2] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name + 3, // 0: pong.PongV1PingResponse.time:type_name -> google.protobuf.Timestamp + 2, // 1: pong.PongV1ServicesResponse.services:type_name -> pong.PongV1Service + 4, // 2: pong.PongV1.Ping:input_type -> shared.Empty + 4, // 3: pong.PongV1.Services:input_type -> shared.Empty + 0, // 4: pong.PongV1.Ping:output_type -> pong.PongV1PingResponse + 1, // 5: pong.PongV1.Services:output_type -> pong.PongV1ServicesResponse + 4, // [4:6] is the sub-list for method output_type + 2, // [2:4] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name } func init() { file_integrations_pong_v1_definition_pong_proto_init() } @@ -164,6 +299,30 @@ func file_integrations_pong_v1_definition_pong_proto_init() { return nil } } + file_integrations_pong_v1_definition_pong_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PongV1ServicesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_pong_v1_definition_pong_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PongV1Service); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -171,7 +330,7 @@ func file_integrations_pong_v1_definition_pong_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_integrations_pong_v1_definition_pong_proto_rawDesc, NumEnums: 0, - NumMessages: 1, + NumMessages: 3, NumExtensions: 0, NumServices: 1, }, diff --git a/integrations/pong/v1/definition/pong.proto b/integrations/pong/v1/definition/pong.proto index ecd4505f6..810dcc45b 100644 --- a/integrations/pong/v1/definition/pong.proto +++ b/integrations/pong/v1/definition/pong.proto @@ -30,7 +30,11 @@ option go_package = "github.com/arangodb/kube-arangodb/integrations/pong/v1/defi // PongV1 Service implementation service PongV1 { + // Sends ping to the server rpc Ping(shared.Empty) returns (PongV1PingResponse); + + // Asks for the services details + rpc Services(shared.Empty) returns (PongV1ServicesResponse); } // Responses @@ -40,4 +44,20 @@ service PongV1 { message PongV1PingResponse { // Current time in UTC google.protobuf.Timestamp time = 1; +} + +// PongV1 Services Call Response +message PongV1ServicesResponse { + // List of the Services + repeated PongV1Service services = 1; +} + +// Service Definition +message PongV1Service { + // Service Name + string name = 1; + // Service Version + string version = 2; + // states if service is enabled + bool enabled = 3; } \ No newline at end of file diff --git a/integrations/pong/v1/definition/pong_grpc.pb.go b/integrations/pong/v1/definition/pong_grpc.pb.go index 9e3a04386..90822e623 100644 --- a/integrations/pong/v1/definition/pong_grpc.pb.go +++ b/integrations/pong/v1/definition/pong_grpc.pb.go @@ -23,7 +23,10 @@ const _ = grpc.SupportPackageIsVersion7 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type PongV1Client interface { + // Sends ping to the server Ping(ctx context.Context, in *definition.Empty, opts ...grpc.CallOption) (*PongV1PingResponse, error) + // Asks for the services details + Services(ctx context.Context, in *definition.Empty, opts ...grpc.CallOption) (*PongV1ServicesResponse, error) } type pongV1Client struct { @@ -43,11 +46,23 @@ func (c *pongV1Client) Ping(ctx context.Context, in *definition.Empty, opts ...g return out, nil } +func (c *pongV1Client) Services(ctx context.Context, in *definition.Empty, opts ...grpc.CallOption) (*PongV1ServicesResponse, error) { + out := new(PongV1ServicesResponse) + err := c.cc.Invoke(ctx, "/pong.PongV1/Services", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // PongV1Server is the server API for PongV1 service. // All implementations must embed UnimplementedPongV1Server // for forward compatibility type PongV1Server interface { + // Sends ping to the server Ping(context.Context, *definition.Empty) (*PongV1PingResponse, error) + // Asks for the services details + Services(context.Context, *definition.Empty) (*PongV1ServicesResponse, error) mustEmbedUnimplementedPongV1Server() } @@ -58,6 +73,9 @@ type UnimplementedPongV1Server struct { func (UnimplementedPongV1Server) Ping(context.Context, *definition.Empty) (*PongV1PingResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") } +func (UnimplementedPongV1Server) Services(context.Context, *definition.Empty) (*PongV1ServicesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Services not implemented") +} func (UnimplementedPongV1Server) mustEmbedUnimplementedPongV1Server() {} // UnsafePongV1Server may be embedded to opt out of forward compatibility for this service. @@ -89,6 +107,24 @@ func _PongV1_Ping_Handler(srv interface{}, ctx context.Context, dec func(interfa return interceptor(ctx, in, info, handler) } +func _PongV1_Services_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(definition.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PongV1Server).Services(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pong.PongV1/Services", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PongV1Server).Services(ctx, req.(*definition.Empty)) + } + return interceptor(ctx, in, info, handler) +} + // PongV1_ServiceDesc is the grpc.ServiceDesc for PongV1 service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -100,6 +136,10 @@ var PongV1_ServiceDesc = grpc.ServiceDesc{ MethodName: "Ping", Handler: _PongV1_Ping_Handler, }, + { + MethodName: "Services", + Handler: _PongV1_Services_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "integrations/pong/v1/definition/pong.proto", diff --git a/integrations/pong/v1/impl.go b/integrations/pong/v1/impl.go index 42b5e48ba..6cab661d4 100644 --- a/integrations/pong/v1/impl.go +++ b/integrations/pong/v1/impl.go @@ -29,17 +29,54 @@ import ( pbPongV1 "github.com/arangodb/kube-arangodb/integrations/pong/v1/definition" pbSharedV1 "github.com/arangodb/kube-arangodb/integrations/shared/v1/definition" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/svc" ) -func New() svc.Handler { - return &impl{} +type Service struct { + Name, Version string + Enabled bool +} + +func (s Service) asService() *pbPongV1.PongV1Service { + return &pbPongV1.PongV1Service{ + Name: s.Name, + Version: s.Version, + Enabled: s.Enabled, + } +} + +func New(services ...Service) (svc.Handler, error) { + pServices := make(util.List[Service], 0, len(services)) + + for _, svc := range services { + if pServices.Contains(func(service Service) bool { + return service.Name == svc.Name && service.Version == svc.Version + }) { + return nil, errors.Errorf("Service %s/%s already registered", svc.Name, svc.Version) + } + + pServices = pServices.Append(svc) + } + + pServices = pServices.Sort(func(a Service, b Service) bool { + if a.Name == b.Name { + return a.Version < b.Version + } + + return a.Name < b.Name + }) + + return &impl{services: pServices.List()}, nil } var _ pbPongV1.PongV1Server = &impl{} var _ svc.Handler = &impl{} type impl struct { + services []Service + pbPongV1.UnimplementedPongV1Server } @@ -54,6 +91,19 @@ func (i *impl) Health() svc.HealthState { func (i *impl) Register(registrar *grpc.Server) { pbPongV1.RegisterPongV1Server(registrar, i) } + func (i *impl) Ping(context.Context, *pbSharedV1.Empty) (*pbPongV1.PongV1PingResponse, error) { return &pbPongV1.PongV1PingResponse{Time: timestamppb.New(time.Now().UTC())}, nil } + +func (i *impl) Services(context.Context, *pbSharedV1.Empty) (*pbPongV1.PongV1ServicesResponse, error) { + var r = make([]*pbPongV1.PongV1Service, len(i.services)) + + for id := range i.services { + r[id] = i.services[id].asService() + } + + return &pbPongV1.PongV1ServicesResponse{ + Services: r, + }, nil +} diff --git a/integrations/pong/v1/service_test.go b/integrations/pong/v1/service_test.go index d696b7675..1c0f5d83f 100644 --- a/integrations/pong/v1/service_test.go +++ b/integrations/pong/v1/service_test.go @@ -33,10 +33,13 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/tests/tgrpc" ) -func Client(t *testing.T, ctx context.Context) pbPongV1.PongV1Client { +func Client(t *testing.T, ctx context.Context, services ...Service) pbPongV1.PongV1Client { + h, err := New(services...) + require.NoError(t, err) + local := svc.NewService(svc.Configuration{ Address: "127.0.0.1:0", - }, New()) + }, h) start := local.Start(ctx) @@ -61,3 +64,36 @@ func Test_Ping(t *testing.T) { require.True(t, r2.GetTime().AsTime().After(r1.GetTime().AsTime())) } + +func Test_Services(t *testing.T) { + ctx, c := context.WithCancel(context.Background()) + defer c() + + v2 := Service{ + Name: "A", + Version: "V2", + Enabled: true, + } + + v3 := Service{ + Name: "A", + Version: "V3", + Enabled: false, + } + + client := Client(t, ctx, + v3, + v2, + ) + + r1, err := client.Services(ctx, &pbSharedV1.Empty{}) + require.NoError(t, err) + + require.Len(t, r1.GetServices(), 2) + + require.NotNil(t, r1.GetServices()[0]) + require.NotNil(t, r1.GetServices()[1]) + + require.EqualValues(t, v2.asService(), r1.GetServices()[0]) + require.EqualValues(t, v3.asService(), r1.GetServices()[1]) +} diff --git a/integrations/scheduler/v1/definition/common.proto b/integrations/scheduler/v1/definition/common.proto index 525a0a3a2..066c79fe7 100644 --- a/integrations/scheduler/v1/definition/common.proto +++ b/integrations/scheduler/v1/definition/common.proto @@ -72,10 +72,10 @@ message StatusMetadata { bool created = 1; // Defines checksum - optional string checksum =2; + optional string checksum = 2; // Defines uid - optional string uid =3; + optional string uid = 3; // Defiles list of applied profiles repeated string profiles = 4; diff --git a/integrations/scheduler/v1/definition/cronjob.pb.go b/integrations/scheduler/v1/definition/cronjob.pb.go index fdf642257..ffb7bdc7f 100644 --- a/integrations/scheduler/v1/definition/cronjob.pb.go +++ b/integrations/scheduler/v1/definition/cronjob.pb.go @@ -221,13 +221,13 @@ var file_integrations_scheduler_v1_definition_cronjob_proto_rawDesc = []byte{ 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x63, 0x72, 0x6f, 0x6e, 0x6a, 0x6f, 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x1a, - 0x31, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x63, + 0x33, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x33, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x6a, 0x6f, - 0x62, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9e, 0x01, 0x0a, 0x07, 0x43, 0x72, 0x6f, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x6a, 0x6f, 0x62, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x31, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x2f, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9e, 0x01, 0x0a, 0x07, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, @@ -290,8 +290,8 @@ func file_integrations_scheduler_v1_definition_cronjob_proto_init() { if File_integrations_scheduler_v1_definition_cronjob_proto != nil { return } - file_integrations_scheduler_v1_definition_common_proto_init() file_integrations_scheduler_v1_definition_batchjob_proto_init() + file_integrations_scheduler_v1_definition_common_proto_init() if !protoimpl.UnsafeEnabled { file_integrations_scheduler_v1_definition_cronjob_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CronJob); i { diff --git a/integrations/scheduler/v1/definition/cronjob.proto b/integrations/scheduler/v1/definition/cronjob.proto index 57fcf3430..b94d137af 100644 --- a/integrations/scheduler/v1/definition/cronjob.proto +++ b/integrations/scheduler/v1/definition/cronjob.proto @@ -22,8 +22,8 @@ syntax = "proto3"; package scheduler; -import "integrations/scheduler/v1/definition/common.proto"; import "integrations/scheduler/v1/definition/batchjob.proto"; +import "integrations/scheduler/v1/definition/common.proto"; option go_package = "github.com/arangodb/kube-arangodb/integrations/scheduler/v1/definition"; diff --git a/integrations/scheduler/v1/definition/definition.proto b/integrations/scheduler/v1/definition/definition.proto index bffc6fe75..00a7c1685 100644 --- a/integrations/scheduler/v1/definition/definition.proto +++ b/integrations/scheduler/v1/definition/definition.proto @@ -32,7 +32,7 @@ option go_package = "github.com/arangodb/kube-arangodb/integrations/scheduler/v1 // Definition of the ServiceInterface for Scheduler V1 service SchedulerV1 { // BatchJob - + // Creates BatchJob from specification rpc CreateBatchJob(CreateBatchJobRequest) returns (CreateBatchJobResponse) {}; @@ -44,7 +44,7 @@ service SchedulerV1 { // Deletes BatchJob. If job does not exists, Exists flag is set to false rpc DeleteBatchJob(DeleteBatchJobRequest) returns (DeleteBatchJobResponse) {}; - + // CronJob // Creates CronJob from specification diff --git a/integrations/scheduler/v1/definition/deployment.proto b/integrations/scheduler/v1/definition/deployment.proto index 60b798ea7..f80f3aeab 100644 --- a/integrations/scheduler/v1/definition/deployment.proto +++ b/integrations/scheduler/v1/definition/deployment.proto @@ -48,7 +48,7 @@ message DeploymentSpec { message DeploymentStatus { // Total number of non-terminated pods targeted by this deployment (their labels match the selector). - int32 replicas=1; + int32 replicas = 1; // Total number of non-terminated pods targeted by this deployment that have the desired template spec. int32 updated_replicas = 2; diff --git a/integrations/scheduler/v2/chart.go b/integrations/scheduler/v2/chart.go new file mode 100644 index 000000000..2868dbde2 --- /dev/null +++ b/integrations/scheduler/v2/chart.go @@ -0,0 +1,111 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import ( + "context" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + pbSchedulerV2 "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/util" +) + +func (i *implementation) ListCharts(req *pbSchedulerV2.SchedulerV2ListChartsRequest, server pbSchedulerV2.SchedulerV2_ListChartsServer) error { + ctx := server.Context() + + var ct string + + for { + resp, err := i.kclient.Arango().PlatformV1alpha1().ArangoPlatformCharts(i.client.Namespace()).List(ctx, meta.ListOptions{ + Limit: util.OptionalType(req.Items, 128), + Continue: ct, + }) + if err != nil { + logger.Err(err).Warn("Unable to run action: ListCharts") + return asGRPCError(err) + } + + var res pbSchedulerV2.SchedulerV2ListChartsResponse + + for _, item := range resp.Items { + res.Charts = append(res.Charts, item.GetName()) + } + + if err := server.Send(&res); err != nil { + logger.Err(err).Warn("Unable to send action response: ListCharts") + return err + } + + if resp.Continue == "" { + return nil + } + + ct = resp.Continue + } +} + +func (i *implementation) GetChart(ctx context.Context, in *pbSchedulerV2.SchedulerV2GetChartRequest) (*pbSchedulerV2.SchedulerV2GetChartResponse, error) { + resp, err := i.kclient.Arango().PlatformV1alpha1().ArangoPlatformCharts(i.client.Namespace()).Get(ctx, in.GetName(), meta.GetOptions{}) + if err != nil { + logger.Err(err).Warn("Unable to run action: GetChart") + return nil, asGRPCError(err) + } + + if !resp.Status.Conditions.IsTrue(platformApi.SpecValidCondition) { + return nil, status.Errorf(codes.Unavailable, "Chart Spec is invalid") + } + + if info := resp.Status.Info; info == nil { + return nil, status.Errorf(codes.Unavailable, "Chart Infos are missing") + } else { + if !info.Valid { + if msg := info.Message; msg == "" { + return nil, status.Errorf(codes.Unavailable, "Chart is not Valid") + } else { + return nil, status.Errorf(codes.Unavailable, "Chart is not Valid: %s", msg) + } + } else { + if details := info.Details; details == nil { + return nil, status.Errorf(codes.Unavailable, "Chart Details are missing") + } else { + return &pbSchedulerV2.SchedulerV2GetChartResponse{ + Chart: info.Definition, + Info: chartInfoDetailsAsInfo(details), + }, nil + } + } + } +} + +func chartInfoDetailsAsInfo(in *platformApi.ChartDetails) *pbSchedulerV2.SchedulerV2ChartInfo { + if in == nil { + return nil + } + + return &pbSchedulerV2.SchedulerV2ChartInfo{ + Name: in.Name, + Version: in.Version, + } +} diff --git a/integrations/scheduler/v2/chart_test.go b/integrations/scheduler/v2/chart_test.go new file mode 100644 index 000000000..e56da44ad --- /dev/null +++ b/integrations/scheduler/v2/chart_test.go @@ -0,0 +1,269 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import ( + "context" + "fmt" + "testing" + + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + core "k8s.io/api/core/v1" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + pbSchedulerV2 "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition" + api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/util" + ugrpc "github.com/arangodb/kube-arangodb/pkg/util/grpc" + "github.com/arangodb/kube-arangodb/pkg/util/tests" + "github.com/arangodb/kube-arangodb/pkg/util/tests/tgrpc" +) + +func Test_Chart_List(t *testing.T) { + ctx, c := context.WithCancel(context.Background()) + defer c() + + scheduler, client, _ := InternalClient(t, ctx, func(c Configuration) Configuration { + c.Namespace = tests.FakeNamespace + c.Deployment = tests.FakeNamespace + return c + }) + + t.Run("Create Charts", func(t *testing.T) { + for i := 0; i < 1024; i++ { + _, err := client.Arango().PlatformV1alpha1().ArangoPlatformCharts(tests.FakeNamespace).Create(context.Background(), &platformApi.ArangoPlatformChart{ + ObjectMeta: meta.ObjectMeta{ + Name: fmt.Sprintf("chart-%05d", i), + Namespace: tests.FakeNamespace, + }, + Status: platformApi.ArangoPlatformChartStatus{ + Conditions: []api.Condition{ + { + Type: platformApi.SpecValidCondition, + Status: core.ConditionTrue, + }, + }, + Info: &platformApi.ChartStatusInfo{ + Definition: make([]byte, 128), + Valid: true, + Details: &platformApi.ChartDetails{ + Name: fmt.Sprintf("chart-%05d", i), + Version: "1.2.3", + }, + }, + }, + }, meta.CreateOptions{}) + require.NoError(t, err) + } + }) + + t.Run("Try to get", func(t *testing.T) { + _, err := scheduler.GetChart(context.Background(), &pbSchedulerV2.SchedulerV2GetChartRequest{ + Name: "chart-00010", + }) + require.NoError(t, err) + }) + + t.Run("List by 128", func(t *testing.T) { + wr, err := scheduler.ListCharts(ctx, &pbSchedulerV2.SchedulerV2ListChartsRequest{ + Items: util.NewType[int64](128), + }) + require.NoError(t, err) + + var items []string + + require.NoError(t, ugrpc.Recv[*pbSchedulerV2.SchedulerV2ListChartsResponse](wr, func(response *pbSchedulerV2.SchedulerV2ListChartsResponse) error { + items = append(items, response.GetCharts()...) + return nil + })) + + require.Len(t, items, 1024) + }) +} + +func Test_Chart_Get(t *testing.T) { + ctx, c := context.WithCancel(context.Background()) + defer c() + + scheduler, client, _ := InternalClient(t, ctx, func(c Configuration) Configuration { + c.Namespace = tests.FakeNamespace + c.Deployment = tests.FakeNamespace + return c + }) + + z := client.Arango().PlatformV1alpha1().ArangoPlatformCharts(tests.FakeNamespace) + + t1, err := z.Create(context.Background(), &platformApi.ArangoPlatformChart{ + ObjectMeta: meta.ObjectMeta{ + Name: "test-1", + Namespace: tests.FakeNamespace, + }, + Status: platformApi.ArangoPlatformChartStatus{}, + }, meta.CreateOptions{}) + require.NoError(t, err) + + t2, err := z.Create(context.Background(), &platformApi.ArangoPlatformChart{ + ObjectMeta: meta.ObjectMeta{ + Name: "test-2", + Namespace: tests.FakeNamespace, + }, + Status: platformApi.ArangoPlatformChartStatus{ + Conditions: []api.Condition{ + { + Type: platformApi.SpecValidCondition, + Status: core.ConditionTrue, + }, + }, + }, + }, meta.CreateOptions{}) + require.NoError(t, err) + + t3, err := z.Create(context.Background(), &platformApi.ArangoPlatformChart{ + ObjectMeta: meta.ObjectMeta{ + Name: "test-3", + Namespace: tests.FakeNamespace, + }, + Status: platformApi.ArangoPlatformChartStatus{ + Conditions: []api.Condition{ + { + Type: platformApi.SpecValidCondition, + Status: core.ConditionTrue, + }, + }, + Info: &platformApi.ChartStatusInfo{ + Valid: false, + }, + }, + }, meta.CreateOptions{}) + require.NoError(t, err) + + t4, err := z.Create(context.Background(), &platformApi.ArangoPlatformChart{ + ObjectMeta: meta.ObjectMeta{ + Name: "test-4", + Namespace: tests.FakeNamespace, + }, + Status: platformApi.ArangoPlatformChartStatus{ + Conditions: []api.Condition{ + { + Type: platformApi.SpecValidCondition, + Status: core.ConditionTrue, + }, + }, + Info: &platformApi.ChartStatusInfo{ + Valid: false, + Message: "Invalid XxX", + }, + }, + }, meta.CreateOptions{}) + require.NoError(t, err) + + t5, err := z.Create(context.Background(), &platformApi.ArangoPlatformChart{ + ObjectMeta: meta.ObjectMeta{ + Name: "test-5", + Namespace: tests.FakeNamespace, + }, + Status: platformApi.ArangoPlatformChartStatus{ + Conditions: []api.Condition{ + { + Type: platformApi.SpecValidCondition, + Status: core.ConditionTrue, + }, + }, + Info: &platformApi.ChartStatusInfo{ + Definition: make([]byte, 128), + Valid: true, + }, + }, + }, meta.CreateOptions{}) + require.NoError(t, err) + + t6, err := z.Create(context.Background(), &platformApi.ArangoPlatformChart{ + ObjectMeta: meta.ObjectMeta{ + Name: "test-6", + Namespace: tests.FakeNamespace, + }, + Status: platformApi.ArangoPlatformChartStatus{ + Conditions: []api.Condition{ + { + Type: platformApi.SpecValidCondition, + Status: core.ConditionTrue, + }, + }, + Info: &platformApi.ChartStatusInfo{ + Definition: make([]byte, 128), + Valid: true, + Details: &platformApi.ChartDetails{ + Name: "test-6", + Version: "1.2.3", + }, + }, + }, + }, meta.CreateOptions{}) + require.NoError(t, err) + + t.Run("Missing", func(t *testing.T) { + resp, err := scheduler.GetChart(context.Background(), &pbSchedulerV2.SchedulerV2GetChartRequest{Name: "test-0"}) + tgrpc.AsGRPCError(t, err).Code(t, codes.NotFound).Errorf(t, "NotFound: arangoplatformcharts.platform.arangodb.com \"test-0\" not found") + require.Nil(t, resp) + }) + + t.Run("Invalid Spec", func(t *testing.T) { + resp, err := scheduler.GetChart(context.Background(), &pbSchedulerV2.SchedulerV2GetChartRequest{Name: t1.GetName()}) + tgrpc.AsGRPCError(t, err).Code(t, codes.Unavailable).Errorf(t, "Chart Spec is invalid") + require.Nil(t, resp) + }) + + t.Run("Invalid Info", func(t *testing.T) { + resp, err := scheduler.GetChart(context.Background(), &pbSchedulerV2.SchedulerV2GetChartRequest{Name: t2.GetName()}) + tgrpc.AsGRPCError(t, err).Code(t, codes.Unavailable).Errorf(t, "Chart Infos are missing") + require.Nil(t, resp) + }) + + t.Run("Invalid", func(t *testing.T) { + resp, err := scheduler.GetChart(context.Background(), &pbSchedulerV2.SchedulerV2GetChartRequest{Name: t3.GetName()}) + tgrpc.AsGRPCError(t, err).Code(t, codes.Unavailable).Errorf(t, "Chart is not Valid") + require.Nil(t, resp) + }) + + t.Run("Invalid with message", func(t *testing.T) { + resp, err := scheduler.GetChart(context.Background(), &pbSchedulerV2.SchedulerV2GetChartRequest{Name: t4.GetName()}) + tgrpc.AsGRPCError(t, err).Code(t, codes.Unavailable).Errorf(t, "Chart is not Valid: Invalid XxX") + require.Nil(t, resp) + }) + + t.Run("Valid with missing details", func(t *testing.T) { + resp, err := scheduler.GetChart(context.Background(), &pbSchedulerV2.SchedulerV2GetChartRequest{Name: t5.GetName()}) + tgrpc.AsGRPCError(t, err).Code(t, codes.Unavailable).Errorf(t, "Chart Details are missing") + require.Nil(t, resp) + }) + + t.Run("Valid with details", func(t *testing.T) { + resp, err := scheduler.GetChart(context.Background(), &pbSchedulerV2.SchedulerV2GetChartRequest{Name: t6.GetName()}) + require.NoError(t, err) + require.NotNil(t, resp) + require.Len(t, resp.Chart, 128) + require.NotNil(t, resp.Info) + require.EqualValues(t, "test-6", resp.Info.Name) + require.EqualValues(t, "1.2.3", resp.Info.Version) + }) +} diff --git a/pkg/ml/storage/s3/configuration.go b/integrations/scheduler/v2/configuration.go similarity index 57% rename from pkg/ml/storage/s3/configuration.go rename to integrations/scheduler/v2/configuration.go index 4cc33344a..9c278c829 100644 --- a/pkg/ml/storage/s3/configuration.go +++ b/integrations/scheduler/v2/configuration.go @@ -18,31 +18,42 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package s3 +package v2 -import "github.com/arangodb/kube-arangodb/pkg/util/errors" +import "github.com/pkg/errors" + +type Mod func(c Configuration) Configuration + +func NewConfiguration() Configuration { + return Configuration{ + Namespace: "default", + } +} type Configuration struct { - Endpoint string - AllowInsecure bool - CACrtFile string - CAKeyFile string - DisableSSL bool - Region string - BucketName string - AccessKeyFile string // path to file containing S3 AccessKey - SecretKeyFile string // path to file containing S3 SecretKey + Namespace string + + Deployment string } func (c Configuration) Validate() error { - if c.AccessKeyFile == "" { - return errors.Errorf("AccessKeyFile is not defined") - } - if c.SecretKeyFile == "" { - return errors.Errorf("SecretKeyFile is not defined") + if c.Deployment == "" { + return errors.Errorf("Invalid empty name of deployment") } - if c.Endpoint == "" { - return errors.Errorf("Endpoint is not defined") + + if c.Namespace == "" { + return errors.Errorf("Invalid empty name of namespace") } + return nil } + +func (c Configuration) With(mods ...Mod) Configuration { + n := c + + for _, mod := range mods { + n = mod(n) + } + + return n +} diff --git a/pkg/deployment/resources/gateway/consts.go b/integrations/scheduler/v2/consts.go similarity index 89% rename from pkg/deployment/resources/gateway/consts.go rename to integrations/scheduler/v2/consts.go index a624495df..04f4f5840 100644 --- a/pkg/deployment/resources/gateway/consts.go +++ b/integrations/scheduler/v2/consts.go @@ -18,8 +18,8 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package gateway +package v2 const ( - IntegrationSidecarFilterName = "envoy.filters.http.ext_authz" + LabelArangoDBDeploymentName = "deployment.arangodb.com/name" ) diff --git a/integrations/scheduler/v2/definition/chart.pb.go b/integrations/scheduler/v2/definition/chart.pb.go new file mode 100644 index 000000000..6bbcc5eaa --- /dev/null +++ b/integrations/scheduler/v2/definition/chart.pb.go @@ -0,0 +1,549 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.21.1 +// source: integrations/scheduler/v2/definition/chart.proto + +package definition + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Chart Info +type SchedulerV2ChartInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Chart Name + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Chart Version + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // Keeps the Platform details from the output + Platform *SchedulerV2ChartPlatform `protobuf:"bytes,3,opt,name=platform,proto3,oneof" json:"platform,omitempty"` +} + +func (x *SchedulerV2ChartInfo) Reset() { + *x = SchedulerV2ChartInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2ChartInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2ChartInfo) ProtoMessage() {} + +func (x *SchedulerV2ChartInfo) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2ChartInfo.ProtoReflect.Descriptor instead. +func (*SchedulerV2ChartInfo) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{0} +} + +func (x *SchedulerV2ChartInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SchedulerV2ChartInfo) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *SchedulerV2ChartInfo) GetPlatform() *SchedulerV2ChartPlatform { + if x != nil { + return x.Platform + } + return nil +} + +// Chart Platform Details +type SchedulerV2ChartPlatform struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of the requirements + Requirements map[string]string `protobuf:"bytes,1,rep,name=requirements,proto3" json:"requirements,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *SchedulerV2ChartPlatform) Reset() { + *x = SchedulerV2ChartPlatform{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2ChartPlatform) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2ChartPlatform) ProtoMessage() {} + +func (x *SchedulerV2ChartPlatform) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2ChartPlatform.ProtoReflect.Descriptor instead. +func (*SchedulerV2ChartPlatform) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{1} +} + +func (x *SchedulerV2ChartPlatform) GetRequirements() map[string]string { + if x != nil { + return x.Requirements + } + return nil +} + +// SchedulerV2 ListCharts Request +type SchedulerV2ListChartsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Maximum items per batch + Items *int64 `protobuf:"varint,1,opt,name=items,proto3,oneof" json:"items,omitempty"` +} + +func (x *SchedulerV2ListChartsRequest) Reset() { + *x = SchedulerV2ListChartsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2ListChartsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2ListChartsRequest) ProtoMessage() {} + +func (x *SchedulerV2ListChartsRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2ListChartsRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2ListChartsRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{2} +} + +func (x *SchedulerV2ListChartsRequest) GetItems() int64 { + if x != nil && x.Items != nil { + return *x.Items + } + return 0 +} + +// SchedulerV2 ListCharts Response +type SchedulerV2ListChartsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of the charts + Charts []string `protobuf:"bytes,1,rep,name=charts,proto3" json:"charts,omitempty"` +} + +func (x *SchedulerV2ListChartsResponse) Reset() { + *x = SchedulerV2ListChartsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2ListChartsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2ListChartsResponse) ProtoMessage() {} + +func (x *SchedulerV2ListChartsResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2ListChartsResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2ListChartsResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{3} +} + +func (x *SchedulerV2ListChartsResponse) GetCharts() []string { + if x != nil { + return x.Charts + } + return nil +} + +// SchedulerV2 GetChart Request +type SchedulerV2GetChartRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Chart Name + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *SchedulerV2GetChartRequest) Reset() { + *x = SchedulerV2GetChartRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2GetChartRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2GetChartRequest) ProtoMessage() {} + +func (x *SchedulerV2GetChartRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2GetChartRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2GetChartRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{4} +} + +func (x *SchedulerV2GetChartRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// SchedulerV2 GetChart Response +type SchedulerV2GetChartResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Chart Data + Chart []byte `protobuf:"bytes,1,opt,name=chart,proto3" json:"chart,omitempty"` + // Chart Info + Info *SchedulerV2ChartInfo `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` +} + +func (x *SchedulerV2GetChartResponse) Reset() { + *x = SchedulerV2GetChartResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2GetChartResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2GetChartResponse) ProtoMessage() {} + +func (x *SchedulerV2GetChartResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2GetChartResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2GetChartResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{5} +} + +func (x *SchedulerV2GetChartResponse) GetChart() []byte { + if x != nil { + return x.Chart + } + return nil +} + +func (x *SchedulerV2GetChartResponse) GetInfo() *SchedulerV2ChartInfo { + if x != nil { + return x.Info + } + return nil +} + +var File_integrations_scheduler_v2_definition_chart_proto protoreflect.FileDescriptor + +var file_integrations_scheduler_v2_definition_chart_proto_rawDesc = []byte{ + 0x0a, 0x30, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x63, 0x68, 0x61, 0x72, 0x74, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x09, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x22, 0x97, 0x01, + 0x0a, 0x14, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x43, 0x68, 0x61, + 0x72, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x43, 0x68, + 0x61, 0x72, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x48, 0x00, 0x52, 0x08, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x22, 0xb6, 0x01, 0x0a, 0x18, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x43, 0x68, 0x61, 0x72, 0x74, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x59, 0x0a, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x56, 0x32, 0x43, 0x68, 0x61, 0x72, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2e, + 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0c, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, + 0x3f, 0x0a, 0x11, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x43, 0x0a, 0x1c, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x19, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, + 0x00, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x37, 0x0a, 0x1d, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x56, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x72, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x63, 0x68, 0x61, 0x72, 0x74, 0x73, 0x22, 0x30, + 0x0a, 0x1a, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x47, 0x65, 0x74, + 0x43, 0x68, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x68, 0x0a, 0x1b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x47, + 0x65, 0x74, 0x43, 0x68, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x63, 0x68, 0x61, 0x72, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x43, 0x68, 0x61, 0x72, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x61, 0x6e, 0x67, 0x6f, 0x64, + 0x62, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x2d, 0x61, 0x72, 0x61, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2f, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_integrations_scheduler_v2_definition_chart_proto_rawDescOnce sync.Once + file_integrations_scheduler_v2_definition_chart_proto_rawDescData = file_integrations_scheduler_v2_definition_chart_proto_rawDesc +) + +func file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP() []byte { + file_integrations_scheduler_v2_definition_chart_proto_rawDescOnce.Do(func() { + file_integrations_scheduler_v2_definition_chart_proto_rawDescData = protoimpl.X.CompressGZIP(file_integrations_scheduler_v2_definition_chart_proto_rawDescData) + }) + return file_integrations_scheduler_v2_definition_chart_proto_rawDescData +} + +var file_integrations_scheduler_v2_definition_chart_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_integrations_scheduler_v2_definition_chart_proto_goTypes = []interface{}{ + (*SchedulerV2ChartInfo)(nil), // 0: scheduler.SchedulerV2ChartInfo + (*SchedulerV2ChartPlatform)(nil), // 1: scheduler.SchedulerV2ChartPlatform + (*SchedulerV2ListChartsRequest)(nil), // 2: scheduler.SchedulerV2ListChartsRequest + (*SchedulerV2ListChartsResponse)(nil), // 3: scheduler.SchedulerV2ListChartsResponse + (*SchedulerV2GetChartRequest)(nil), // 4: scheduler.SchedulerV2GetChartRequest + (*SchedulerV2GetChartResponse)(nil), // 5: scheduler.SchedulerV2GetChartResponse + nil, // 6: scheduler.SchedulerV2ChartPlatform.RequirementsEntry +} +var file_integrations_scheduler_v2_definition_chart_proto_depIdxs = []int32{ + 1, // 0: scheduler.SchedulerV2ChartInfo.platform:type_name -> scheduler.SchedulerV2ChartPlatform + 6, // 1: scheduler.SchedulerV2ChartPlatform.requirements:type_name -> scheduler.SchedulerV2ChartPlatform.RequirementsEntry + 0, // 2: scheduler.SchedulerV2GetChartResponse.info:type_name -> scheduler.SchedulerV2ChartInfo + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_integrations_scheduler_v2_definition_chart_proto_init() } +func file_integrations_scheduler_v2_definition_chart_proto_init() { + if File_integrations_scheduler_v2_definition_chart_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_integrations_scheduler_v2_definition_chart_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2ChartInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_chart_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2ChartPlatform); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_chart_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2ListChartsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_chart_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2ListChartsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_chart_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2GetChartRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_chart_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2GetChartResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_integrations_scheduler_v2_definition_chart_proto_msgTypes[0].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_chart_proto_msgTypes[2].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_integrations_scheduler_v2_definition_chart_proto_rawDesc, + NumEnums: 0, + NumMessages: 7, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_integrations_scheduler_v2_definition_chart_proto_goTypes, + DependencyIndexes: file_integrations_scheduler_v2_definition_chart_proto_depIdxs, + MessageInfos: file_integrations_scheduler_v2_definition_chart_proto_msgTypes, + }.Build() + File_integrations_scheduler_v2_definition_chart_proto = out.File + file_integrations_scheduler_v2_definition_chart_proto_rawDesc = nil + file_integrations_scheduler_v2_definition_chart_proto_goTypes = nil + file_integrations_scheduler_v2_definition_chart_proto_depIdxs = nil +} diff --git a/integrations/scheduler/v2/definition/chart.proto b/integrations/scheduler/v2/definition/chart.proto new file mode 100644 index 000000000..920ad09ae --- /dev/null +++ b/integrations/scheduler/v2/definition/chart.proto @@ -0,0 +1,67 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 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 holder is ArangoDB GmbH, Cologne, Germany +// + +syntax = "proto3"; + +package scheduler; + +option go_package = "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition"; + +// Chart Info +message SchedulerV2ChartInfo { + // Chart Name + string name = 1; + // Chart Version + string version = 2; + // Keeps the Platform details from the output + optional SchedulerV2ChartPlatform platform = 3; +} + +// Chart Platform Details +message SchedulerV2ChartPlatform { + // List of the requirements + map requirements = 1; +} + +// SchedulerV2 ListCharts Request +message SchedulerV2ListChartsRequest { + // Maximum items per batch + optional int64 items = 1; +} + +// SchedulerV2 ListCharts Response +message SchedulerV2ListChartsResponse { + // List of the charts + repeated string charts =1; +} + +// SchedulerV2 GetChart Request +message SchedulerV2GetChartRequest { + // Chart Name + string name = 1; +} + +// SchedulerV2 GetChart Response +message SchedulerV2GetChartResponse { + // Chart Data + bytes chart = 1; + // Chart Info + SchedulerV2ChartInfo info = 2; +} \ No newline at end of file diff --git a/pkg/ml/storage/configuration.go b/integrations/scheduler/v2/definition/consts.go similarity index 79% rename from pkg/ml/storage/configuration.go rename to integrations/scheduler/v2/definition/consts.go index 578519bed..b094398b4 100644 --- a/pkg/ml/storage/configuration.go +++ b/integrations/scheduler/v2/definition/consts.go @@ -18,20 +18,8 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package storage - -import ( - "github.com/arangodb/kube-arangodb/pkg/ml/storage/s3" -) - -type Type string +package definition const ( - S3 = Type("s3") + Name = "scheduler.v2" ) - -type Configuration struct { - Type Type - - S3 s3.Configuration -} diff --git a/integrations/scheduler/v2/definition/definition.pb.go b/integrations/scheduler/v2/definition/definition.pb.go new file mode 100644 index 000000000..8f5de8e1c --- /dev/null +++ b/integrations/scheduler/v2/definition/definition.pb.go @@ -0,0 +1,251 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.21.1 +// source: integrations/scheduler/v2/definition/definition.proto + +package definition + +import ( + definition "github.com/arangodb/kube-arangodb/integrations/shared/v1/definition" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +var File_integrations_scheduler_v2_definition_definition_proto protoreflect.FileDescriptor + +var file_integrations_scheduler_v2_definition_definition_proto_rawDesc = []byte{ + 0x0a, 0x35, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x1a, 0x30, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x63, 0x68, 0x61, 0x72, 0x74, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x65, 0x6c, 0x6d, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x35, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, + 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6b, 0x75, 0x62, 0x65, + 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, 0x69, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x82, 0x0b, 0x0a, 0x0b, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x12, 0x2f, 0x0a, 0x0f, 0x49, + 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x0d, + 0x2e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0d, 0x2e, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x25, 0x0a, 0x05, + 0x41, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x0d, 0x2e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0d, 0x2e, 0x73, 0x68, 0x61, 0x72, 0x65, 0x64, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x12, 0x4d, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x21, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x72, 0x56, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x53, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x56, 0x32, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x56, 0x0a, 0x07, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x24, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x56, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x56, 0x0a, 0x07, 0x55, 0x70, 0x67, + 0x72, 0x61, 0x64, 0x65, 0x12, 0x24, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x55, 0x70, 0x67, 0x72, + 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x56, 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x5c, 0x0a, 0x09, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x12, 0x26, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x55, 0x6e, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4d, 0x0a, 0x04, 0x54, 0x65, 0x73, 0x74, 0x12, 0x21, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x54, + 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x56, 0x32, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, + 0x0a, 0x14, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x50, 0x49, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x44, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x50, 0x49, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, + 0x32, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x50, 0x49, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7a, 0x0a, + 0x13, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x50, 0x49, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x30, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x41, 0x50, 0x49, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x44, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x50, 0x49, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0d, 0x4b, 0x75, 0x62, + 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x47, 0x65, 0x74, 0x12, 0x2a, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x56, 0x32, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x4b, 0x75, + 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x19, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, + 0x65, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x12, 0x36, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, + 0x74, 0x65, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, + 0x32, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x61, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x74, 0x73, + 0x12, 0x27, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, + 0x32, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x61, 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x59, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x72, + 0x74, 0x12, 0x25, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, + 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, + 0x72, 0x61, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x2d, 0x61, 0x72, 0x61, + 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var file_integrations_scheduler_v2_definition_definition_proto_goTypes = []interface{}{ + (*definition.Empty)(nil), // 0: shared.Empty + (*SchedulerV2ListRequest)(nil), // 1: scheduler.SchedulerV2ListRequest + (*SchedulerV2StatusRequest)(nil), // 2: scheduler.SchedulerV2StatusRequest + (*SchedulerV2StatusObjectsRequest)(nil), // 3: scheduler.SchedulerV2StatusObjectsRequest + (*SchedulerV2InstallRequest)(nil), // 4: scheduler.SchedulerV2InstallRequest + (*SchedulerV2UpgradeRequest)(nil), // 5: scheduler.SchedulerV2UpgradeRequest + (*SchedulerV2UninstallRequest)(nil), // 6: scheduler.SchedulerV2UninstallRequest + (*SchedulerV2TestRequest)(nil), // 7: scheduler.SchedulerV2TestRequest + (*SchedulerV2DiscoverAPIResourcesRequest)(nil), // 8: scheduler.SchedulerV2DiscoverAPIResourcesRequest + (*SchedulerV2DiscoverAPIResourceRequest)(nil), // 9: scheduler.SchedulerV2DiscoverAPIResourceRequest + (*SchedulerV2KubernetesGetRequest)(nil), // 10: scheduler.SchedulerV2KubernetesGetRequest + (*SchedulerV2KubernetesPermissionCheckRequest)(nil), // 11: scheduler.SchedulerV2KubernetesPermissionCheckRequest + (*SchedulerV2ListChartsRequest)(nil), // 12: scheduler.SchedulerV2ListChartsRequest + (*SchedulerV2GetChartRequest)(nil), // 13: scheduler.SchedulerV2GetChartRequest + (*SchedulerV2ListResponse)(nil), // 14: scheduler.SchedulerV2ListResponse + (*SchedulerV2StatusResponse)(nil), // 15: scheduler.SchedulerV2StatusResponse + (*SchedulerV2StatusObjectsResponse)(nil), // 16: scheduler.SchedulerV2StatusObjectsResponse + (*SchedulerV2InstallResponse)(nil), // 17: scheduler.SchedulerV2InstallResponse + (*SchedulerV2UpgradeResponse)(nil), // 18: scheduler.SchedulerV2UpgradeResponse + (*SchedulerV2UninstallResponse)(nil), // 19: scheduler.SchedulerV2UninstallResponse + (*SchedulerV2TestResponse)(nil), // 20: scheduler.SchedulerV2TestResponse + (*SchedulerV2DiscoverAPIResourcesResponse)(nil), // 21: scheduler.SchedulerV2DiscoverAPIResourcesResponse + (*SchedulerV2DiscoverAPIResourceResponse)(nil), // 22: scheduler.SchedulerV2DiscoverAPIResourceResponse + (*SchedulerV2KubernetesGetResponse)(nil), // 23: scheduler.SchedulerV2KubernetesGetResponse + (*SchedulerV2KubernetesPermissionCheckResponse)(nil), // 24: scheduler.SchedulerV2KubernetesPermissionCheckResponse + (*SchedulerV2ListChartsResponse)(nil), // 25: scheduler.SchedulerV2ListChartsResponse + (*SchedulerV2GetChartResponse)(nil), // 26: scheduler.SchedulerV2GetChartResponse +} +var file_integrations_scheduler_v2_definition_definition_proto_depIdxs = []int32{ + 0, // 0: scheduler.SchedulerV2.InvalidateCache:input_type -> shared.Empty + 0, // 1: scheduler.SchedulerV2.Alive:input_type -> shared.Empty + 1, // 2: scheduler.SchedulerV2.List:input_type -> scheduler.SchedulerV2ListRequest + 2, // 3: scheduler.SchedulerV2.Status:input_type -> scheduler.SchedulerV2StatusRequest + 3, // 4: scheduler.SchedulerV2.StatusObjects:input_type -> scheduler.SchedulerV2StatusObjectsRequest + 4, // 5: scheduler.SchedulerV2.Install:input_type -> scheduler.SchedulerV2InstallRequest + 5, // 6: scheduler.SchedulerV2.Upgrade:input_type -> scheduler.SchedulerV2UpgradeRequest + 6, // 7: scheduler.SchedulerV2.Uninstall:input_type -> scheduler.SchedulerV2UninstallRequest + 7, // 8: scheduler.SchedulerV2.Test:input_type -> scheduler.SchedulerV2TestRequest + 8, // 9: scheduler.SchedulerV2.DiscoverAPIResources:input_type -> scheduler.SchedulerV2DiscoverAPIResourcesRequest + 9, // 10: scheduler.SchedulerV2.DiscoverAPIResource:input_type -> scheduler.SchedulerV2DiscoverAPIResourceRequest + 10, // 11: scheduler.SchedulerV2.KubernetesGet:input_type -> scheduler.SchedulerV2KubernetesGetRequest + 11, // 12: scheduler.SchedulerV2.KubernetesPermissionCheck:input_type -> scheduler.SchedulerV2KubernetesPermissionCheckRequest + 12, // 13: scheduler.SchedulerV2.ListCharts:input_type -> scheduler.SchedulerV2ListChartsRequest + 13, // 14: scheduler.SchedulerV2.GetChart:input_type -> scheduler.SchedulerV2GetChartRequest + 0, // 15: scheduler.SchedulerV2.InvalidateCache:output_type -> shared.Empty + 0, // 16: scheduler.SchedulerV2.Alive:output_type -> shared.Empty + 14, // 17: scheduler.SchedulerV2.List:output_type -> scheduler.SchedulerV2ListResponse + 15, // 18: scheduler.SchedulerV2.Status:output_type -> scheduler.SchedulerV2StatusResponse + 16, // 19: scheduler.SchedulerV2.StatusObjects:output_type -> scheduler.SchedulerV2StatusObjectsResponse + 17, // 20: scheduler.SchedulerV2.Install:output_type -> scheduler.SchedulerV2InstallResponse + 18, // 21: scheduler.SchedulerV2.Upgrade:output_type -> scheduler.SchedulerV2UpgradeResponse + 19, // 22: scheduler.SchedulerV2.Uninstall:output_type -> scheduler.SchedulerV2UninstallResponse + 20, // 23: scheduler.SchedulerV2.Test:output_type -> scheduler.SchedulerV2TestResponse + 21, // 24: scheduler.SchedulerV2.DiscoverAPIResources:output_type -> scheduler.SchedulerV2DiscoverAPIResourcesResponse + 22, // 25: scheduler.SchedulerV2.DiscoverAPIResource:output_type -> scheduler.SchedulerV2DiscoverAPIResourceResponse + 23, // 26: scheduler.SchedulerV2.KubernetesGet:output_type -> scheduler.SchedulerV2KubernetesGetResponse + 24, // 27: scheduler.SchedulerV2.KubernetesPermissionCheck:output_type -> scheduler.SchedulerV2KubernetesPermissionCheckResponse + 25, // 28: scheduler.SchedulerV2.ListCharts:output_type -> scheduler.SchedulerV2ListChartsResponse + 26, // 29: scheduler.SchedulerV2.GetChart:output_type -> scheduler.SchedulerV2GetChartResponse + 15, // [15:30] is the sub-list for method output_type + 0, // [0:15] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_integrations_scheduler_v2_definition_definition_proto_init() } +func file_integrations_scheduler_v2_definition_definition_proto_init() { + if File_integrations_scheduler_v2_definition_definition_proto != nil { + return + } + file_integrations_scheduler_v2_definition_chart_proto_init() + file_integrations_scheduler_v2_definition_helm_proto_init() + file_integrations_scheduler_v2_definition_kubernetes_proto_init() + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_integrations_scheduler_v2_definition_definition_proto_rawDesc, + NumEnums: 0, + NumMessages: 0, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_integrations_scheduler_v2_definition_definition_proto_goTypes, + DependencyIndexes: file_integrations_scheduler_v2_definition_definition_proto_depIdxs, + }.Build() + File_integrations_scheduler_v2_definition_definition_proto = out.File + file_integrations_scheduler_v2_definition_definition_proto_rawDesc = nil + file_integrations_scheduler_v2_definition_definition_proto_goTypes = nil + file_integrations_scheduler_v2_definition_definition_proto_depIdxs = nil +} diff --git a/integrations/scheduler/v2/definition/definition.proto b/integrations/scheduler/v2/definition/definition.proto new file mode 100644 index 000000000..8d8426c1e --- /dev/null +++ b/integrations/scheduler/v2/definition/definition.proto @@ -0,0 +1,72 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 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 holder is ArangoDB GmbH, Cologne, Germany +// + +syntax = "proto3"; + +package scheduler; + +import "integrations/scheduler/v2/definition/chart.proto"; +import "integrations/scheduler/v2/definition/helm.proto"; +import "integrations/scheduler/v2/definition/kubernetes.proto"; +import "integrations/shared/v1/definition/empty.proto"; + +option go_package = "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition"; + +// Integration Service +service SchedulerV2 { + // Invalidates local ServiceDiscover cache + rpc InvalidateCache(shared.Empty) returns (shared.Empty); + // Ensure that Helm Client is able to communicate with Kubernetes + rpc Alive(shared.Empty) returns (shared.Empty); + + // Executes Helm List Action + rpc List(SchedulerV2ListRequest) returns (SchedulerV2ListResponse); + // Executes Helm Status Action + rpc Status(SchedulerV2StatusRequest) returns (SchedulerV2StatusResponse); + // Executes Helm Status Action and fetch Resources from Kubernetes API + rpc StatusObjects(SchedulerV2StatusObjectsRequest) returns (SchedulerV2StatusObjectsResponse); + // Executes Helm Install Action + rpc Install(SchedulerV2InstallRequest) returns (SchedulerV2InstallResponse); + // Executes Helm Upgrade Action + rpc Upgrade(SchedulerV2UpgradeRequest) returns (SchedulerV2UpgradeResponse); + // Executes Helm Uninstall Action + rpc Uninstall(SchedulerV2UninstallRequest) returns (SchedulerV2UninstallResponse); + // Executes Helm Test Action + rpc Test(SchedulerV2TestRequest) returns (SchedulerV2TestResponse); + + // Discovers Kubernetes API Resources for Group + rpc DiscoverAPIResources(SchedulerV2DiscoverAPIResourcesRequest) returns (SchedulerV2DiscoverAPIResourcesResponse); + // Discovers Kubernetes API Resources for Kind + rpc DiscoverAPIResource(SchedulerV2DiscoverAPIResourceRequest) returns (SchedulerV2DiscoverAPIResourceResponse); + + // Gets Kubernetes objects from the API + rpc KubernetesGet(SchedulerV2KubernetesGetRequest) returns (SchedulerV2KubernetesGetResponse); + + // Checks if principal can take an action + rpc KubernetesPermissionCheck(SchedulerV2KubernetesPermissionCheckRequest) + returns (SchedulerV2KubernetesPermissionCheckResponse); + + // Lists installed ArangoPlatform Charts + rpc ListCharts(SchedulerV2ListChartsRequest) returns (stream SchedulerV2ListChartsResponse); + + // Gets Installed ArangoDB Chart + rpc GetChart(SchedulerV2GetChartRequest) returns (SchedulerV2GetChartResponse); +} + diff --git a/integrations/scheduler/v2/definition/definition_grpc.pb.go b/integrations/scheduler/v2/definition/definition_grpc.pb.go new file mode 100644 index 000000000..122f3bf76 --- /dev/null +++ b/integrations/scheduler/v2/definition/definition_grpc.pb.go @@ -0,0 +1,668 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc v3.21.1 +// source: integrations/scheduler/v2/definition/definition.proto + +package definition + +import ( + context "context" + definition "github.com/arangodb/kube-arangodb/integrations/shared/v1/definition" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// SchedulerV2Client is the client API for SchedulerV2 service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type SchedulerV2Client interface { + // Invalidates local ServiceDiscover cache + InvalidateCache(ctx context.Context, in *definition.Empty, opts ...grpc.CallOption) (*definition.Empty, error) + // Ensure that Helm Client is able to communicate with Kubernetes + Alive(ctx context.Context, in *definition.Empty, opts ...grpc.CallOption) (*definition.Empty, error) + // Executes Helm List Action + List(ctx context.Context, in *SchedulerV2ListRequest, opts ...grpc.CallOption) (*SchedulerV2ListResponse, error) + // Executes Helm Status Action + Status(ctx context.Context, in *SchedulerV2StatusRequest, opts ...grpc.CallOption) (*SchedulerV2StatusResponse, error) + // Executes Helm Status Action and fetch Resources from Kubernetes API + StatusObjects(ctx context.Context, in *SchedulerV2StatusObjectsRequest, opts ...grpc.CallOption) (*SchedulerV2StatusObjectsResponse, error) + // Executes Helm Install Action + Install(ctx context.Context, in *SchedulerV2InstallRequest, opts ...grpc.CallOption) (*SchedulerV2InstallResponse, error) + // Executes Helm Upgrade Action + Upgrade(ctx context.Context, in *SchedulerV2UpgradeRequest, opts ...grpc.CallOption) (*SchedulerV2UpgradeResponse, error) + // Executes Helm Uninstall Action + Uninstall(ctx context.Context, in *SchedulerV2UninstallRequest, opts ...grpc.CallOption) (*SchedulerV2UninstallResponse, error) + // Executes Helm Test Action + Test(ctx context.Context, in *SchedulerV2TestRequest, opts ...grpc.CallOption) (*SchedulerV2TestResponse, error) + // Discovers Kubernetes API Resources for Group + DiscoverAPIResources(ctx context.Context, in *SchedulerV2DiscoverAPIResourcesRequest, opts ...grpc.CallOption) (*SchedulerV2DiscoverAPIResourcesResponse, error) + // Discovers Kubernetes API Resources for Kind + DiscoverAPIResource(ctx context.Context, in *SchedulerV2DiscoverAPIResourceRequest, opts ...grpc.CallOption) (*SchedulerV2DiscoverAPIResourceResponse, error) + // Gets Kubernetes objects from the API + KubernetesGet(ctx context.Context, in *SchedulerV2KubernetesGetRequest, opts ...grpc.CallOption) (*SchedulerV2KubernetesGetResponse, error) + // Checks if principal can take an action + KubernetesPermissionCheck(ctx context.Context, in *SchedulerV2KubernetesPermissionCheckRequest, opts ...grpc.CallOption) (*SchedulerV2KubernetesPermissionCheckResponse, error) + // Lists installed ArangoPlatform Charts + ListCharts(ctx context.Context, in *SchedulerV2ListChartsRequest, opts ...grpc.CallOption) (SchedulerV2_ListChartsClient, error) + // Gets Installed ArangoDB Chart + GetChart(ctx context.Context, in *SchedulerV2GetChartRequest, opts ...grpc.CallOption) (*SchedulerV2GetChartResponse, error) +} + +type schedulerV2Client struct { + cc grpc.ClientConnInterface +} + +func NewSchedulerV2Client(cc grpc.ClientConnInterface) SchedulerV2Client { + return &schedulerV2Client{cc} +} + +func (c *schedulerV2Client) InvalidateCache(ctx context.Context, in *definition.Empty, opts ...grpc.CallOption) (*definition.Empty, error) { + out := new(definition.Empty) + err := c.cc.Invoke(ctx, "/scheduler.SchedulerV2/InvalidateCache", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerV2Client) Alive(ctx context.Context, in *definition.Empty, opts ...grpc.CallOption) (*definition.Empty, error) { + out := new(definition.Empty) + err := c.cc.Invoke(ctx, "/scheduler.SchedulerV2/Alive", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerV2Client) List(ctx context.Context, in *SchedulerV2ListRequest, opts ...grpc.CallOption) (*SchedulerV2ListResponse, error) { + out := new(SchedulerV2ListResponse) + err := c.cc.Invoke(ctx, "/scheduler.SchedulerV2/List", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerV2Client) Status(ctx context.Context, in *SchedulerV2StatusRequest, opts ...grpc.CallOption) (*SchedulerV2StatusResponse, error) { + out := new(SchedulerV2StatusResponse) + err := c.cc.Invoke(ctx, "/scheduler.SchedulerV2/Status", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerV2Client) StatusObjects(ctx context.Context, in *SchedulerV2StatusObjectsRequest, opts ...grpc.CallOption) (*SchedulerV2StatusObjectsResponse, error) { + out := new(SchedulerV2StatusObjectsResponse) + err := c.cc.Invoke(ctx, "/scheduler.SchedulerV2/StatusObjects", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerV2Client) Install(ctx context.Context, in *SchedulerV2InstallRequest, opts ...grpc.CallOption) (*SchedulerV2InstallResponse, error) { + out := new(SchedulerV2InstallResponse) + err := c.cc.Invoke(ctx, "/scheduler.SchedulerV2/Install", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerV2Client) Upgrade(ctx context.Context, in *SchedulerV2UpgradeRequest, opts ...grpc.CallOption) (*SchedulerV2UpgradeResponse, error) { + out := new(SchedulerV2UpgradeResponse) + err := c.cc.Invoke(ctx, "/scheduler.SchedulerV2/Upgrade", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerV2Client) Uninstall(ctx context.Context, in *SchedulerV2UninstallRequest, opts ...grpc.CallOption) (*SchedulerV2UninstallResponse, error) { + out := new(SchedulerV2UninstallResponse) + err := c.cc.Invoke(ctx, "/scheduler.SchedulerV2/Uninstall", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerV2Client) Test(ctx context.Context, in *SchedulerV2TestRequest, opts ...grpc.CallOption) (*SchedulerV2TestResponse, error) { + out := new(SchedulerV2TestResponse) + err := c.cc.Invoke(ctx, "/scheduler.SchedulerV2/Test", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerV2Client) DiscoverAPIResources(ctx context.Context, in *SchedulerV2DiscoverAPIResourcesRequest, opts ...grpc.CallOption) (*SchedulerV2DiscoverAPIResourcesResponse, error) { + out := new(SchedulerV2DiscoverAPIResourcesResponse) + err := c.cc.Invoke(ctx, "/scheduler.SchedulerV2/DiscoverAPIResources", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerV2Client) DiscoverAPIResource(ctx context.Context, in *SchedulerV2DiscoverAPIResourceRequest, opts ...grpc.CallOption) (*SchedulerV2DiscoverAPIResourceResponse, error) { + out := new(SchedulerV2DiscoverAPIResourceResponse) + err := c.cc.Invoke(ctx, "/scheduler.SchedulerV2/DiscoverAPIResource", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerV2Client) KubernetesGet(ctx context.Context, in *SchedulerV2KubernetesGetRequest, opts ...grpc.CallOption) (*SchedulerV2KubernetesGetResponse, error) { + out := new(SchedulerV2KubernetesGetResponse) + err := c.cc.Invoke(ctx, "/scheduler.SchedulerV2/KubernetesGet", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerV2Client) KubernetesPermissionCheck(ctx context.Context, in *SchedulerV2KubernetesPermissionCheckRequest, opts ...grpc.CallOption) (*SchedulerV2KubernetesPermissionCheckResponse, error) { + out := new(SchedulerV2KubernetesPermissionCheckResponse) + err := c.cc.Invoke(ctx, "/scheduler.SchedulerV2/KubernetesPermissionCheck", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *schedulerV2Client) ListCharts(ctx context.Context, in *SchedulerV2ListChartsRequest, opts ...grpc.CallOption) (SchedulerV2_ListChartsClient, error) { + stream, err := c.cc.NewStream(ctx, &SchedulerV2_ServiceDesc.Streams[0], "/scheduler.SchedulerV2/ListCharts", opts...) + if err != nil { + return nil, err + } + x := &schedulerV2ListChartsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type SchedulerV2_ListChartsClient interface { + Recv() (*SchedulerV2ListChartsResponse, error) + grpc.ClientStream +} + +type schedulerV2ListChartsClient struct { + grpc.ClientStream +} + +func (x *schedulerV2ListChartsClient) Recv() (*SchedulerV2ListChartsResponse, error) { + m := new(SchedulerV2ListChartsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *schedulerV2Client) GetChart(ctx context.Context, in *SchedulerV2GetChartRequest, opts ...grpc.CallOption) (*SchedulerV2GetChartResponse, error) { + out := new(SchedulerV2GetChartResponse) + err := c.cc.Invoke(ctx, "/scheduler.SchedulerV2/GetChart", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// SchedulerV2Server is the server API for SchedulerV2 service. +// All implementations must embed UnimplementedSchedulerV2Server +// for forward compatibility +type SchedulerV2Server interface { + // Invalidates local ServiceDiscover cache + InvalidateCache(context.Context, *definition.Empty) (*definition.Empty, error) + // Ensure that Helm Client is able to communicate with Kubernetes + Alive(context.Context, *definition.Empty) (*definition.Empty, error) + // Executes Helm List Action + List(context.Context, *SchedulerV2ListRequest) (*SchedulerV2ListResponse, error) + // Executes Helm Status Action + Status(context.Context, *SchedulerV2StatusRequest) (*SchedulerV2StatusResponse, error) + // Executes Helm Status Action and fetch Resources from Kubernetes API + StatusObjects(context.Context, *SchedulerV2StatusObjectsRequest) (*SchedulerV2StatusObjectsResponse, error) + // Executes Helm Install Action + Install(context.Context, *SchedulerV2InstallRequest) (*SchedulerV2InstallResponse, error) + // Executes Helm Upgrade Action + Upgrade(context.Context, *SchedulerV2UpgradeRequest) (*SchedulerV2UpgradeResponse, error) + // Executes Helm Uninstall Action + Uninstall(context.Context, *SchedulerV2UninstallRequest) (*SchedulerV2UninstallResponse, error) + // Executes Helm Test Action + Test(context.Context, *SchedulerV2TestRequest) (*SchedulerV2TestResponse, error) + // Discovers Kubernetes API Resources for Group + DiscoverAPIResources(context.Context, *SchedulerV2DiscoverAPIResourcesRequest) (*SchedulerV2DiscoverAPIResourcesResponse, error) + // Discovers Kubernetes API Resources for Kind + DiscoverAPIResource(context.Context, *SchedulerV2DiscoverAPIResourceRequest) (*SchedulerV2DiscoverAPIResourceResponse, error) + // Gets Kubernetes objects from the API + KubernetesGet(context.Context, *SchedulerV2KubernetesGetRequest) (*SchedulerV2KubernetesGetResponse, error) + // Checks if principal can take an action + KubernetesPermissionCheck(context.Context, *SchedulerV2KubernetesPermissionCheckRequest) (*SchedulerV2KubernetesPermissionCheckResponse, error) + // Lists installed ArangoPlatform Charts + ListCharts(*SchedulerV2ListChartsRequest, SchedulerV2_ListChartsServer) error + // Gets Installed ArangoDB Chart + GetChart(context.Context, *SchedulerV2GetChartRequest) (*SchedulerV2GetChartResponse, error) + mustEmbedUnimplementedSchedulerV2Server() +} + +// UnimplementedSchedulerV2Server must be embedded to have forward compatible implementations. +type UnimplementedSchedulerV2Server struct { +} + +func (UnimplementedSchedulerV2Server) InvalidateCache(context.Context, *definition.Empty) (*definition.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method InvalidateCache not implemented") +} +func (UnimplementedSchedulerV2Server) Alive(context.Context, *definition.Empty) (*definition.Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method Alive not implemented") +} +func (UnimplementedSchedulerV2Server) List(context.Context, *SchedulerV2ListRequest) (*SchedulerV2ListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedSchedulerV2Server) Status(context.Context, *SchedulerV2StatusRequest) (*SchedulerV2StatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Status not implemented") +} +func (UnimplementedSchedulerV2Server) StatusObjects(context.Context, *SchedulerV2StatusObjectsRequest) (*SchedulerV2StatusObjectsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StatusObjects not implemented") +} +func (UnimplementedSchedulerV2Server) Install(context.Context, *SchedulerV2InstallRequest) (*SchedulerV2InstallResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Install not implemented") +} +func (UnimplementedSchedulerV2Server) Upgrade(context.Context, *SchedulerV2UpgradeRequest) (*SchedulerV2UpgradeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Upgrade not implemented") +} +func (UnimplementedSchedulerV2Server) Uninstall(context.Context, *SchedulerV2UninstallRequest) (*SchedulerV2UninstallResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Uninstall not implemented") +} +func (UnimplementedSchedulerV2Server) Test(context.Context, *SchedulerV2TestRequest) (*SchedulerV2TestResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Test not implemented") +} +func (UnimplementedSchedulerV2Server) DiscoverAPIResources(context.Context, *SchedulerV2DiscoverAPIResourcesRequest) (*SchedulerV2DiscoverAPIResourcesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DiscoverAPIResources not implemented") +} +func (UnimplementedSchedulerV2Server) DiscoverAPIResource(context.Context, *SchedulerV2DiscoverAPIResourceRequest) (*SchedulerV2DiscoverAPIResourceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DiscoverAPIResource not implemented") +} +func (UnimplementedSchedulerV2Server) KubernetesGet(context.Context, *SchedulerV2KubernetesGetRequest) (*SchedulerV2KubernetesGetResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method KubernetesGet not implemented") +} +func (UnimplementedSchedulerV2Server) KubernetesPermissionCheck(context.Context, *SchedulerV2KubernetesPermissionCheckRequest) (*SchedulerV2KubernetesPermissionCheckResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method KubernetesPermissionCheck not implemented") +} +func (UnimplementedSchedulerV2Server) ListCharts(*SchedulerV2ListChartsRequest, SchedulerV2_ListChartsServer) error { + return status.Errorf(codes.Unimplemented, "method ListCharts not implemented") +} +func (UnimplementedSchedulerV2Server) GetChart(context.Context, *SchedulerV2GetChartRequest) (*SchedulerV2GetChartResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetChart not implemented") +} +func (UnimplementedSchedulerV2Server) mustEmbedUnimplementedSchedulerV2Server() {} + +// UnsafeSchedulerV2Server may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to SchedulerV2Server will +// result in compilation errors. +type UnsafeSchedulerV2Server interface { + mustEmbedUnimplementedSchedulerV2Server() +} + +func RegisterSchedulerV2Server(s grpc.ServiceRegistrar, srv SchedulerV2Server) { + s.RegisterService(&SchedulerV2_ServiceDesc, srv) +} + +func _SchedulerV2_InvalidateCache_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(definition.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerV2Server).InvalidateCache(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.SchedulerV2/InvalidateCache", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerV2Server).InvalidateCache(ctx, req.(*definition.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _SchedulerV2_Alive_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(definition.Empty) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerV2Server).Alive(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.SchedulerV2/Alive", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerV2Server).Alive(ctx, req.(*definition.Empty)) + } + return interceptor(ctx, in, info, handler) +} + +func _SchedulerV2_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SchedulerV2ListRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerV2Server).List(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.SchedulerV2/List", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerV2Server).List(ctx, req.(*SchedulerV2ListRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SchedulerV2_Status_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SchedulerV2StatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerV2Server).Status(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.SchedulerV2/Status", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerV2Server).Status(ctx, req.(*SchedulerV2StatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SchedulerV2_StatusObjects_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SchedulerV2StatusObjectsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerV2Server).StatusObjects(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.SchedulerV2/StatusObjects", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerV2Server).StatusObjects(ctx, req.(*SchedulerV2StatusObjectsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SchedulerV2_Install_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SchedulerV2InstallRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerV2Server).Install(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.SchedulerV2/Install", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerV2Server).Install(ctx, req.(*SchedulerV2InstallRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SchedulerV2_Upgrade_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SchedulerV2UpgradeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerV2Server).Upgrade(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.SchedulerV2/Upgrade", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerV2Server).Upgrade(ctx, req.(*SchedulerV2UpgradeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SchedulerV2_Uninstall_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SchedulerV2UninstallRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerV2Server).Uninstall(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.SchedulerV2/Uninstall", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerV2Server).Uninstall(ctx, req.(*SchedulerV2UninstallRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SchedulerV2_Test_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SchedulerV2TestRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerV2Server).Test(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.SchedulerV2/Test", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerV2Server).Test(ctx, req.(*SchedulerV2TestRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SchedulerV2_DiscoverAPIResources_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SchedulerV2DiscoverAPIResourcesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerV2Server).DiscoverAPIResources(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.SchedulerV2/DiscoverAPIResources", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerV2Server).DiscoverAPIResources(ctx, req.(*SchedulerV2DiscoverAPIResourcesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SchedulerV2_DiscoverAPIResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SchedulerV2DiscoverAPIResourceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerV2Server).DiscoverAPIResource(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.SchedulerV2/DiscoverAPIResource", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerV2Server).DiscoverAPIResource(ctx, req.(*SchedulerV2DiscoverAPIResourceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SchedulerV2_KubernetesGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SchedulerV2KubernetesGetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerV2Server).KubernetesGet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.SchedulerV2/KubernetesGet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerV2Server).KubernetesGet(ctx, req.(*SchedulerV2KubernetesGetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SchedulerV2_KubernetesPermissionCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SchedulerV2KubernetesPermissionCheckRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerV2Server).KubernetesPermissionCheck(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.SchedulerV2/KubernetesPermissionCheck", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerV2Server).KubernetesPermissionCheck(ctx, req.(*SchedulerV2KubernetesPermissionCheckRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _SchedulerV2_ListCharts_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(SchedulerV2ListChartsRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(SchedulerV2Server).ListCharts(m, &schedulerV2ListChartsServer{stream}) +} + +type SchedulerV2_ListChartsServer interface { + Send(*SchedulerV2ListChartsResponse) error + grpc.ServerStream +} + +type schedulerV2ListChartsServer struct { + grpc.ServerStream +} + +func (x *schedulerV2ListChartsServer) Send(m *SchedulerV2ListChartsResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _SchedulerV2_GetChart_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SchedulerV2GetChartRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(SchedulerV2Server).GetChart(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/scheduler.SchedulerV2/GetChart", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(SchedulerV2Server).GetChart(ctx, req.(*SchedulerV2GetChartRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// SchedulerV2_ServiceDesc is the grpc.ServiceDesc for SchedulerV2 service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var SchedulerV2_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "scheduler.SchedulerV2", + HandlerType: (*SchedulerV2Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "InvalidateCache", + Handler: _SchedulerV2_InvalidateCache_Handler, + }, + { + MethodName: "Alive", + Handler: _SchedulerV2_Alive_Handler, + }, + { + MethodName: "List", + Handler: _SchedulerV2_List_Handler, + }, + { + MethodName: "Status", + Handler: _SchedulerV2_Status_Handler, + }, + { + MethodName: "StatusObjects", + Handler: _SchedulerV2_StatusObjects_Handler, + }, + { + MethodName: "Install", + Handler: _SchedulerV2_Install_Handler, + }, + { + MethodName: "Upgrade", + Handler: _SchedulerV2_Upgrade_Handler, + }, + { + MethodName: "Uninstall", + Handler: _SchedulerV2_Uninstall_Handler, + }, + { + MethodName: "Test", + Handler: _SchedulerV2_Test_Handler, + }, + { + MethodName: "DiscoverAPIResources", + Handler: _SchedulerV2_DiscoverAPIResources_Handler, + }, + { + MethodName: "DiscoverAPIResource", + Handler: _SchedulerV2_DiscoverAPIResource_Handler, + }, + { + MethodName: "KubernetesGet", + Handler: _SchedulerV2_KubernetesGet_Handler, + }, + { + MethodName: "KubernetesPermissionCheck", + Handler: _SchedulerV2_KubernetesPermissionCheck_Handler, + }, + { + MethodName: "GetChart", + Handler: _SchedulerV2_GetChart_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "ListCharts", + Handler: _SchedulerV2_ListCharts_Handler, + ServerStreams: true, + }, + }, + Metadata: "integrations/scheduler/v2/definition/definition.proto", +} diff --git a/integrations/scheduler/v2/definition/helm.pb.go b/integrations/scheduler/v2/definition/helm.pb.go new file mode 100644 index 000000000..ad88c9aed --- /dev/null +++ b/integrations/scheduler/v2/definition/helm.pb.go @@ -0,0 +1,1679 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.21.1 +// source: integrations/scheduler/v2/definition/helm.proto + +package definition + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Request +type SchedulerV2ListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Request Options + Options *SchedulerV2ListRequestOptions `protobuf:"bytes,1,opt,name=options,proto3,oneof" json:"options,omitempty"` +} + +func (x *SchedulerV2ListRequest) Reset() { + *x = SchedulerV2ListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2ListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2ListRequest) ProtoMessage() {} + +func (x *SchedulerV2ListRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2ListRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2ListRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{0} +} + +func (x *SchedulerV2ListRequest) GetOptions() *SchedulerV2ListRequestOptions { + if x != nil { + return x.Options + } + return nil +} + +// Request Options +type SchedulerV2ListRequestOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Label selectors + Selectors map[string]string `protobuf:"bytes,1,rep,name=selectors,proto3" json:"selectors,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *SchedulerV2ListRequestOptions) Reset() { + *x = SchedulerV2ListRequestOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2ListRequestOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2ListRequestOptions) ProtoMessage() {} + +func (x *SchedulerV2ListRequestOptions) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2ListRequestOptions.ProtoReflect.Descriptor instead. +func (*SchedulerV2ListRequestOptions) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{1} +} + +func (x *SchedulerV2ListRequestOptions) GetSelectors() map[string]string { + if x != nil { + return x.Selectors + } + return nil +} + +// Response +type SchedulerV2ListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of the releases + Releases map[string]*SchedulerV2Release `protobuf:"bytes,1,rep,name=releases,proto3" json:"releases,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *SchedulerV2ListResponse) Reset() { + *x = SchedulerV2ListResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2ListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2ListResponse) ProtoMessage() {} + +func (x *SchedulerV2ListResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2ListResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2ListResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{2} +} + +func (x *SchedulerV2ListResponse) GetReleases() map[string]*SchedulerV2Release { + if x != nil { + return x.Releases + } + return nil +} + +// Request +type SchedulerV2StatusRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Request Options + Options *SchedulerV2StatusRequestOptions `protobuf:"bytes,1,opt,name=options,proto3,oneof" json:"options,omitempty"` + // Helm Release Name + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *SchedulerV2StatusRequest) Reset() { + *x = SchedulerV2StatusRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2StatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2StatusRequest) ProtoMessage() {} + +func (x *SchedulerV2StatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2StatusRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2StatusRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{3} +} + +func (x *SchedulerV2StatusRequest) GetOptions() *SchedulerV2StatusRequestOptions { + if x != nil { + return x.Options + } + return nil +} + +func (x *SchedulerV2StatusRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// Request Options +type SchedulerV2StatusRequestOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SchedulerV2StatusRequestOptions) Reset() { + *x = SchedulerV2StatusRequestOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2StatusRequestOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2StatusRequestOptions) ProtoMessage() {} + +func (x *SchedulerV2StatusRequestOptions) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2StatusRequestOptions.ProtoReflect.Descriptor instead. +func (*SchedulerV2StatusRequestOptions) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{4} +} + +// Response +type SchedulerV2StatusResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Helm Release Object + Release *SchedulerV2Release `protobuf:"bytes,1,opt,name=release,proto3,oneof" json:"release,omitempty"` +} + +func (x *SchedulerV2StatusResponse) Reset() { + *x = SchedulerV2StatusResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2StatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2StatusResponse) ProtoMessage() {} + +func (x *SchedulerV2StatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2StatusResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2StatusResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{5} +} + +func (x *SchedulerV2StatusResponse) GetRelease() *SchedulerV2Release { + if x != nil { + return x.Release + } + return nil +} + +// Request +type SchedulerV2StatusObjectsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Request Options + Options *SchedulerV2StatusRequestOptions `protobuf:"bytes,1,opt,name=options,proto3,oneof" json:"options,omitempty"` + // Helm Release Name + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *SchedulerV2StatusObjectsRequest) Reset() { + *x = SchedulerV2StatusObjectsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2StatusObjectsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2StatusObjectsRequest) ProtoMessage() {} + +func (x *SchedulerV2StatusObjectsRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2StatusObjectsRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2StatusObjectsRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{6} +} + +func (x *SchedulerV2StatusObjectsRequest) GetOptions() *SchedulerV2StatusRequestOptions { + if x != nil { + return x.Options + } + return nil +} + +func (x *SchedulerV2StatusObjectsRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// Response +type SchedulerV2StatusObjectsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Helm Release Object + Release *SchedulerV2Release `protobuf:"bytes,1,opt,name=release,proto3,oneof" json:"release,omitempty"` + // List of the Kubernetes Objects + Objects []*SchedulerV2ReleaseInfoResourceObject `protobuf:"bytes,2,rep,name=objects,proto3" json:"objects,omitempty"` +} + +func (x *SchedulerV2StatusObjectsResponse) Reset() { + *x = SchedulerV2StatusObjectsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2StatusObjectsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2StatusObjectsResponse) ProtoMessage() {} + +func (x *SchedulerV2StatusObjectsResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2StatusObjectsResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2StatusObjectsResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{7} +} + +func (x *SchedulerV2StatusObjectsResponse) GetRelease() *SchedulerV2Release { + if x != nil { + return x.Release + } + return nil +} + +func (x *SchedulerV2StatusObjectsResponse) GetObjects() []*SchedulerV2ReleaseInfoResourceObject { + if x != nil { + return x.Objects + } + return nil +} + +// Request +type SchedulerV2InstallRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Request Options + Options *SchedulerV2InstallRequestOptions `protobuf:"bytes,1,opt,name=options,proto3,oneof" json:"options,omitempty"` + // Helm Release Name + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Helm Chart Tar GZip File Bytes + Chart []byte `protobuf:"bytes,3,opt,name=chart,proto3" json:"chart,omitempty"` + // Helm Chart Values bytes + Values []byte `protobuf:"bytes,4,opt,name=values,proto3" json:"values,omitempty"` +} + +func (x *SchedulerV2InstallRequest) Reset() { + *x = SchedulerV2InstallRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2InstallRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2InstallRequest) ProtoMessage() {} + +func (x *SchedulerV2InstallRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2InstallRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2InstallRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{8} +} + +func (x *SchedulerV2InstallRequest) GetOptions() *SchedulerV2InstallRequestOptions { + if x != nil { + return x.Options + } + return nil +} + +func (x *SchedulerV2InstallRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SchedulerV2InstallRequest) GetChart() []byte { + if x != nil { + return x.Chart + } + return nil +} + +func (x *SchedulerV2InstallRequest) GetValues() []byte { + if x != nil { + return x.Values + } + return nil +} + +// Request Options +type SchedulerV2InstallRequestOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Release Labels + Labels map[string]string `protobuf:"bytes,1,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Waits for the upgrade to be completed + Wait *bool `protobuf:"varint,2,opt,name=wait,proto3,oneof" json:"wait,omitempty"` +} + +func (x *SchedulerV2InstallRequestOptions) Reset() { + *x = SchedulerV2InstallRequestOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2InstallRequestOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2InstallRequestOptions) ProtoMessage() {} + +func (x *SchedulerV2InstallRequestOptions) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2InstallRequestOptions.ProtoReflect.Descriptor instead. +func (*SchedulerV2InstallRequestOptions) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{9} +} + +func (x *SchedulerV2InstallRequestOptions) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +func (x *SchedulerV2InstallRequestOptions) GetWait() bool { + if x != nil && x.Wait != nil { + return *x.Wait + } + return false +} + +// Response +type SchedulerV2InstallResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Helm Release Object + Release *SchedulerV2Release `protobuf:"bytes,1,opt,name=release,proto3,oneof" json:"release,omitempty"` +} + +func (x *SchedulerV2InstallResponse) Reset() { + *x = SchedulerV2InstallResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2InstallResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2InstallResponse) ProtoMessage() {} + +func (x *SchedulerV2InstallResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2InstallResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2InstallResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{10} +} + +func (x *SchedulerV2InstallResponse) GetRelease() *SchedulerV2Release { + if x != nil { + return x.Release + } + return nil +} + +// Request +type SchedulerV2UpgradeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Request Options + Options *SchedulerV2UpgradeRequestOptions `protobuf:"bytes,1,opt,name=options,proto3,oneof" json:"options,omitempty"` + // Helm Release Name + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Helm Chart Tar GZip File Bytes + Chart []byte `protobuf:"bytes,3,opt,name=chart,proto3" json:"chart,omitempty"` + // Helm Chart Values bytes + Values []byte `protobuf:"bytes,4,opt,name=values,proto3" json:"values,omitempty"` +} + +func (x *SchedulerV2UpgradeRequest) Reset() { + *x = SchedulerV2UpgradeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2UpgradeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2UpgradeRequest) ProtoMessage() {} + +func (x *SchedulerV2UpgradeRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2UpgradeRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2UpgradeRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{11} +} + +func (x *SchedulerV2UpgradeRequest) GetOptions() *SchedulerV2UpgradeRequestOptions { + if x != nil { + return x.Options + } + return nil +} + +func (x *SchedulerV2UpgradeRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SchedulerV2UpgradeRequest) GetChart() []byte { + if x != nil { + return x.Chart + } + return nil +} + +func (x *SchedulerV2UpgradeRequest) GetValues() []byte { + if x != nil { + return x.Values + } + return nil +} + +// Request Options +type SchedulerV2UpgradeRequestOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Release Labels + Labels map[string]string `protobuf:"bytes,1,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Waits for the upgrade to be completed + Wait *bool `protobuf:"varint,2,opt,name=wait,proto3,oneof" json:"wait,omitempty"` +} + +func (x *SchedulerV2UpgradeRequestOptions) Reset() { + *x = SchedulerV2UpgradeRequestOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2UpgradeRequestOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2UpgradeRequestOptions) ProtoMessage() {} + +func (x *SchedulerV2UpgradeRequestOptions) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2UpgradeRequestOptions.ProtoReflect.Descriptor instead. +func (*SchedulerV2UpgradeRequestOptions) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{12} +} + +func (x *SchedulerV2UpgradeRequestOptions) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +func (x *SchedulerV2UpgradeRequestOptions) GetWait() bool { + if x != nil && x.Wait != nil { + return *x.Wait + } + return false +} + +// Response +type SchedulerV2UpgradeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Helm Release Object Before + Before *SchedulerV2Release `protobuf:"bytes,1,opt,name=before,proto3,oneof" json:"before,omitempty"` + // Helm Release Object After + After *SchedulerV2Release `protobuf:"bytes,2,opt,name=after,proto3,oneof" json:"after,omitempty"` +} + +func (x *SchedulerV2UpgradeResponse) Reset() { + *x = SchedulerV2UpgradeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2UpgradeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2UpgradeResponse) ProtoMessage() {} + +func (x *SchedulerV2UpgradeResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2UpgradeResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2UpgradeResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{13} +} + +func (x *SchedulerV2UpgradeResponse) GetBefore() *SchedulerV2Release { + if x != nil { + return x.Before + } + return nil +} + +func (x *SchedulerV2UpgradeResponse) GetAfter() *SchedulerV2Release { + if x != nil { + return x.After + } + return nil +} + +// Request +type SchedulerV2UninstallRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Request Options + Options *SchedulerV2UninstallRequestOptions `protobuf:"bytes,1,opt,name=options,proto3,oneof" json:"options,omitempty"` + // Helm Release Name + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *SchedulerV2UninstallRequest) Reset() { + *x = SchedulerV2UninstallRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2UninstallRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2UninstallRequest) ProtoMessage() {} + +func (x *SchedulerV2UninstallRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2UninstallRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2UninstallRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{14} +} + +func (x *SchedulerV2UninstallRequest) GetOptions() *SchedulerV2UninstallRequestOptions { + if x != nil { + return x.Options + } + return nil +} + +func (x *SchedulerV2UninstallRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// Request Options +type SchedulerV2UninstallRequestOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Waits for the upgrade to be completed + Wait *bool `protobuf:"varint,1,opt,name=wait,proto3,oneof" json:"wait,omitempty"` +} + +func (x *SchedulerV2UninstallRequestOptions) Reset() { + *x = SchedulerV2UninstallRequestOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2UninstallRequestOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2UninstallRequestOptions) ProtoMessage() {} + +func (x *SchedulerV2UninstallRequestOptions) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2UninstallRequestOptions.ProtoReflect.Descriptor instead. +func (*SchedulerV2UninstallRequestOptions) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{15} +} + +func (x *SchedulerV2UninstallRequestOptions) GetWait() bool { + if x != nil && x.Wait != nil { + return *x.Wait + } + return false +} + +// Response +type SchedulerV2UninstallResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Uninstall info + Info string `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` + // Helm Release Object + Release *SchedulerV2Release `protobuf:"bytes,2,opt,name=release,proto3,oneof" json:"release,omitempty"` +} + +func (x *SchedulerV2UninstallResponse) Reset() { + *x = SchedulerV2UninstallResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2UninstallResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2UninstallResponse) ProtoMessage() {} + +func (x *SchedulerV2UninstallResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2UninstallResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2UninstallResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{16} +} + +func (x *SchedulerV2UninstallResponse) GetInfo() string { + if x != nil { + return x.Info + } + return "" +} + +func (x *SchedulerV2UninstallResponse) GetRelease() *SchedulerV2Release { + if x != nil { + return x.Release + } + return nil +} + +// Request +type SchedulerV2TestRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Request Options + Options *SchedulerV2TestRequestOptions `protobuf:"bytes,1,opt,name=options,proto3,oneof" json:"options,omitempty"` + // Helm Release Name + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *SchedulerV2TestRequest) Reset() { + *x = SchedulerV2TestRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2TestRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2TestRequest) ProtoMessage() {} + +func (x *SchedulerV2TestRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2TestRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2TestRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{17} +} + +func (x *SchedulerV2TestRequest) GetOptions() *SchedulerV2TestRequestOptions { + if x != nil { + return x.Options + } + return nil +} + +func (x *SchedulerV2TestRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// Request Options +type SchedulerV2TestRequestOptions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SchedulerV2TestRequestOptions) Reset() { + *x = SchedulerV2TestRequestOptions{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2TestRequestOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2TestRequestOptions) ProtoMessage() {} + +func (x *SchedulerV2TestRequestOptions) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2TestRequestOptions.ProtoReflect.Descriptor instead. +func (*SchedulerV2TestRequestOptions) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{18} +} + +// Response +type SchedulerV2TestResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Helm Release Object + Release *SchedulerV2Release `protobuf:"bytes,1,opt,name=release,proto3,oneof" json:"release,omitempty"` +} + +func (x *SchedulerV2TestResponse) Reset() { + *x = SchedulerV2TestResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2TestResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2TestResponse) ProtoMessage() {} + +func (x *SchedulerV2TestResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_helm_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2TestResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2TestResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP(), []int{19} +} + +func (x *SchedulerV2TestResponse) GetRelease() *SchedulerV2Release { + if x != nil { + return x.Release + } + return nil +} + +var File_integrations_scheduler_v2_definition_helm_proto protoreflect.FileDescriptor + +var file_integrations_scheduler_v2_definition_helm_proto_rawDesc = []byte{ + 0x0a, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x65, 0x6c, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x12, 0x09, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x1a, 0x32, 0x69, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x6d, 0x0a, 0x16, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x07, 0x6f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x72, 0x56, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0xb4, 0x01, 0x0a, 0x1d, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x55, 0x0a, 0x09, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x73, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x1a, 0x3c, 0x0a, 0x0e, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc3, 0x01, 0x0a, 0x17, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, + 0x1a, 0x5a, 0x0a, 0x0d, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x85, 0x01, 0x0a, + 0x18, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x07, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x56, 0x32, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x21, 0x0a, 0x1f, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x72, 0x56, 0x32, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x65, 0x0a, 0x19, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x88, + 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x8c, + 0x01, 0x0a, 0x1f, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x49, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, + 0x00, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xb7, 0x01, + 0x0a, 0x20, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x88, 0x01, 0x01, + 0x12, 0x49, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0xb5, 0x01, 0x0a, 0x19, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, + 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x72, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x63, 0x68, 0x61, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0xd0, 0x01, 0x0a, 0x20, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x77, 0x61, 0x69, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x04, 0x77, 0x61, 0x69, 0x74, 0x88, 0x01, 0x01, 0x1a, 0x39, + 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x77, 0x61, + 0x69, 0x74, 0x22, 0x66, 0x0a, 0x1a, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, + 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3c, 0x0a, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0a, + 0x0a, 0x08, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0xb5, 0x01, 0x0a, 0x19, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, + 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x72, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x63, 0x68, 0x61, 0x72, 0x74, 0x12, 0x16, + 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x22, 0xd0, 0x01, 0x0a, 0x20, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x56, 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x55, + 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x77, 0x61, 0x69, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x04, 0x77, 0x61, 0x69, 0x74, 0x88, 0x01, + 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x07, 0x0a, 0x05, + 0x5f, 0x77, 0x61, 0x69, 0x74, 0x22, 0xa7, 0x01, 0x0a, 0x1a, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x72, 0x56, 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x48, 0x00, 0x52, 0x06, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x88, 0x01, 0x01, + 0x12, 0x38, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x01, + 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x62, + 0x65, 0x66, 0x6f, 0x72, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x22, + 0x8b, 0x01, 0x0a, 0x1b, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x55, + 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x4c, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, + 0x00, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x46, 0x0a, + 0x22, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x55, 0x6e, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x17, 0x0a, 0x04, 0x77, 0x61, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x48, 0x00, 0x52, 0x04, 0x77, 0x61, 0x69, 0x74, 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, + 0x5f, 0x77, 0x61, 0x69, 0x74, 0x22, 0x7c, 0x0a, 0x1c, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x56, 0x32, 0x55, 0x6e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x3c, 0x0a, 0x07, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x16, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x72, 0x56, 0x32, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, + 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x07, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, + 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x1f, 0x0a, 0x1d, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x63, 0x0a, 0x17, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x88, 0x01, + 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x48, 0x5a, + 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x61, 0x6e, + 0x67, 0x6f, 0x64, 0x62, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x2d, 0x61, 0x72, 0x61, 0x6e, 0x67, 0x6f, + 0x64, 0x62, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_integrations_scheduler_v2_definition_helm_proto_rawDescOnce sync.Once + file_integrations_scheduler_v2_definition_helm_proto_rawDescData = file_integrations_scheduler_v2_definition_helm_proto_rawDesc +) + +func file_integrations_scheduler_v2_definition_helm_proto_rawDescGZIP() []byte { + file_integrations_scheduler_v2_definition_helm_proto_rawDescOnce.Do(func() { + file_integrations_scheduler_v2_definition_helm_proto_rawDescData = protoimpl.X.CompressGZIP(file_integrations_scheduler_v2_definition_helm_proto_rawDescData) + }) + return file_integrations_scheduler_v2_definition_helm_proto_rawDescData +} + +var file_integrations_scheduler_v2_definition_helm_proto_msgTypes = make([]protoimpl.MessageInfo, 24) +var file_integrations_scheduler_v2_definition_helm_proto_goTypes = []interface{}{ + (*SchedulerV2ListRequest)(nil), // 0: scheduler.SchedulerV2ListRequest + (*SchedulerV2ListRequestOptions)(nil), // 1: scheduler.SchedulerV2ListRequestOptions + (*SchedulerV2ListResponse)(nil), // 2: scheduler.SchedulerV2ListResponse + (*SchedulerV2StatusRequest)(nil), // 3: scheduler.SchedulerV2StatusRequest + (*SchedulerV2StatusRequestOptions)(nil), // 4: scheduler.SchedulerV2StatusRequestOptions + (*SchedulerV2StatusResponse)(nil), // 5: scheduler.SchedulerV2StatusResponse + (*SchedulerV2StatusObjectsRequest)(nil), // 6: scheduler.SchedulerV2StatusObjectsRequest + (*SchedulerV2StatusObjectsResponse)(nil), // 7: scheduler.SchedulerV2StatusObjectsResponse + (*SchedulerV2InstallRequest)(nil), // 8: scheduler.SchedulerV2InstallRequest + (*SchedulerV2InstallRequestOptions)(nil), // 9: scheduler.SchedulerV2InstallRequestOptions + (*SchedulerV2InstallResponse)(nil), // 10: scheduler.SchedulerV2InstallResponse + (*SchedulerV2UpgradeRequest)(nil), // 11: scheduler.SchedulerV2UpgradeRequest + (*SchedulerV2UpgradeRequestOptions)(nil), // 12: scheduler.SchedulerV2UpgradeRequestOptions + (*SchedulerV2UpgradeResponse)(nil), // 13: scheduler.SchedulerV2UpgradeResponse + (*SchedulerV2UninstallRequest)(nil), // 14: scheduler.SchedulerV2UninstallRequest + (*SchedulerV2UninstallRequestOptions)(nil), // 15: scheduler.SchedulerV2UninstallRequestOptions + (*SchedulerV2UninstallResponse)(nil), // 16: scheduler.SchedulerV2UninstallResponse + (*SchedulerV2TestRequest)(nil), // 17: scheduler.SchedulerV2TestRequest + (*SchedulerV2TestRequestOptions)(nil), // 18: scheduler.SchedulerV2TestRequestOptions + (*SchedulerV2TestResponse)(nil), // 19: scheduler.SchedulerV2TestResponse + nil, // 20: scheduler.SchedulerV2ListRequestOptions.SelectorsEntry + nil, // 21: scheduler.SchedulerV2ListResponse.ReleasesEntry + nil, // 22: scheduler.SchedulerV2InstallRequestOptions.LabelsEntry + nil, // 23: scheduler.SchedulerV2UpgradeRequestOptions.LabelsEntry + (*SchedulerV2Release)(nil), // 24: scheduler.SchedulerV2Release + (*SchedulerV2ReleaseInfoResourceObject)(nil), // 25: scheduler.SchedulerV2ReleaseInfoResourceObject +} +var file_integrations_scheduler_v2_definition_helm_proto_depIdxs = []int32{ + 1, // 0: scheduler.SchedulerV2ListRequest.options:type_name -> scheduler.SchedulerV2ListRequestOptions + 20, // 1: scheduler.SchedulerV2ListRequestOptions.selectors:type_name -> scheduler.SchedulerV2ListRequestOptions.SelectorsEntry + 21, // 2: scheduler.SchedulerV2ListResponse.releases:type_name -> scheduler.SchedulerV2ListResponse.ReleasesEntry + 4, // 3: scheduler.SchedulerV2StatusRequest.options:type_name -> scheduler.SchedulerV2StatusRequestOptions + 24, // 4: scheduler.SchedulerV2StatusResponse.release:type_name -> scheduler.SchedulerV2Release + 4, // 5: scheduler.SchedulerV2StatusObjectsRequest.options:type_name -> scheduler.SchedulerV2StatusRequestOptions + 24, // 6: scheduler.SchedulerV2StatusObjectsResponse.release:type_name -> scheduler.SchedulerV2Release + 25, // 7: scheduler.SchedulerV2StatusObjectsResponse.objects:type_name -> scheduler.SchedulerV2ReleaseInfoResourceObject + 9, // 8: scheduler.SchedulerV2InstallRequest.options:type_name -> scheduler.SchedulerV2InstallRequestOptions + 22, // 9: scheduler.SchedulerV2InstallRequestOptions.labels:type_name -> scheduler.SchedulerV2InstallRequestOptions.LabelsEntry + 24, // 10: scheduler.SchedulerV2InstallResponse.release:type_name -> scheduler.SchedulerV2Release + 12, // 11: scheduler.SchedulerV2UpgradeRequest.options:type_name -> scheduler.SchedulerV2UpgradeRequestOptions + 23, // 12: scheduler.SchedulerV2UpgradeRequestOptions.labels:type_name -> scheduler.SchedulerV2UpgradeRequestOptions.LabelsEntry + 24, // 13: scheduler.SchedulerV2UpgradeResponse.before:type_name -> scheduler.SchedulerV2Release + 24, // 14: scheduler.SchedulerV2UpgradeResponse.after:type_name -> scheduler.SchedulerV2Release + 15, // 15: scheduler.SchedulerV2UninstallRequest.options:type_name -> scheduler.SchedulerV2UninstallRequestOptions + 24, // 16: scheduler.SchedulerV2UninstallResponse.release:type_name -> scheduler.SchedulerV2Release + 18, // 17: scheduler.SchedulerV2TestRequest.options:type_name -> scheduler.SchedulerV2TestRequestOptions + 24, // 18: scheduler.SchedulerV2TestResponse.release:type_name -> scheduler.SchedulerV2Release + 24, // 19: scheduler.SchedulerV2ListResponse.ReleasesEntry.value:type_name -> scheduler.SchedulerV2Release + 20, // [20:20] is the sub-list for method output_type + 20, // [20:20] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name +} + +func init() { file_integrations_scheduler_v2_definition_helm_proto_init() } +func file_integrations_scheduler_v2_definition_helm_proto_init() { + if File_integrations_scheduler_v2_definition_helm_proto != nil { + return + } + file_integrations_scheduler_v2_definition_release_proto_init() + if !protoimpl.UnsafeEnabled { + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2ListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2ListRequestOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2ListResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2StatusRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2StatusRequestOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2StatusResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2StatusObjectsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2StatusObjectsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2InstallRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2InstallRequestOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2InstallResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2UpgradeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2UpgradeRequestOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2UpgradeResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2UninstallRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2UninstallRequestOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2UninstallResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2TestRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2TestRequestOptions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2TestResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[0].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[3].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[5].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[6].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[7].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[8].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[9].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[10].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[11].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[12].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[13].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[14].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[15].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[16].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[17].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[19].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_integrations_scheduler_v2_definition_helm_proto_rawDesc, + NumEnums: 0, + NumMessages: 24, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_integrations_scheduler_v2_definition_helm_proto_goTypes, + DependencyIndexes: file_integrations_scheduler_v2_definition_helm_proto_depIdxs, + MessageInfos: file_integrations_scheduler_v2_definition_helm_proto_msgTypes, + }.Build() + File_integrations_scheduler_v2_definition_helm_proto = out.File + file_integrations_scheduler_v2_definition_helm_proto_rawDesc = nil + file_integrations_scheduler_v2_definition_helm_proto_goTypes = nil + file_integrations_scheduler_v2_definition_helm_proto_depIdxs = nil +} diff --git a/integrations/scheduler/v2/definition/helm.proto b/integrations/scheduler/v2/definition/helm.proto new file mode 100644 index 000000000..0f3ece133 --- /dev/null +++ b/integrations/scheduler/v2/definition/helm.proto @@ -0,0 +1,194 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 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 holder is ArangoDB GmbH, Cologne, Germany +// + +syntax = "proto3"; + +package scheduler; + +import "integrations/scheduler/v2/definition/release.proto"; + +option go_package = "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition"; + +// Request +message SchedulerV2ListRequest { + // Request Options + optional SchedulerV2ListRequestOptions options = 1; +} + +// Request Options +message SchedulerV2ListRequestOptions { + // Label selectors + map selectors = 1; +} + +// Response +message SchedulerV2ListResponse { + // List of the releases + map releases = 1; +} + +// Request +message SchedulerV2StatusRequest { + // Request Options + optional SchedulerV2StatusRequestOptions options = 1; + + // Helm Release Name + string name = 2; +} + +// Request Options +message SchedulerV2StatusRequestOptions { +} + +// Response +message SchedulerV2StatusResponse { + // Helm Release Object + optional SchedulerV2Release release = 1; +} + + +// Request +message SchedulerV2StatusObjectsRequest { + // Request Options + optional SchedulerV2StatusRequestOptions options = 1; + + // Helm Release Name + string name = 2; +} + +// Response +message SchedulerV2StatusObjectsResponse { + // Helm Release Object + optional SchedulerV2Release release = 1; + + // List of the Kubernetes Objects + repeated SchedulerV2ReleaseInfoResourceObject objects = 2; +} + + +// Request +message SchedulerV2InstallRequest { + // Request Options + optional SchedulerV2InstallRequestOptions options = 1; + + // Helm Release Name + string name = 2; + + // Helm Chart Tar GZip File Bytes + bytes chart = 3; + + // Helm Chart Values bytes + bytes values = 4; +} + +// Request Options +message SchedulerV2InstallRequestOptions { + // Release Labels + map labels = 1; + + // Waits for the upgrade to be completed + optional bool wait = 2; +} + +// Response +message SchedulerV2InstallResponse { + // Helm Release Object + optional SchedulerV2Release release = 1; +} + + +// Request +message SchedulerV2UpgradeRequest { + // Request Options + optional SchedulerV2UpgradeRequestOptions options = 1; + + // Helm Release Name + string name = 2; + + // Helm Chart Tar GZip File Bytes + bytes chart = 3; + + // Helm Chart Values bytes + bytes values = 4; +} + +// Request Options +message SchedulerV2UpgradeRequestOptions { + // Release Labels + map labels = 1; + + // Waits for the upgrade to be completed + optional bool wait = 2; +} + +// Response +message SchedulerV2UpgradeResponse { + // Helm Release Object Before + optional SchedulerV2Release before = 1; + + + // Helm Release Object After + optional SchedulerV2Release after = 2; +} + + +// Request +message SchedulerV2UninstallRequest { + // Request Options + optional SchedulerV2UninstallRequestOptions options = 1; + + // Helm Release Name + string name = 2; +} + +// Request Options +message SchedulerV2UninstallRequestOptions { + // Waits for the upgrade to be completed + optional bool wait = 1; +} + +// Response +message SchedulerV2UninstallResponse { + // Uninstall info + string info = 1; + + // Helm Release Object + optional SchedulerV2Release release = 2; +} + + +// Request +message SchedulerV2TestRequest { + // Request Options + optional SchedulerV2TestRequestOptions options = 1; + + // Helm Release Name + string name = 2; +} + +// Request Options +message SchedulerV2TestRequestOptions { +} + +// Response +message SchedulerV2TestResponse { + // Helm Release Object + optional SchedulerV2Release release = 1; +} \ No newline at end of file diff --git a/integrations/scheduler/v2/definition/helpers.go b/integrations/scheduler/v2/definition/helpers.go new file mode 100644 index 000000000..fa60ffee2 --- /dev/null +++ b/integrations/scheduler/v2/definition/helpers.go @@ -0,0 +1,184 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package definition + +import ( + "helm.sh/helm/v3/pkg/action" + "helm.sh/helm/v3/pkg/release" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/selection" + + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/helm" +) + +func (i SchedulerV2ReleaseInfoStatus) AsHelmStatus() release.Status { + switch i { + case SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_UNKNOWN_UNSPECIFIED: + return release.StatusUnknown + case SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_DEPLOYED: + return release.StatusDeployed + case SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_UNINSTALLED: + return release.StatusUninstalled + case SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_SUPERSEDED: + return release.StatusSuperseded + case SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_FAILED: + return release.StatusFailed + case SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_UNINSTALLING: + return release.StatusUninstalling + case SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGINSTALL: + return release.StatusPendingInstall + case SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGUPGRADE: + return release.StatusPendingUpgrade + case SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGROLLBACK: + return release.StatusPendingRollback + default: + return release.StatusUnknown + } +} + +func FromHelmStatus(in release.Status) SchedulerV2ReleaseInfoStatus { + switch in { + case release.StatusUnknown: + return SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_UNKNOWN_UNSPECIFIED + case release.StatusDeployed: + return SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_DEPLOYED + case release.StatusUninstalled: + return SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_UNINSTALLED + case release.StatusSuperseded: + return SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_SUPERSEDED + case release.StatusFailed: + return SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_FAILED + case release.StatusUninstalling: + return SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_UNINSTALLING + case release.StatusPendingInstall: + return SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGINSTALL + case release.StatusPendingUpgrade: + return SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGUPGRADE + case release.StatusPendingRollback: + return SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGROLLBACK + default: + return SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_UNKNOWN_UNSPECIFIED + } +} + +func (i *SchedulerV2InstallRequestOptions) Options() []util.Mod[action.Install] { + if i == nil { + return nil + } + + var opts []util.Mod[action.Install] + + if v := i.GetLabels(); len(v) > 0 { + opts = append(opts, func(in *action.Install) { + in.Labels = v + in.Wait = util.OptionalType(i.Wait, false) + }) + } + + return opts +} + +func (i *SchedulerV2UpgradeRequestOptions) Options() []util.Mod[action.Upgrade] { + if i == nil { + return nil + } + + var opts []util.Mod[action.Upgrade] + + if v := i.GetLabels(); len(v) > 0 { + opts = append(opts, func(in *action.Upgrade) { + in.Labels = v + in.Wait = util.OptionalType(i.Wait, false) + }) + } + + return opts +} + +func (i *SchedulerV2ListRequestOptions) Options() []util.Mod[action.List] { + if i == nil { + return nil + } + + var opts []util.Mod[action.List] + + if v := i.GetSelectors(); len(v) > 0 { + opts = append(opts, func(in *action.List) { + s := labels.NewSelector() + + for k, v := range v { + if r, err := labels.NewRequirement(k, selection.DoubleEquals, []string{v}); err == nil && r != nil { + s = s.Add(*r) + } + } + + in.Selector = s.String() + }) + } + + return opts +} + +func (i *SchedulerV2UninstallRequestOptions) Options() []util.Mod[action.Uninstall] { + if i == nil { + return nil + } + + var opts []util.Mod[action.Uninstall] + + opts = append(opts, func(in *action.Uninstall) { + in.Wait = util.OptionalType(i.Wait, false) + }) + + return opts +} + +func (i *SchedulerV2TestRequestOptions) Options() []util.Mod[action.ReleaseTesting] { + if i == nil { + return nil + } + + var opts []util.Mod[action.ReleaseTesting] + + return opts +} + +func (i *SchedulerV2GVK) AsHelmResource() schema.GroupVersionKind { + return schema.GroupVersionKind{ + Group: i.GetGroup(), + Version: i.GetVersion(), + Kind: i.GetKind(), + } +} + +func (i *SchedulerV2ReleaseInfoResource) AsHelmResource() helm.Resource { + if i == nil { + return helm.Resource{} + } + + return helm.Resource{ + GroupVersionKind: i.GetGvk().AsHelmResource(), + Name: i.GetName(), + Namespace: i.GetNamespace(), + } +} diff --git a/integrations/scheduler/v2/definition/kubernetes.pb.go b/integrations/scheduler/v2/definition/kubernetes.pb.go new file mode 100644 index 000000000..f305b89f2 --- /dev/null +++ b/integrations/scheduler/v2/definition/kubernetes.pb.go @@ -0,0 +1,968 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.21.1 +// source: integrations/scheduler/v2/definition/kubernetes.proto + +package definition + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Request +type SchedulerV2DiscoverAPIResourcesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Kubernetes API Group + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + // Kubernetes API Version + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *SchedulerV2DiscoverAPIResourcesRequest) Reset() { + *x = SchedulerV2DiscoverAPIResourcesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2DiscoverAPIResourcesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2DiscoverAPIResourcesRequest) ProtoMessage() {} + +func (x *SchedulerV2DiscoverAPIResourcesRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2DiscoverAPIResourcesRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2DiscoverAPIResourcesRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescGZIP(), []int{0} +} + +func (x *SchedulerV2DiscoverAPIResourcesRequest) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +func (x *SchedulerV2DiscoverAPIResourcesRequest) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +// Response +type SchedulerV2DiscoverAPIResourcesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Kubernetes API Resources + Resources []*SchedulerV2DiscoverAPIResource `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` +} + +func (x *SchedulerV2DiscoverAPIResourcesResponse) Reset() { + *x = SchedulerV2DiscoverAPIResourcesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2DiscoverAPIResourcesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2DiscoverAPIResourcesResponse) ProtoMessage() {} + +func (x *SchedulerV2DiscoverAPIResourcesResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2DiscoverAPIResourcesResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2DiscoverAPIResourcesResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescGZIP(), []int{1} +} + +func (x *SchedulerV2DiscoverAPIResourcesResponse) GetResources() []*SchedulerV2DiscoverAPIResource { + if x != nil { + return x.Resources + } + return nil +} + +// Request +type SchedulerV2DiscoverAPIResourceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Kubernetes API Group + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + // Kubernetes API Version + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // Kubernetes API Kind + Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` +} + +func (x *SchedulerV2DiscoverAPIResourceRequest) Reset() { + *x = SchedulerV2DiscoverAPIResourceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2DiscoverAPIResourceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2DiscoverAPIResourceRequest) ProtoMessage() {} + +func (x *SchedulerV2DiscoverAPIResourceRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2DiscoverAPIResourceRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2DiscoverAPIResourceRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescGZIP(), []int{2} +} + +func (x *SchedulerV2DiscoverAPIResourceRequest) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +func (x *SchedulerV2DiscoverAPIResourceRequest) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *SchedulerV2DiscoverAPIResourceRequest) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +// Response +type SchedulerV2DiscoverAPIResourceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Kubernetes API Resource + Resource *SchedulerV2DiscoverAPIResource `protobuf:"bytes,1,opt,name=resource,proto3,oneof" json:"resource,omitempty"` +} + +func (x *SchedulerV2DiscoverAPIResourceResponse) Reset() { + *x = SchedulerV2DiscoverAPIResourceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2DiscoverAPIResourceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2DiscoverAPIResourceResponse) ProtoMessage() {} + +func (x *SchedulerV2DiscoverAPIResourceResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2DiscoverAPIResourceResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2DiscoverAPIResourceResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescGZIP(), []int{3} +} + +func (x *SchedulerV2DiscoverAPIResourceResponse) GetResource() *SchedulerV2DiscoverAPIResource { + if x != nil { + return x.Resource + } + return nil +} + +// Kubernetes API Resource Definition +type SchedulerV2DiscoverAPIResource struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Kubernetes API Resource PluralName + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Kubernetes API Resource SingularName + SingularName string `protobuf:"bytes,2,opt,name=singular_name,json=singularName,proto3" json:"singular_name,omitempty"` + // Kubernetes API Resource Namespaced flag + Namespaced bool `protobuf:"varint,3,opt,name=namespaced,proto3" json:"namespaced,omitempty"` + // Kubernetes API Group + Group string `protobuf:"bytes,4,opt,name=group,proto3" json:"group,omitempty"` + // Kubernetes API Version + Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` + // Kubernetes API Kind + Kind string `protobuf:"bytes,6,opt,name=kind,proto3" json:"kind,omitempty"` + // Kubernetes API Resource Verbs + Verbs []string `protobuf:"bytes,7,rep,name=verbs,proto3" json:"verbs,omitempty"` + // Kubernetes API Resource ShortNames + ShortNames []string `protobuf:"bytes,8,rep,name=short_names,json=shortNames,proto3" json:"short_names,omitempty"` + // Kubernetes API Resource Categories + Categories []string `protobuf:"bytes,9,rep,name=categories,proto3" json:"categories,omitempty"` + // Kubernetes API Resource StorageVersionHash + StorageVersionHash string `protobuf:"bytes,10,opt,name=storage_version_hash,json=storageVersionHash,proto3" json:"storage_version_hash,omitempty"` +} + +func (x *SchedulerV2DiscoverAPIResource) Reset() { + *x = SchedulerV2DiscoverAPIResource{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2DiscoverAPIResource) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2DiscoverAPIResource) ProtoMessage() {} + +func (x *SchedulerV2DiscoverAPIResource) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2DiscoverAPIResource.ProtoReflect.Descriptor instead. +func (*SchedulerV2DiscoverAPIResource) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescGZIP(), []int{4} +} + +func (x *SchedulerV2DiscoverAPIResource) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SchedulerV2DiscoverAPIResource) GetSingularName() string { + if x != nil { + return x.SingularName + } + return "" +} + +func (x *SchedulerV2DiscoverAPIResource) GetNamespaced() bool { + if x != nil { + return x.Namespaced + } + return false +} + +func (x *SchedulerV2DiscoverAPIResource) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +func (x *SchedulerV2DiscoverAPIResource) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *SchedulerV2DiscoverAPIResource) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *SchedulerV2DiscoverAPIResource) GetVerbs() []string { + if x != nil { + return x.Verbs + } + return nil +} + +func (x *SchedulerV2DiscoverAPIResource) GetShortNames() []string { + if x != nil { + return x.ShortNames + } + return nil +} + +func (x *SchedulerV2DiscoverAPIResource) GetCategories() []string { + if x != nil { + return x.Categories + } + return nil +} + +func (x *SchedulerV2DiscoverAPIResource) GetStorageVersionHash() string { + if x != nil { + return x.StorageVersionHash + } + return "" +} + +// Request +type SchedulerV2KubernetesGetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Kubernetes API Resources + Resources []*SchedulerV2ReleaseInfoResource `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` +} + +func (x *SchedulerV2KubernetesGetRequest) Reset() { + *x = SchedulerV2KubernetesGetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2KubernetesGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2KubernetesGetRequest) ProtoMessage() {} + +func (x *SchedulerV2KubernetesGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2KubernetesGetRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2KubernetesGetRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescGZIP(), []int{5} +} + +func (x *SchedulerV2KubernetesGetRequest) GetResources() []*SchedulerV2ReleaseInfoResource { + if x != nil { + return x.Resources + } + return nil +} + +// Response +type SchedulerV2KubernetesGetResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Kubernetes API Objects + Objects []*SchedulerV2ReleaseInfoResourceObject `protobuf:"bytes,1,rep,name=objects,proto3" json:"objects,omitempty"` +} + +func (x *SchedulerV2KubernetesGetResponse) Reset() { + *x = SchedulerV2KubernetesGetResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2KubernetesGetResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2KubernetesGetResponse) ProtoMessage() {} + +func (x *SchedulerV2KubernetesGetResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2KubernetesGetResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2KubernetesGetResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescGZIP(), []int{6} +} + +func (x *SchedulerV2KubernetesGetResponse) GetObjects() []*SchedulerV2ReleaseInfoResourceObject { + if x != nil { + return x.Objects + } + return nil +} + +// SchedulerV2 KubernetesPermissionCheck Request +type SchedulerV2KubernetesPermissionCheckRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. + Verb string `protobuf:"bytes,1,opt,name=verb,proto3" json:"verb,omitempty"` + // Group is the API Group of the Resource. "*" means all. + Group string `protobuf:"bytes,2,opt,name=group,proto3" json:"group,omitempty"` + // Version is the API Version of the Resource. "*" means all. + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + // Resource is one of the existing resource types. "*" means all. + Resource string `protobuf:"bytes,4,opt,name=resource,proto3" json:"resource,omitempty"` + // Subresource is one of the existing resource types. "" means none. + SubResource string `protobuf:"bytes,5,opt,name=sub_resource,json=subResource,proto3" json:"sub_resource,omitempty"` + // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. + Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` + // Namespace is the namespace of the action being requested. + // "" (empty) is defaulted for LocalSubjectAccessReviews + // "" (empty) is empty for cluster-scoped resources + // "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview + // Defaults to the current namespace + Namespace *string `protobuf:"bytes,7,opt,name=namespace,proto3,oneof" json:"namespace,omitempty"` +} + +func (x *SchedulerV2KubernetesPermissionCheckRequest) Reset() { + *x = SchedulerV2KubernetesPermissionCheckRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2KubernetesPermissionCheckRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2KubernetesPermissionCheckRequest) ProtoMessage() {} + +func (x *SchedulerV2KubernetesPermissionCheckRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2KubernetesPermissionCheckRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2KubernetesPermissionCheckRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescGZIP(), []int{7} +} + +func (x *SchedulerV2KubernetesPermissionCheckRequest) GetVerb() string { + if x != nil { + return x.Verb + } + return "" +} + +func (x *SchedulerV2KubernetesPermissionCheckRequest) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +func (x *SchedulerV2KubernetesPermissionCheckRequest) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *SchedulerV2KubernetesPermissionCheckRequest) GetResource() string { + if x != nil { + return x.Resource + } + return "" +} + +func (x *SchedulerV2KubernetesPermissionCheckRequest) GetSubResource() string { + if x != nil { + return x.SubResource + } + return "" +} + +func (x *SchedulerV2KubernetesPermissionCheckRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SchedulerV2KubernetesPermissionCheckRequest) GetNamespace() string { + if x != nil && x.Namespace != nil { + return *x.Namespace + } + return "" +} + +// SchedulerV2 KubernetesPermissionCheck Response +type SchedulerV2KubernetesPermissionCheckResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Allowed is required. True if the action would be allowed, false otherwise. + Allowed bool `protobuf:"varint,1,opt,name=allowed,proto3" json:"allowed,omitempty"` + // Denied is optional. True if the action would be denied, otherwise + // false. If both allowed is false and denied is false, then the + // authorizer has no opinion on whether to authorize the action. Denied + // may not be true if Allowed is true. + // +optional + Denied *bool `protobuf:"varint,2,opt,name=denied,proto3,oneof" json:"denied,omitempty"` + // Reason is optional. It indicates why a request was allowed or denied. + Reason *string `protobuf:"bytes,3,opt,name=reason,proto3,oneof" json:"reason,omitempty"` + // EvaluationError is an indication that some error occurred during the authorization check. + // It is entirely possible to get an error and be able to continue determine authorization status in spite of it. + // For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request. + EvaluationError *string `protobuf:"bytes,4,opt,name=evaluation_error,json=evaluationError,proto3,oneof" json:"evaluation_error,omitempty"` +} + +func (x *SchedulerV2KubernetesPermissionCheckResponse) Reset() { + *x = SchedulerV2KubernetesPermissionCheckResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2KubernetesPermissionCheckResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2KubernetesPermissionCheckResponse) ProtoMessage() {} + +func (x *SchedulerV2KubernetesPermissionCheckResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2KubernetesPermissionCheckResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2KubernetesPermissionCheckResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescGZIP(), []int{8} +} + +func (x *SchedulerV2KubernetesPermissionCheckResponse) GetAllowed() bool { + if x != nil { + return x.Allowed + } + return false +} + +func (x *SchedulerV2KubernetesPermissionCheckResponse) GetDenied() bool { + if x != nil && x.Denied != nil { + return *x.Denied + } + return false +} + +func (x *SchedulerV2KubernetesPermissionCheckResponse) GetReason() string { + if x != nil && x.Reason != nil { + return *x.Reason + } + return "" +} + +func (x *SchedulerV2KubernetesPermissionCheckResponse) GetEvaluationError() string { + if x != nil && x.EvaluationError != nil { + return *x.EvaluationError + } + return "" +} + +var File_integrations_scheduler_v2_definition_kubernetes_proto protoreflect.FileDescriptor + +var file_integrations_scheduler_v2_definition_kubernetes_proto_rawDesc = []byte{ + 0x0a, 0x35, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x1a, 0x32, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x58, 0x0a, 0x26, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x72, 0x56, 0x32, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x50, 0x49, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0x72, 0x0a, 0x27, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x50, 0x49, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x09, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x50, + 0x49, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x22, 0x6b, 0x0a, 0x25, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x72, 0x56, 0x32, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x50, 0x49, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x22, 0x81, 0x01, 0x0a, 0x26, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, + 0x32, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x50, 0x49, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x50, + 0x49, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xc6, 0x02, 0x0a, 0x1e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x72, 0x56, 0x32, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x50, 0x49, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, + 0x73, 0x69, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x65, 0x72, 0x62, 0x73, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x65, 0x72, 0x62, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x14, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x68, 0x61, 0x73, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x61, 0x73, 0x68, 0x22, 0x6a, + 0x0a, 0x1f, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x4b, 0x75, 0x62, + 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x47, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x6d, 0x0a, 0x20, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, + 0x74, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, + 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0xf5, 0x01, 0x0a, 0x2b, 0x53, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, + 0x74, 0x65, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x76, 0x65, 0x72, + 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x14, 0x0a, + 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x75, 0x62, + 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x73, 0x75, 0x62, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x21, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x22, 0xdd, 0x01, 0x0a, 0x2c, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, + 0x32, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x06, + 0x64, 0x65, 0x6e, 0x69, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x06, + 0x64, 0x65, 0x6e, 0x69, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1b, 0x0a, 0x06, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x06, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2e, 0x0a, 0x10, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x02, 0x52, 0x0f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x64, 0x65, 0x6e, 0x69, 0x65, + 0x64, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x42, 0x13, 0x0a, 0x11, + 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x61, 0x72, 0x61, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x2d, 0x61, 0x72, + 0x61, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, + 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescOnce sync.Once + file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescData = file_integrations_scheduler_v2_definition_kubernetes_proto_rawDesc +) + +func file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescGZIP() []byte { + file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescOnce.Do(func() { + file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescData = protoimpl.X.CompressGZIP(file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescData) + }) + return file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescData +} + +var file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_integrations_scheduler_v2_definition_kubernetes_proto_goTypes = []interface{}{ + (*SchedulerV2DiscoverAPIResourcesRequest)(nil), // 0: scheduler.SchedulerV2DiscoverAPIResourcesRequest + (*SchedulerV2DiscoverAPIResourcesResponse)(nil), // 1: scheduler.SchedulerV2DiscoverAPIResourcesResponse + (*SchedulerV2DiscoverAPIResourceRequest)(nil), // 2: scheduler.SchedulerV2DiscoverAPIResourceRequest + (*SchedulerV2DiscoverAPIResourceResponse)(nil), // 3: scheduler.SchedulerV2DiscoverAPIResourceResponse + (*SchedulerV2DiscoverAPIResource)(nil), // 4: scheduler.SchedulerV2DiscoverAPIResource + (*SchedulerV2KubernetesGetRequest)(nil), // 5: scheduler.SchedulerV2KubernetesGetRequest + (*SchedulerV2KubernetesGetResponse)(nil), // 6: scheduler.SchedulerV2KubernetesGetResponse + (*SchedulerV2KubernetesPermissionCheckRequest)(nil), // 7: scheduler.SchedulerV2KubernetesPermissionCheckRequest + (*SchedulerV2KubernetesPermissionCheckResponse)(nil), // 8: scheduler.SchedulerV2KubernetesPermissionCheckResponse + (*SchedulerV2ReleaseInfoResource)(nil), // 9: scheduler.SchedulerV2ReleaseInfoResource + (*SchedulerV2ReleaseInfoResourceObject)(nil), // 10: scheduler.SchedulerV2ReleaseInfoResourceObject +} +var file_integrations_scheduler_v2_definition_kubernetes_proto_depIdxs = []int32{ + 4, // 0: scheduler.SchedulerV2DiscoverAPIResourcesResponse.resources:type_name -> scheduler.SchedulerV2DiscoverAPIResource + 4, // 1: scheduler.SchedulerV2DiscoverAPIResourceResponse.resource:type_name -> scheduler.SchedulerV2DiscoverAPIResource + 9, // 2: scheduler.SchedulerV2KubernetesGetRequest.resources:type_name -> scheduler.SchedulerV2ReleaseInfoResource + 10, // 3: scheduler.SchedulerV2KubernetesGetResponse.objects:type_name -> scheduler.SchedulerV2ReleaseInfoResourceObject + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_integrations_scheduler_v2_definition_kubernetes_proto_init() } +func file_integrations_scheduler_v2_definition_kubernetes_proto_init() { + if File_integrations_scheduler_v2_definition_kubernetes_proto != nil { + return + } + file_integrations_scheduler_v2_definition_release_proto_init() + if !protoimpl.UnsafeEnabled { + file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2DiscoverAPIResourcesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2DiscoverAPIResourcesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2DiscoverAPIResourceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2DiscoverAPIResourceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2DiscoverAPIResource); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2KubernetesGetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2KubernetesGetResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2KubernetesPermissionCheckRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2KubernetesPermissionCheckResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[3].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[7].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes[8].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_integrations_scheduler_v2_definition_kubernetes_proto_rawDesc, + NumEnums: 0, + NumMessages: 9, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_integrations_scheduler_v2_definition_kubernetes_proto_goTypes, + DependencyIndexes: file_integrations_scheduler_v2_definition_kubernetes_proto_depIdxs, + MessageInfos: file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes, + }.Build() + File_integrations_scheduler_v2_definition_kubernetes_proto = out.File + file_integrations_scheduler_v2_definition_kubernetes_proto_rawDesc = nil + file_integrations_scheduler_v2_definition_kubernetes_proto_goTypes = nil + file_integrations_scheduler_v2_definition_kubernetes_proto_depIdxs = nil +} diff --git a/integrations/scheduler/v2/definition/kubernetes.proto b/integrations/scheduler/v2/definition/kubernetes.proto new file mode 100644 index 000000000..7f13d5718 --- /dev/null +++ b/integrations/scheduler/v2/definition/kubernetes.proto @@ -0,0 +1,133 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 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 holder is ArangoDB GmbH, Cologne, Germany +// + +syntax = "proto3"; + +package scheduler; + +import "integrations/scheduler/v2/definition/release.proto"; + +option go_package = "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition"; + +// Request +message SchedulerV2DiscoverAPIResourcesRequest { + // Kubernetes API Group + string group = 1; + // Kubernetes API Version + string version = 2; +} + +// Response +message SchedulerV2DiscoverAPIResourcesResponse { + // Kubernetes API Resources + repeated SchedulerV2DiscoverAPIResource resources = 1; +} + +// Request +message SchedulerV2DiscoverAPIResourceRequest { + // Kubernetes API Group + string group = 1; + // Kubernetes API Version + string version = 2; + // Kubernetes API Kind + string kind = 3; +} + +// Response +message SchedulerV2DiscoverAPIResourceResponse { + // Kubernetes API Resource + optional SchedulerV2DiscoverAPIResource resource = 1; +} + +// Kubernetes API Resource Definition +message SchedulerV2DiscoverAPIResource { + // Kubernetes API Resource PluralName + string name = 1; + // Kubernetes API Resource SingularName + string singular_name = 2; + // Kubernetes API Resource Namespaced flag + bool namespaced = 3; + // Kubernetes API Group + string group = 4; + // Kubernetes API Version + string version = 5; + // Kubernetes API Kind + string kind = 6; + // Kubernetes API Resource Verbs + repeated string verbs = 7; + // Kubernetes API Resource ShortNames + repeated string short_names = 8; + // Kubernetes API Resource Categories + repeated string categories = 9; + // Kubernetes API Resource StorageVersionHash + string storage_version_hash = 10; +} + +// Request +message SchedulerV2KubernetesGetRequest { + // Kubernetes API Resources + repeated SchedulerV2ReleaseInfoResource resources = 1; +} + +// Response +message SchedulerV2KubernetesGetResponse { + // Kubernetes API Objects + repeated SchedulerV2ReleaseInfoResourceObject objects = 1; +} + +// SchedulerV2 KubernetesPermissionCheck Request +message SchedulerV2KubernetesPermissionCheckRequest { + // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. + string verb =1; + // Group is the API Group of the Resource. "*" means all. + string group=2; + // Version is the API Version of the Resource. "*" means all. + string version=3; + // Resource is one of the existing resource types. "*" means all. + string resource=4; + // Subresource is one of the existing resource types. "" means none. + string sub_resource=5; + // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. + string name=6; + // Namespace is the namespace of the action being requested. + // "" (empty) is defaulted for LocalSubjectAccessReviews + // "" (empty) is empty for cluster-scoped resources + // "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview + // Defaults to the current namespace + optional string namespace=7; +} + +// SchedulerV2 KubernetesPermissionCheck Response +message SchedulerV2KubernetesPermissionCheckResponse { + // Allowed is required. True if the action would be allowed, false otherwise. + bool allowed =1; + // Denied is optional. True if the action would be denied, otherwise + // false. If both allowed is false and denied is false, then the + // authorizer has no opinion on whether to authorize the action. Denied + // may not be true if Allowed is true. + // +optional + optional bool denied =2; + // Reason is optional. It indicates why a request was allowed or denied. + optional string reason =3; + // EvaluationError is an indication that some error occurred during the authorization check. + // It is entirely possible to get an error and be able to continue determine authorization status in spite of it. + // For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request. + optional string evaluation_error=4; +} \ No newline at end of file diff --git a/integrations/scheduler/v2/definition/release.pb.go b/integrations/scheduler/v2/definition/release.pb.go new file mode 100644 index 000000000..b6208cb0d --- /dev/null +++ b/integrations/scheduler/v2/definition/release.pb.go @@ -0,0 +1,830 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.21.1 +// source: integrations/scheduler/v2/definition/release.proto + +package definition + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Release Object Info Status Enum +type SchedulerV2ReleaseInfoStatus int32 + +const ( + // Unknown + SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_UNKNOWN_UNSPECIFIED SchedulerV2ReleaseInfoStatus = 0 + // Release is Deployed + SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_DEPLOYED SchedulerV2ReleaseInfoStatus = 1 + // Release is Uninstalled, but not removed + SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_UNINSTALLED SchedulerV2ReleaseInfoStatus = 2 + // Release is Hibernated + SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_SUPERSEDED SchedulerV2ReleaseInfoStatus = 3 + // Release is Failed + SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_FAILED SchedulerV2ReleaseInfoStatus = 4 + // Release is Uninstalling + SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_UNINSTALLING SchedulerV2ReleaseInfoStatus = 5 + // Release is Pending Installation + SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGINSTALL SchedulerV2ReleaseInfoStatus = 6 + // Release is Pending Upgrade + SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGUPGRADE SchedulerV2ReleaseInfoStatus = 7 + // Release is Pending Rollback + SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGROLLBACK SchedulerV2ReleaseInfoStatus = 8 +) + +// Enum value maps for SchedulerV2ReleaseInfoStatus. +var ( + SchedulerV2ReleaseInfoStatus_name = map[int32]string{ + 0: "SCHEDULER_V2_RELEASE_INFO_STATUS_UNKNOWN_UNSPECIFIED", + 1: "SCHEDULER_V2_RELEASE_INFO_STATUS_DEPLOYED", + 2: "SCHEDULER_V2_RELEASE_INFO_STATUS_UNINSTALLED", + 3: "SCHEDULER_V2_RELEASE_INFO_STATUS_SUPERSEDED", + 4: "SCHEDULER_V2_RELEASE_INFO_STATUS_FAILED", + 5: "SCHEDULER_V2_RELEASE_INFO_STATUS_UNINSTALLING", + 6: "SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGINSTALL", + 7: "SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGUPGRADE", + 8: "SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGROLLBACK", + } + SchedulerV2ReleaseInfoStatus_value = map[string]int32{ + "SCHEDULER_V2_RELEASE_INFO_STATUS_UNKNOWN_UNSPECIFIED": 0, + "SCHEDULER_V2_RELEASE_INFO_STATUS_DEPLOYED": 1, + "SCHEDULER_V2_RELEASE_INFO_STATUS_UNINSTALLED": 2, + "SCHEDULER_V2_RELEASE_INFO_STATUS_SUPERSEDED": 3, + "SCHEDULER_V2_RELEASE_INFO_STATUS_FAILED": 4, + "SCHEDULER_V2_RELEASE_INFO_STATUS_UNINSTALLING": 5, + "SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGINSTALL": 6, + "SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGUPGRADE": 7, + "SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGROLLBACK": 8, + } +) + +func (x SchedulerV2ReleaseInfoStatus) Enum() *SchedulerV2ReleaseInfoStatus { + p := new(SchedulerV2ReleaseInfoStatus) + *p = x + return p +} + +func (x SchedulerV2ReleaseInfoStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SchedulerV2ReleaseInfoStatus) Descriptor() protoreflect.EnumDescriptor { + return file_integrations_scheduler_v2_definition_release_proto_enumTypes[0].Descriptor() +} + +func (SchedulerV2ReleaseInfoStatus) Type() protoreflect.EnumType { + return &file_integrations_scheduler_v2_definition_release_proto_enumTypes[0] +} + +func (x SchedulerV2ReleaseInfoStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SchedulerV2ReleaseInfoStatus.Descriptor instead. +func (SchedulerV2ReleaseInfoStatus) EnumDescriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_release_proto_rawDescGZIP(), []int{0} +} + +// Release Object +type SchedulerV2Release struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Release Name + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Release Namespace + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + // Release Values Json Bytes + Values []byte `protobuf:"bytes,3,opt,name=values,proto3" json:"values,omitempty"` + // Release Version + Version int64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"` + // Release Labels + Labels map[string]string `protobuf:"bytes,5,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Release Info + Info *SchedulerV2ReleaseInfo `protobuf:"bytes,6,opt,name=info,proto3,oneof" json:"info,omitempty"` +} + +func (x *SchedulerV2Release) Reset() { + *x = SchedulerV2Release{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_release_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2Release) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2Release) ProtoMessage() {} + +func (x *SchedulerV2Release) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_release_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2Release.ProtoReflect.Descriptor instead. +func (*SchedulerV2Release) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_release_proto_rawDescGZIP(), []int{0} +} + +func (x *SchedulerV2Release) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SchedulerV2Release) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *SchedulerV2Release) GetValues() []byte { + if x != nil { + return x.Values + } + return nil +} + +func (x *SchedulerV2Release) GetVersion() int64 { + if x != nil { + return x.Version + } + return 0 +} + +func (x *SchedulerV2Release) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +func (x *SchedulerV2Release) GetInfo() *SchedulerV2ReleaseInfo { + if x != nil { + return x.Info + } + return nil +} + +// Release Object Info +type SchedulerV2ReleaseInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Release First Deployed time + FirstDeployed *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=first_deployed,json=firstDeployed,proto3,oneof" json:"first_deployed,omitempty"` + // Release Last Deployed time + LastDeployed *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=last_deployed,json=lastDeployed,proto3,oneof" json:"last_deployed,omitempty"` + // Release Deleted time + Deleted *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=deleted,proto3,oneof" json:"deleted,omitempty"` + // Release Info Description + Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` + // Release Info Notes + Notes string `protobuf:"bytes,5,opt,name=notes,proto3" json:"notes,omitempty"` + // Release Info Status + Status SchedulerV2ReleaseInfoStatus `protobuf:"varint,6,opt,name=status,proto3,enum=scheduler.SchedulerV2ReleaseInfoStatus" json:"status,omitempty"` + // Release Resources + Resources []*SchedulerV2ReleaseInfoResource `protobuf:"bytes,7,rep,name=resources,proto3" json:"resources,omitempty"` +} + +func (x *SchedulerV2ReleaseInfo) Reset() { + *x = SchedulerV2ReleaseInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_release_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2ReleaseInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2ReleaseInfo) ProtoMessage() {} + +func (x *SchedulerV2ReleaseInfo) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_release_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2ReleaseInfo.ProtoReflect.Descriptor instead. +func (*SchedulerV2ReleaseInfo) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_release_proto_rawDescGZIP(), []int{1} +} + +func (x *SchedulerV2ReleaseInfo) GetFirstDeployed() *timestamppb.Timestamp { + if x != nil { + return x.FirstDeployed + } + return nil +} + +func (x *SchedulerV2ReleaseInfo) GetLastDeployed() *timestamppb.Timestamp { + if x != nil { + return x.LastDeployed + } + return nil +} + +func (x *SchedulerV2ReleaseInfo) GetDeleted() *timestamppb.Timestamp { + if x != nil { + return x.Deleted + } + return nil +} + +func (x *SchedulerV2ReleaseInfo) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *SchedulerV2ReleaseInfo) GetNotes() string { + if x != nil { + return x.Notes + } + return "" +} + +func (x *SchedulerV2ReleaseInfo) GetStatus() SchedulerV2ReleaseInfoStatus { + if x != nil { + return x.Status + } + return SchedulerV2ReleaseInfoStatus_SCHEDULER_V2_RELEASE_INFO_STATUS_UNKNOWN_UNSPECIFIED +} + +func (x *SchedulerV2ReleaseInfo) GetResources() []*SchedulerV2ReleaseInfoResource { + if x != nil { + return x.Resources + } + return nil +} + +// Release Object Info Resource +type SchedulerV2ReleaseInfoResourceObject struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Release Object Resource + Resource *SchedulerV2ReleaseInfoResource `protobuf:"bytes,1,opt,name=resource,proto3" json:"resource,omitempty"` + // Release Object Data + Data *SchedulerV2ReleaseInfoResourceObjectData `protobuf:"bytes,2,opt,name=data,proto3,oneof" json:"data,omitempty"` +} + +func (x *SchedulerV2ReleaseInfoResourceObject) Reset() { + *x = SchedulerV2ReleaseInfoResourceObject{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_release_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2ReleaseInfoResourceObject) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2ReleaseInfoResourceObject) ProtoMessage() {} + +func (x *SchedulerV2ReleaseInfoResourceObject) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_release_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2ReleaseInfoResourceObject.ProtoReflect.Descriptor instead. +func (*SchedulerV2ReleaseInfoResourceObject) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_release_proto_rawDescGZIP(), []int{2} +} + +func (x *SchedulerV2ReleaseInfoResourceObject) GetResource() *SchedulerV2ReleaseInfoResource { + if x != nil { + return x.Resource + } + return nil +} + +func (x *SchedulerV2ReleaseInfoResourceObject) GetData() *SchedulerV2ReleaseInfoResourceObjectData { + if x != nil { + return x.Data + } + return nil +} + +// Release Object Info Resource bytes +type SchedulerV2ReleaseInfoResourceObjectData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Release Object Json Bytes + Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *SchedulerV2ReleaseInfoResourceObjectData) Reset() { + *x = SchedulerV2ReleaseInfoResourceObjectData{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_release_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2ReleaseInfoResourceObjectData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2ReleaseInfoResourceObjectData) ProtoMessage() {} + +func (x *SchedulerV2ReleaseInfoResourceObjectData) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_release_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2ReleaseInfoResourceObjectData.ProtoReflect.Descriptor instead. +func (*SchedulerV2ReleaseInfoResourceObjectData) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_release_proto_rawDescGZIP(), []int{3} +} + +func (x *SchedulerV2ReleaseInfoResourceObjectData) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +// Release Object Info Resource Meta +type SchedulerV2ReleaseInfoResource struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // GroupVersionKind + Gvk *SchedulerV2GVK `protobuf:"bytes,1,opt,name=gvk,proto3" json:"gvk,omitempty"` + // Kubernetes API Object Name + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Kubernetes API Object Namespace + Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"` +} + +func (x *SchedulerV2ReleaseInfoResource) Reset() { + *x = SchedulerV2ReleaseInfoResource{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_release_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2ReleaseInfoResource) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2ReleaseInfoResource) ProtoMessage() {} + +func (x *SchedulerV2ReleaseInfoResource) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_release_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2ReleaseInfoResource.ProtoReflect.Descriptor instead. +func (*SchedulerV2ReleaseInfoResource) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_release_proto_rawDescGZIP(), []int{4} +} + +func (x *SchedulerV2ReleaseInfoResource) GetGvk() *SchedulerV2GVK { + if x != nil { + return x.Gvk + } + return nil +} + +func (x *SchedulerV2ReleaseInfoResource) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SchedulerV2ReleaseInfoResource) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +// GroupVersionKind +type SchedulerV2GVK struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Kubernetes API Group + Group string `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + // Kubernetes API Version + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // Kubernetes API Kind + Kind string `protobuf:"bytes,3,opt,name=kind,proto3" json:"kind,omitempty"` +} + +func (x *SchedulerV2GVK) Reset() { + *x = SchedulerV2GVK{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_scheduler_v2_definition_release_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchedulerV2GVK) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchedulerV2GVK) ProtoMessage() {} + +func (x *SchedulerV2GVK) ProtoReflect() protoreflect.Message { + mi := &file_integrations_scheduler_v2_definition_release_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchedulerV2GVK.ProtoReflect.Descriptor instead. +func (*SchedulerV2GVK) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_release_proto_rawDescGZIP(), []int{5} +} + +func (x *SchedulerV2GVK) GetGroup() string { + if x != nil { + return x.Group + } + return "" +} + +func (x *SchedulerV2GVK) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *SchedulerV2GVK) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +var File_integrations_scheduler_v2_definition_release_proto protoreflect.FileDescriptor + +var file_integrations_scheduler_v2_definition_release_proto_rawDesc = []byte{ + 0x0a, 0x32, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x1a, + 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0xbb, 0x02, 0x0a, 0x12, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x06, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3a, + 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x48, + 0x00, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x88, 0x01, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xd4, + 0x03, 0x0a, 0x16, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x46, 0x0a, 0x0e, 0x66, 0x69, 0x72, + 0x73, 0x74, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x48, 0x00, 0x52, + 0x0d, 0x66, 0x69, 0x72, 0x73, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x64, 0x88, 0x01, + 0x01, 0x12, 0x44, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x48, 0x01, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x65, 0x64, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x48, 0x02, 0x52, 0x07, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x88, + 0x01, 0x01, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, + 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x47, 0x0a, 0x09, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x64, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x6c, 0x61, 0x73, 0x74, + 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x64, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x24, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x45, + 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x4c, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x88, 0x01, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3e, 0x0a, 0x28, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7f, 0x0a, 0x1e, + 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2b, + 0x0a, 0x03, 0x67, 0x76, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x63, + 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x72, 0x56, 0x32, 0x47, 0x56, 0x4b, 0x52, 0x03, 0x67, 0x76, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x54, 0x0a, + 0x0e, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x47, 0x56, 0x4b, 0x12, + 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, + 0x69, 0x6e, 0x64, 0x2a, 0xea, 0x03, 0x0a, 0x1c, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x72, 0x56, 0x32, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x38, 0x0a, 0x34, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, + 0x52, 0x5f, 0x56, 0x32, 0x5f, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x46, + 0x4f, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2d, + 0x0a, 0x29, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x52, 0x5f, 0x56, 0x32, 0x5f, 0x52, + 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x45, 0x44, 0x10, 0x01, 0x12, 0x30, 0x0a, + 0x2c, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x52, 0x5f, 0x56, 0x32, 0x5f, 0x52, 0x45, + 0x4c, 0x45, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x55, 0x4e, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, + 0x2f, 0x0a, 0x2b, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x52, 0x5f, 0x56, 0x32, 0x5f, + 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x53, 0x55, 0x50, 0x45, 0x52, 0x53, 0x45, 0x44, 0x45, 0x44, 0x10, 0x03, + 0x12, 0x2b, 0x0a, 0x27, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x52, 0x5f, 0x56, 0x32, + 0x5f, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x31, 0x0a, + 0x2d, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x52, 0x5f, 0x56, 0x32, 0x5f, 0x52, 0x45, + 0x4c, 0x45, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x55, 0x4e, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x10, 0x05, + 0x12, 0x33, 0x0a, 0x2f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x52, 0x5f, 0x56, 0x32, + 0x5f, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x49, 0x4e, 0x53, 0x54, + 0x41, 0x4c, 0x4c, 0x10, 0x06, 0x12, 0x33, 0x0a, 0x2f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, + 0x45, 0x52, 0x5f, 0x56, 0x32, 0x5f, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, + 0x46, 0x4f, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, + 0x47, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x07, 0x12, 0x34, 0x0a, 0x30, 0x53, 0x43, + 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x52, 0x5f, 0x56, 0x32, 0x5f, 0x52, 0x45, 0x4c, 0x45, 0x41, + 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x50, + 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x52, 0x4f, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x08, + 0x42, 0x48, 0x5a, 0x46, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, + 0x72, 0x61, 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x2d, 0x61, 0x72, 0x61, + 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x2f, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var ( + file_integrations_scheduler_v2_definition_release_proto_rawDescOnce sync.Once + file_integrations_scheduler_v2_definition_release_proto_rawDescData = file_integrations_scheduler_v2_definition_release_proto_rawDesc +) + +func file_integrations_scheduler_v2_definition_release_proto_rawDescGZIP() []byte { + file_integrations_scheduler_v2_definition_release_proto_rawDescOnce.Do(func() { + file_integrations_scheduler_v2_definition_release_proto_rawDescData = protoimpl.X.CompressGZIP(file_integrations_scheduler_v2_definition_release_proto_rawDescData) + }) + return file_integrations_scheduler_v2_definition_release_proto_rawDescData +} + +var file_integrations_scheduler_v2_definition_release_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_integrations_scheduler_v2_definition_release_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_integrations_scheduler_v2_definition_release_proto_goTypes = []interface{}{ + (SchedulerV2ReleaseInfoStatus)(0), // 0: scheduler.SchedulerV2ReleaseInfoStatus + (*SchedulerV2Release)(nil), // 1: scheduler.SchedulerV2Release + (*SchedulerV2ReleaseInfo)(nil), // 2: scheduler.SchedulerV2ReleaseInfo + (*SchedulerV2ReleaseInfoResourceObject)(nil), // 3: scheduler.SchedulerV2ReleaseInfoResourceObject + (*SchedulerV2ReleaseInfoResourceObjectData)(nil), // 4: scheduler.SchedulerV2ReleaseInfoResourceObjectData + (*SchedulerV2ReleaseInfoResource)(nil), // 5: scheduler.SchedulerV2ReleaseInfoResource + (*SchedulerV2GVK)(nil), // 6: scheduler.SchedulerV2GVK + nil, // 7: scheduler.SchedulerV2Release.LabelsEntry + (*timestamppb.Timestamp)(nil), // 8: google.protobuf.Timestamp +} +var file_integrations_scheduler_v2_definition_release_proto_depIdxs = []int32{ + 7, // 0: scheduler.SchedulerV2Release.labels:type_name -> scheduler.SchedulerV2Release.LabelsEntry + 2, // 1: scheduler.SchedulerV2Release.info:type_name -> scheduler.SchedulerV2ReleaseInfo + 8, // 2: scheduler.SchedulerV2ReleaseInfo.first_deployed:type_name -> google.protobuf.Timestamp + 8, // 3: scheduler.SchedulerV2ReleaseInfo.last_deployed:type_name -> google.protobuf.Timestamp + 8, // 4: scheduler.SchedulerV2ReleaseInfo.deleted:type_name -> google.protobuf.Timestamp + 0, // 5: scheduler.SchedulerV2ReleaseInfo.status:type_name -> scheduler.SchedulerV2ReleaseInfoStatus + 5, // 6: scheduler.SchedulerV2ReleaseInfo.resources:type_name -> scheduler.SchedulerV2ReleaseInfoResource + 5, // 7: scheduler.SchedulerV2ReleaseInfoResourceObject.resource:type_name -> scheduler.SchedulerV2ReleaseInfoResource + 4, // 8: scheduler.SchedulerV2ReleaseInfoResourceObject.data:type_name -> scheduler.SchedulerV2ReleaseInfoResourceObjectData + 6, // 9: scheduler.SchedulerV2ReleaseInfoResource.gvk:type_name -> scheduler.SchedulerV2GVK + 10, // [10:10] is the sub-list for method output_type + 10, // [10:10] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name +} + +func init() { file_integrations_scheduler_v2_definition_release_proto_init() } +func file_integrations_scheduler_v2_definition_release_proto_init() { + if File_integrations_scheduler_v2_definition_release_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_integrations_scheduler_v2_definition_release_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2Release); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_release_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2ReleaseInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_release_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2ReleaseInfoResourceObject); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_release_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2ReleaseInfoResourceObjectData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_release_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2ReleaseInfoResource); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_scheduler_v2_definition_release_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchedulerV2GVK); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_integrations_scheduler_v2_definition_release_proto_msgTypes[0].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_release_proto_msgTypes[1].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_release_proto_msgTypes[2].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_integrations_scheduler_v2_definition_release_proto_rawDesc, + NumEnums: 1, + NumMessages: 7, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_integrations_scheduler_v2_definition_release_proto_goTypes, + DependencyIndexes: file_integrations_scheduler_v2_definition_release_proto_depIdxs, + EnumInfos: file_integrations_scheduler_v2_definition_release_proto_enumTypes, + MessageInfos: file_integrations_scheduler_v2_definition_release_proto_msgTypes, + }.Build() + File_integrations_scheduler_v2_definition_release_proto = out.File + file_integrations_scheduler_v2_definition_release_proto_rawDesc = nil + file_integrations_scheduler_v2_definition_release_proto_goTypes = nil + file_integrations_scheduler_v2_definition_release_proto_depIdxs = nil +} diff --git a/integrations/scheduler/v2/definition/release.proto b/integrations/scheduler/v2/definition/release.proto new file mode 100644 index 000000000..83efb6fda --- /dev/null +++ b/integrations/scheduler/v2/definition/release.proto @@ -0,0 +1,117 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 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 holder is ArangoDB GmbH, Cologne, Germany +// + +syntax = "proto3"; + +package scheduler; + +import "google/protobuf/timestamp.proto"; + +option go_package = "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition"; + +// Release Object +message SchedulerV2Release { + // Release Name + string name = 1; + // Release Namespace + string namespace = 2; + // Release Values Json Bytes + bytes values = 3; + // Release Version + int64 version = 4; + // Release Labels + map labels = 5; + // Release Info + optional SchedulerV2ReleaseInfo info = 6; +} + +// Release Object Info +message SchedulerV2ReleaseInfo { + // Release First Deployed time + optional google.protobuf.Timestamp first_deployed = 1; + // Release Last Deployed time + optional google.protobuf.Timestamp last_deployed = 2; + // Release Deleted time + optional google.protobuf.Timestamp deleted = 3; + // Release Info Description + string description = 4; + // Release Info Notes + string notes = 5; + // Release Info Status + SchedulerV2ReleaseInfoStatus status = 6; + // Release Resources + repeated SchedulerV2ReleaseInfoResource resources = 7; +} + +// Release Object Info Status Enum +enum SchedulerV2ReleaseInfoStatus { + // Unknown + SCHEDULER_V2_RELEASE_INFO_STATUS_UNKNOWN_UNSPECIFIED = 0; + // Release is Deployed + SCHEDULER_V2_RELEASE_INFO_STATUS_DEPLOYED = 1; + // Release is Uninstalled, but not removed + SCHEDULER_V2_RELEASE_INFO_STATUS_UNINSTALLED = 2; + // Release is Hibernated + SCHEDULER_V2_RELEASE_INFO_STATUS_SUPERSEDED = 3; + // Release is Failed + SCHEDULER_V2_RELEASE_INFO_STATUS_FAILED = 4; + // Release is Uninstalling + SCHEDULER_V2_RELEASE_INFO_STATUS_UNINSTALLING = 5; + // Release is Pending Installation + SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGINSTALL = 6; + // Release is Pending Upgrade + SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGUPGRADE = 7; + // Release is Pending Rollback + SCHEDULER_V2_RELEASE_INFO_STATUS_PENDINGROLLBACK = 8; +} + +// Release Object Info Resource +message SchedulerV2ReleaseInfoResourceObject { + // Release Object Resource + SchedulerV2ReleaseInfoResource resource = 1; + // Release Object Data + optional SchedulerV2ReleaseInfoResourceObjectData data = 2; +} + +// Release Object Info Resource bytes +message SchedulerV2ReleaseInfoResourceObjectData { + // Release Object Json Bytes + bytes data = 1; +} + +// Release Object Info Resource Meta +message SchedulerV2ReleaseInfoResource { + // GroupVersionKind + SchedulerV2GVK gvk = 1; + // Kubernetes API Object Name + string name = 2; + // Kubernetes API Object Namespace + string namespace = 3; +} + +// GroupVersionKind +message SchedulerV2GVK { + // Kubernetes API Group + string group = 1; + // Kubernetes API Version + string version = 2; + // Kubernetes API Kind + string kind = 3; +} \ No newline at end of file diff --git a/integrations/scheduler/v2/errors.go b/integrations/scheduler/v2/errors.go new file mode 100644 index 000000000..65bc50aa6 --- /dev/null +++ b/integrations/scheduler/v2/errors.go @@ -0,0 +1,44 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import ( + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" +) + +func asGRPCError(err error) error { + if err == nil { + return nil + } + + if kerrors.IsForbiddenC(err) { + return status.Errorf(codes.PermissionDenied, "Permission Denied: %s", err.Error()) + } + + if kerrors.IsNotFound(err) { + return status.Errorf(codes.NotFound, "NotFound: %s", err.Error()) + } + + return status.Errorf(codes.Internal, "Unable to run action: %s", err.Error()) +} diff --git a/integrations/scheduler/v2/helm.go b/integrations/scheduler/v2/helm.go new file mode 100644 index 000000000..81d11fea8 --- /dev/null +++ b/integrations/scheduler/v2/helm.go @@ -0,0 +1,222 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import ( + "context" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "helm.sh/helm/v3/pkg/action" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/selection" + + pbSchedulerV2 "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition" + pbSharedV1 "github.com/arangodb/kube-arangodb/integrations/shared/v1/definition" + "github.com/arangodb/kube-arangodb/pkg/util" +) + +func (i *implementation) Alive(ctx context.Context, in *pbSharedV1.Empty) (*pbSharedV1.Empty, error) { + if err := i.client.Alive(ctx); err != nil { + logger.Err(err).Warn("Helm is not alive") + return nil, status.Errorf(codes.Unavailable, "Service is not alive") + } + + return &pbSharedV1.Empty{}, nil +} + +func (i *implementation) List(ctx context.Context, in *pbSchedulerV2.SchedulerV2ListRequest) (*pbSchedulerV2.SchedulerV2ListResponse, error) { + var mods []util.Mod[action.List] + + mods = append(mods, in.GetOptions().Options()...) + mods = append(mods, func(action *action.List) { + var s = labels.NewSelector() + if action.Selector != "" { + if n, err := labels.Parse(action.Selector); err == nil { + s = n + } + } + + if r, err := labels.NewRequirement(LabelArangoDBDeploymentName, selection.DoubleEquals, []string{i.cfg.Deployment}); err != nil { + logger.Err(err).Warn("Unable to render selector") + } else if r != nil { + s = s.Add(*r) + } + + action.Selector = s.String() + }) + + resp, err := i.client.List(ctx, mods...) + if err != nil { + logger.Err(err).Warn("Unable to run action: List") + return nil, status.Errorf(codes.Internal, "Unable to run action: List: %s", err.Error()) + } + + releases := make(map[string]*pbSchedulerV2.SchedulerV2Release, len(resp)) + + for _, r := range resp { + releases[r.Name] = newChartReleaseFromHelmRelease(&r) + } + + return &pbSchedulerV2.SchedulerV2ListResponse{ + Releases: releases, + }, nil +} + +func (i *implementation) Status(ctx context.Context, in *pbSchedulerV2.SchedulerV2StatusRequest) (*pbSchedulerV2.SchedulerV2StatusResponse, error) { + if in.GetName() == "" { + return nil, status.Errorf(codes.InvalidArgument, "Name cannot be empty") + } + + resp, err := i.client.Status(ctx, in.GetName()) + if err != nil { + logger.Err(err).Warn("Unable to run action: Status") + return nil, status.Errorf(codes.Internal, "Unable to run action: Status: %s", err.Error()) + } + + return &pbSchedulerV2.SchedulerV2StatusResponse{ + Release: newChartReleaseFromHelmRelease(resp), + }, nil +} +func (i *implementation) StatusObjects(ctx context.Context, in *pbSchedulerV2.SchedulerV2StatusObjectsRequest) (*pbSchedulerV2.SchedulerV2StatusObjectsResponse, error) { + if in.GetName() == "" { + return nil, status.Errorf(codes.InvalidArgument, "Name cannot be empty") + } + + resp, objs, err := i.client.StatusObjects(ctx, in.GetName()) + if err != nil { + logger.Err(err).Warn("Unable to run action: Status") + return nil, status.Errorf(codes.Internal, "Unable to run action: Status: %s", err.Error()) + } + + return &pbSchedulerV2.SchedulerV2StatusObjectsResponse{ + Release: newChartReleaseFromHelmRelease(resp), + Objects: newReleaseInfoResourceObjectsFromResourceObjects(objs), + }, nil +} + +func (i *implementation) Install(ctx context.Context, in *pbSchedulerV2.SchedulerV2InstallRequest) (*pbSchedulerV2.SchedulerV2InstallResponse, error) { + if in.GetName() == "" { + return nil, status.Errorf(codes.InvalidArgument, "Name cannot be empty") + } + + var mods []util.Mod[action.Install] + + mods = append(mods, in.GetOptions().Options()...) + mods = append(mods, func(action *action.Install) { + action.ReleaseName = in.GetName() + action.Namespace = i.cfg.Namespace + + if action.Labels == nil { + action.Labels = map[string]string{} + } + + action.Labels[LabelArangoDBDeploymentName] = i.cfg.Deployment + }) + + resp, err := i.client.Install(ctx, in.GetChart(), in.GetValues(), mods...) + if err != nil { + logger.Err(err).Warn("Unable to run action: Install") + return nil, status.Errorf(codes.Internal, "Unable to run action: Install: %s", err.Error()) + } + + return &pbSchedulerV2.SchedulerV2InstallResponse{ + Release: newChartReleaseFromHelmRelease(resp), + }, nil +} + +func (i *implementation) Upgrade(ctx context.Context, in *pbSchedulerV2.SchedulerV2UpgradeRequest) (*pbSchedulerV2.SchedulerV2UpgradeResponse, error) { + if in.GetName() == "" { + return nil, status.Errorf(codes.InvalidArgument, "Name cannot be empty") + } + + var mods []util.Mod[action.Upgrade] + + mods = append(mods, in.GetOptions().Options()...) + mods = append(mods, func(action *action.Upgrade) { + action.Namespace = i.cfg.Namespace + + if action.Labels == nil { + action.Labels = map[string]string{} + } + + action.Labels[LabelArangoDBDeploymentName] = i.cfg.Deployment + }) + + resp, err := i.client.Upgrade(ctx, in.GetName(), in.GetChart(), in.GetValues(), mods...) + if err != nil { + logger.Err(err).Warn("Unable to run action: Upgrade") + return nil, status.Errorf(codes.Internal, "Unable to run action: Upgrade: %s", err.Error()) + } + + var r pbSchedulerV2.SchedulerV2UpgradeResponse + + if q := resp.Before; q != nil { + r.Before = newChartReleaseFromHelmRelease(q) + } + + if q := resp.After; q != nil { + r.After = newChartReleaseFromHelmRelease(q) + } + + return &r, nil +} + +func (i *implementation) Uninstall(ctx context.Context, in *pbSchedulerV2.SchedulerV2UninstallRequest) (*pbSchedulerV2.SchedulerV2UninstallResponse, error) { + if in.GetName() == "" { + return nil, status.Errorf(codes.InvalidArgument, "Name cannot be empty") + } + + var mods []util.Mod[action.Uninstall] + + mods = append(mods, in.GetOptions().Options()...) + + resp, err := i.client.Uninstall(ctx, in.GetName(), mods...) + if err != nil { + logger.Err(err).Warn("Unable to run action: Uninstall") + return nil, status.Errorf(codes.Internal, "Unable to run action: Uninstall: %s", err.Error()) + } + + return &pbSchedulerV2.SchedulerV2UninstallResponse{ + Info: resp.Info, + Release: newChartReleaseFromHelmRelease(&resp.Release), + }, nil +} + +func (i *implementation) Test(ctx context.Context, in *pbSchedulerV2.SchedulerV2TestRequest) (*pbSchedulerV2.SchedulerV2TestResponse, error) { + if in.GetName() == "" { + return nil, status.Errorf(codes.InvalidArgument, "Name cannot be empty") + } + + var mods []util.Mod[action.ReleaseTesting] + + mods = append(mods, in.GetOptions().Options()...) + + resp, err := i.client.Test(ctx, in.GetName(), mods...) + if err != nil { + logger.Err(err).Warn("Unable to run action: Test") + return nil, status.Errorf(codes.Internal, "Unable to run action: Test: %s", err.Error()) + } + + return &pbSchedulerV2.SchedulerV2TestResponse{ + Release: newChartReleaseFromHelmRelease(resp), + }, nil +} diff --git a/integrations/scheduler/v2/implementation.go b/integrations/scheduler/v2/implementation.go new file mode 100644 index 000000000..12757dc60 --- /dev/null +++ b/integrations/scheduler/v2/implementation.go @@ -0,0 +1,79 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import ( + "context" + + "google.golang.org/grpc" + + pbSchedulerV2 "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition" + pbSharedV1 "github.com/arangodb/kube-arangodb/integrations/shared/v1/definition" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/helm" + "github.com/arangodb/kube-arangodb/pkg/util/kclient" + "github.com/arangodb/kube-arangodb/pkg/util/svc" +) + +var _ pbSchedulerV2.SchedulerV2Server = &implementation{} +var _ svc.Handler = &implementation{} + +func New(kclient kclient.Client, client helm.Client, cfg Configuration) (svc.Handler, error) { + return newInternal(kclient, client, cfg) +} + +func newInternal(kclient kclient.Client, client helm.Client, c Configuration) (*implementation, error) { + if err := c.Validate(); err != nil { + return nil, err + } + + return &implementation{ + cfg: c, + client: client, + kclient: kclient, + }, nil +} + +type implementation struct { + cfg Configuration + + kclient kclient.Client + client helm.Client + + pbSchedulerV2.UnimplementedSchedulerV2Server +} + +func (i *implementation) Name() string { + return pbSchedulerV2.Name +} + +func (i *implementation) Register(registrar *grpc.Server) { + pbSchedulerV2.RegisterSchedulerV2Server(registrar, i) +} + +func (i *implementation) Health() svc.HealthState { + return svc.Healthy +} + +func (i *implementation) InvalidateCache(ctx context.Context, in *pbSharedV1.Empty) (*pbSharedV1.Empty, error) { + i.client.Invalidate() + + return &pbSharedV1.Empty{}, nil +} diff --git a/integrations/scheduler/v2/implementation_test.go b/integrations/scheduler/v2/implementation_test.go new file mode 100644 index 000000000..a8219c16d --- /dev/null +++ b/integrations/scheduler/v2/implementation_test.go @@ -0,0 +1,339 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import ( + "context" + "testing" + "time" + + "github.com/stretchr/testify/require" + "helm.sh/helm/v3/pkg/action" + core "k8s.io/api/core/v1" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + pbSchedulerV2 "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition" + pbSharedV1 "github.com/arangodb/kube-arangodb/integrations/shared/v1/definition" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/helm" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" + "github.com/arangodb/kube-arangodb/pkg/util/kclient" + "github.com/arangodb/kube-arangodb/pkg/util/tests" + "github.com/arangodb/kube-arangodb/pkg/util/tests/suite" +) + +func cleanup(t *testing.T, client kclient.Client, c helm.Client) func() { + t.Run("Cleanup Pre", func(t *testing.T) { + items, err := c.List(context.Background(), func(in *action.List) { + in.All = true + in.StateMask = action.ListDeployed | action.ListUninstalled | action.ListUninstalling | action.ListPendingInstall | action.ListPendingUpgrade | action.ListPendingRollback | action.ListSuperseded | action.ListFailed | action.ListUnknown + }) + require.NoError(t, err) + + for _, item := range items { + t.Run(item.Name, func(t *testing.T) { + _, err := c.Uninstall(context.Background(), item.Name) + require.NoError(t, err) + }) + } + + t.Run("Remove NS", func(t *testing.T) { + if err := client.Kubernetes().CoreV1().Namespaces().Delete(context.Background(), tests.FakeNamespace, meta.DeleteOptions{}); !kerrors.IsNotFound(err) { + require.NoError(t, err) + } + + for { + time.Sleep(time.Second) + + if _, err := client.Kubernetes().CoreV1().Namespaces().Get(context.Background(), tests.FakeNamespace, meta.GetOptions{}); !kerrors.IsNotFound(err) { + require.NoError(t, err) + continue + } + + break + } + }) + + t.Run("Create NS", func(t *testing.T) { + _, err = client.Kubernetes().CoreV1().Namespaces().Create(context.Background(), &core.Namespace{ + ObjectMeta: meta.ObjectMeta{ + Name: tests.FakeNamespace, + }, + }, meta.CreateOptions{}) + require.NoError(t, err) + }) + }) + + return func() { + t.Run("Cleanup Post", func(t *testing.T) { + items, err := c.List(context.Background(), func(in *action.List) { + in.All = true + in.StateMask = action.ListDeployed | action.ListUninstalled | action.ListUninstalling | action.ListPendingInstall | action.ListPendingUpgrade | action.ListPendingRollback | action.ListSuperseded | action.ListFailed | action.ListUnknown + }) + require.NoError(t, err) + + for _, item := range items { + t.Run(item.Name, func(t *testing.T) { + _, err := c.Uninstall(context.Background(), item.Name) + require.NoError(t, err) + }) + } + + t.Run("Remove NS", func(t *testing.T) { + if err := client.Kubernetes().CoreV1().Namespaces().Delete(context.Background(), tests.FakeNamespace, meta.DeleteOptions{}); !kerrors.IsNotFound(err) { + require.NoError(t, err) + } + + for { + time.Sleep(time.Second) + + if _, err := client.Kubernetes().CoreV1().Namespaces().Get(context.Background(), tests.FakeNamespace, meta.GetOptions{}); !kerrors.IsNotFound(err) { + require.NoError(t, err) + continue + } + + break + } + }) + }) + } +} + +func Test_Implementation(t *testing.T) { + ctx, c := context.WithCancel(context.Background()) + defer c() + + scheduler, kc, h := ExternalClient(t, ctx, func(c Configuration) Configuration { + c.Namespace = tests.FakeNamespace + c.Deployment = tests.FakeNamespace + return c + }) + + values, err := helm.NewValues(map[string]string{ + "A": "B", + }) + require.NoError(t, err) + + defer cleanup(t, kc, h)() + + t.Run("Alive", func(t *testing.T) { + _, err := scheduler.Alive(context.Background(), &pbSharedV1.Empty{}) + require.NoError(t, err) + }) + + t.Run("Check API Resources", func(t *testing.T) { + o, err := scheduler.DiscoverAPIResources(context.Background(), &pbSchedulerV2.SchedulerV2DiscoverAPIResourcesRequest{ + Version: "v1", + }) + require.NoError(t, err) + for _, z := range o.Resources { + t.Logf("Kind: %s", z.GetKind()) + } + }) + + t.Run("Check API Resource", func(t *testing.T) { + + oz, err := scheduler.DiscoverAPIResource(context.Background(), &pbSchedulerV2.SchedulerV2DiscoverAPIResourceRequest{ + Version: "v1", + Kind: "ConfigMap", + }) + require.NoError(t, err) + require.NotNil(t, oz.GetResource()) + }) + + t.Run("Check API Resource - Missing", func(t *testing.T) { + + oz, err := scheduler.DiscoverAPIResource(context.Background(), &pbSchedulerV2.SchedulerV2DiscoverAPIResourceRequest{ + Version: "v1", + Kind: "ConfigMap2", + }) + require.NoError(t, err) + require.Nil(t, oz.GetResource()) + }) + + t.Run("Status on Missing", func(t *testing.T) { + status, err := scheduler.Status(context.Background(), &pbSchedulerV2.SchedulerV2StatusRequest{ + Name: "test", + }) + require.NoError(t, err) + + require.Nil(t, status.GetRelease()) + }) + + t.Run("List Empty", func(t *testing.T) { + status, err := scheduler.List(context.Background(), &pbSchedulerV2.SchedulerV2ListRequest{}) + require.NoError(t, err) + + require.Len(t, status.GetReleases(), 0) + }) + + t.Run("Install", func(t *testing.T) { + status, err := scheduler.Install(context.Background(), &pbSchedulerV2.SchedulerV2InstallRequest{ + Name: "test", + Values: nil, + Chart: suite.GetChart(t, "example", "1.0.0"), + }) + require.NoError(t, err) + + require.NotNil(t, status.GetRelease()) + }) + + t.Run("List After", func(t *testing.T) { + status, err := scheduler.List(context.Background(), &pbSchedulerV2.SchedulerV2ListRequest{}) + require.NoError(t, err) + + require.Len(t, status.GetReleases(), 1) + }) + + t.Run("Install Outside", func(t *testing.T) { + resp, err := h.Install(context.Background(), suite.GetChart(t, "example", "1.0.0"), nil, func(in *action.Install) { + in.ReleaseName = "test-outside" + }) + require.NoError(t, err) + + require.NotNil(t, resp) + }) + + t.Run("List After - Still should not see first one", func(t *testing.T) { + status, err := scheduler.List(context.Background(), &pbSchedulerV2.SchedulerV2ListRequest{}) + require.NoError(t, err) + + require.Len(t, status.GetReleases(), 1) + }) + + t.Run("Install Second", func(t *testing.T) { + status, err := scheduler.Install(context.Background(), &pbSchedulerV2.SchedulerV2InstallRequest{ + Name: "test-x", + Values: nil, + Chart: suite.GetChart(t, "example", "1.0.0"), + Options: &pbSchedulerV2.SchedulerV2InstallRequestOptions{ + Labels: map[string]string{ + "X": "X", + }, + }, + }) + require.NoError(t, err) + + require.NotNil(t, status.GetRelease()) + }) + + t.Run("Install Second Outside", func(t *testing.T) { + resp, err := h.Install(context.Background(), suite.GetChart(t, "example", "1.0.0"), nil, func(in *action.Install) { + in.ReleaseName = "test-outside-x" + in.Labels = map[string]string{ + "X": "X", + } + }) + require.NoError(t, err) + + require.NotNil(t, resp) + }) + + t.Run("List After - Should see 2 services", func(t *testing.T) { + status, err := scheduler.List(context.Background(), &pbSchedulerV2.SchedulerV2ListRequest{}) + require.NoError(t, err) + + require.Len(t, status.GetReleases(), 2) + }) + + t.Run("List After - Filter one", func(t *testing.T) { + status, err := scheduler.List(context.Background(), &pbSchedulerV2.SchedulerV2ListRequest{ + Options: &pbSchedulerV2.SchedulerV2ListRequestOptions{ + Selectors: map[string]string{ + "X": "X", + }, + }, + }) + require.NoError(t, err) + + require.Len(t, status.GetReleases(), 1) + }) + + t.Run("Check - Version 1", func(t *testing.T) { + status, err := scheduler.Status(context.Background(), &pbSchedulerV2.SchedulerV2StatusRequest{ + Name: "test", + }) + require.NoError(t, err) + + require.NotNil(t, status.GetRelease()) + + require.EqualValues(t, 1, status.GetRelease().GetVersion()) + t.Logf("Data: %s", string(status.GetRelease().GetValues())) + require.Len(t, status.GetRelease().GetValues(), 4) + }) + + t.Run("Upgrade", func(t *testing.T) { + status, err := scheduler.Upgrade(context.Background(), &pbSchedulerV2.SchedulerV2UpgradeRequest{ + Name: "test", + Values: values, + Chart: suite.GetChart(t, "example", "1.0.0"), + }) + require.NoError(t, err) + + require.NotNil(t, status.GetAfter()) + t.Logf("Data: %s", string(status.GetAfter().GetValues())) + require.Len(t, status.GetAfter().GetValues(), len(values)) + }) + + t.Run("Upgrade to 1", func(t *testing.T) { + status, err := scheduler.Upgrade(context.Background(), &pbSchedulerV2.SchedulerV2UpgradeRequest{ + Name: "test", + Values: values, + Chart: suite.GetChart(t, "example", "1.0.1"), + }) + require.NoError(t, err) + + require.NotNil(t, status.GetAfter()) + t.Logf("Data: %s", string(status.GetAfter().GetValues())) + require.Len(t, status.GetAfter().GetValues(), len(values)) + }) + + t.Run("Check - Version 2", func(t *testing.T) { + status, err := scheduler.Status(context.Background(), &pbSchedulerV2.SchedulerV2StatusRequest{ + Name: "test", + }) + require.NoError(t, err) + + require.NotNil(t, status.GetRelease()) + + require.EqualValues(t, 3, status.GetRelease().GetVersion()) + t.Logf("Data: %s", string(status.GetRelease().GetValues())) + require.Len(t, status.GetRelease().GetValues(), len(values)) + }) + + t.Run("Test", func(t *testing.T) { + status, err := scheduler.Test(context.Background(), &pbSchedulerV2.SchedulerV2TestRequest{ + Name: "test", + }) + require.NoError(t, err) + + require.NotNil(t, status.GetRelease()) + }) + + t.Run("Uninstall", func(t *testing.T) { + status, err := scheduler.Uninstall(context.Background(), &pbSchedulerV2.SchedulerV2UninstallRequest{ + Name: "test", + }) + require.NoError(t, err) + + require.NotNil(t, status.GetRelease()) + t.Logf("Response: %s", status.GetInfo()) + }) +} diff --git a/integrations/scheduler/v2/kubernetes.go b/integrations/scheduler/v2/kubernetes.go new file mode 100644 index 000000000..89485d89a --- /dev/null +++ b/integrations/scheduler/v2/kubernetes.go @@ -0,0 +1,131 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import ( + "context" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "k8s.io/apimachinery/pkg/runtime/schema" + + pbSchedulerV2 "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/helm" + kresources "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/resources" +) + +func (i *implementation) DiscoverAPIResources(ctx context.Context, in *pbSchedulerV2.SchedulerV2DiscoverAPIResourcesRequest) (*pbSchedulerV2.SchedulerV2DiscoverAPIResourcesResponse, error) { + if in.GetVersion() == "" { + return nil, status.Errorf(codes.InvalidArgument, "Version cannot be empty") + } + + resp, err := i.client.DiscoverKubernetesApiVersions(schema.GroupVersion{ + Group: in.GetGroup(), + Version: in.GetVersion(), + }) + if err != nil { + logger.Err(err).Warn("Unable to run action: DiscoverAPIResources") + return nil, status.Errorf(codes.Internal, "Unable to run action: DiscoverAPIResources: %s", err.Error()) + } + + resources := make([]*pbSchedulerV2.SchedulerV2DiscoverAPIResource, 0, len(resp)) + + for _, v := range resp { + resources = append(resources, newKubernetesApiResourceFromDiscoveryResource(v)) + } + + return &pbSchedulerV2.SchedulerV2DiscoverAPIResourcesResponse{ + Resources: resources, + }, nil +} + +func (i *implementation) DiscoverAPIResource(ctx context.Context, in *pbSchedulerV2.SchedulerV2DiscoverAPIResourceRequest) (*pbSchedulerV2.SchedulerV2DiscoverAPIResourceResponse, error) { + if in.GetVersion() == "" { + return nil, status.Errorf(codes.InvalidArgument, "Version cannot be empty") + } + if in.GetKind() == "" { + return nil, status.Errorf(codes.InvalidArgument, "Kind cannot be empty") + } + + resp, err := i.client.DiscoverKubernetesApiVersionKind(schema.GroupVersionKind{ + Group: in.GetGroup(), + Version: in.GetVersion(), + Kind: in.GetKind(), + }) + if err != nil { + logger.Err(err).Warn("Unable to run action: DiscoverAPIResource") + return nil, status.Errorf(codes.Internal, "Unable to run action: DiscoverAPIResource: %s", err.Error()) + } + + if resp != nil { + return &pbSchedulerV2.SchedulerV2DiscoverAPIResourceResponse{ + Resource: newKubernetesApiResourceFromDiscoveryResource(*resp), + }, nil + } + + return &pbSchedulerV2.SchedulerV2DiscoverAPIResourceResponse{}, nil +} + +func (i *implementation) KubernetesGet(ctx context.Context, in *pbSchedulerV2.SchedulerV2KubernetesGetRequest) (*pbSchedulerV2.SchedulerV2KubernetesGetResponse, error) { + reqs := make(helm.Resources, len(in.GetResources())) + + for id := range reqs { + reqs[id] = in.GetResources()[id].AsHelmResource() + } + + resp, err := i.client.NativeGet(ctx, reqs...) + if err != nil { + logger.Err(err).Warn("Unable to run action: KubernetesGet") + return nil, asGRPCError(err) + } + + return &pbSchedulerV2.SchedulerV2KubernetesGetResponse{ + Objects: newReleaseInfoResourceObjectsFromResourceObjects(resp), + }, nil +} + +func (i *implementation) KubernetesPermissionCheck(ctx context.Context, in *pbSchedulerV2.SchedulerV2KubernetesPermissionCheckRequest) (*pbSchedulerV2.SchedulerV2KubernetesPermissionCheckResponse, error) { + resp := kresources.AccessRequest{ + Verb: in.GetVerb(), + Group: in.GetGroup(), + Version: in.GetVersion(), + Resource: in.GetResource(), + SubResource: in.GetSubResource(), + Name: in.GetName(), + Namespace: util.OptionalType(in.Namespace, i.client.Namespace()), + }.Verify(ctx, i.kclient.Kubernetes()) + + var res pbSchedulerV2.SchedulerV2KubernetesPermissionCheckResponse + + res.Allowed = resp.Allowed + if resp.Denied { + res.Denied = util.NewType(resp.Denied) + } + if resp.Reason != "" { + res.Reason = util.NewType(resp.Reason) + } + if resp.EvaluationError != "" { + res.EvaluationError = util.NewType(resp.EvaluationError) + } + + return &res, nil +} diff --git a/integrations/scheduler/v2/logger.go b/integrations/scheduler/v2/logger.go new file mode 100644 index 000000000..fc9982de6 --- /dev/null +++ b/integrations/scheduler/v2/logger.go @@ -0,0 +1,25 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import "github.com/arangodb/kube-arangodb/pkg/logging" + +var logger = logging.Global().RegisterAndGetLogger("integration-scheduler-v2", logging.Info) diff --git a/integrations/scheduler/v2/suite.go b/integrations/scheduler/v2/suite.go new file mode 100644 index 000000000..ad60378bb --- /dev/null +++ b/integrations/scheduler/v2/suite.go @@ -0,0 +1,128 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import ( + "google.golang.org/protobuf/types/known/timestamppb" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + pbSchedulerV2 "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/helm" +) + +func newChartReleaseFromHelmRelease(in *helm.Release) *pbSchedulerV2.SchedulerV2Release { + if in == nil { + return nil + } + + var rel pbSchedulerV2.SchedulerV2Release + + rel.Name = in.Name + rel.Namespace = in.Namespace + rel.Values = in.Values + rel.Version = int64(in.Version) + rel.Labels = in.Labels + rel.Info = newChartReleaseInfoFromHelmRelease(in.Info) + + return &rel +} + +func newChartReleaseInfoFromHelmRelease(in helm.ReleaseInfo) *pbSchedulerV2.SchedulerV2ReleaseInfo { + var rel pbSchedulerV2.SchedulerV2ReleaseInfo + + rel.FirstDeployed = timestamppb.New(in.FirstDeployed) + rel.LastDeployed = timestamppb.New(in.LastDeployed) + rel.Deleted = timestamppb.New(in.Deleted) + rel.Description = in.Description + rel.Notes = in.Notes + rel.Status = pbSchedulerV2.FromHelmStatus(in.Status) + rel.Resources = newChartReleaseResourcesInfoFromHelmRelease(in.Resources) + + return &rel +} + +func newChartReleaseResourcesInfoFromHelmRelease(in helm.Resources) []*pbSchedulerV2.SchedulerV2ReleaseInfoResource { + if len(in) == 0 { + return nil + } + + var r = make([]*pbSchedulerV2.SchedulerV2ReleaseInfoResource, len(in)) + + for id := range r { + r[id] = newChartReleaseResourceInfoFromHelmRelease(in[id]) + } + + return r +} + +func newChartReleaseResourceInfoFromHelmRelease(in helm.Resource) *pbSchedulerV2.SchedulerV2ReleaseInfoResource { + var r pbSchedulerV2.SchedulerV2ReleaseInfoResource + + r.Gvk = &pbSchedulerV2.SchedulerV2GVK{ + Group: in.Group, + Version: in.Version, + Kind: in.Kind, + } + + r.Name = in.Name + r.Namespace = in.Namespace + + return &r +} + +func newKubernetesApiResourceFromDiscoveryResource(in meta.APIResource) *pbSchedulerV2.SchedulerV2DiscoverAPIResource { + return &pbSchedulerV2.SchedulerV2DiscoverAPIResource{ + Name: in.Name, + SingularName: in.SingularName, + Namespaced: in.Namespaced, + Group: in.Group, + Version: in.Version, + Kind: in.Kind, + Verbs: in.Verbs, + ShortNames: in.ShortNames, + Categories: in.Categories, + StorageVersionHash: in.StorageVersionHash, + } +} + +func newReleaseInfoResourceObjectsFromResourceObjects(in []helm.ResourceObject) []*pbSchedulerV2.SchedulerV2ReleaseInfoResourceObject { + res := make([]*pbSchedulerV2.SchedulerV2ReleaseInfoResourceObject, len(in)) + + for id := range res { + res[id] = newReleaseInfoResourceObjectFromResourceObject(in[id]) + } + + return res +} + +func newReleaseInfoResourceObjectFromResourceObject(in helm.ResourceObject) *pbSchedulerV2.SchedulerV2ReleaseInfoResourceObject { + var r pbSchedulerV2.SchedulerV2ReleaseInfoResourceObject + + r.Resource = newChartReleaseResourceInfoFromHelmRelease(in.Resource) + + if d := in.Object; d != nil { + r.Data = &pbSchedulerV2.SchedulerV2ReleaseInfoResourceObjectData{ + Data: d.Data, + } + } + + return &r +} diff --git a/integrations/scheduler/v2/suite_test.go b/integrations/scheduler/v2/suite_test.go new file mode 100644 index 000000000..32c1c651c --- /dev/null +++ b/integrations/scheduler/v2/suite_test.go @@ -0,0 +1,97 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import ( + "context" + _ "embed" + "os" + "testing" + + "github.com/stretchr/testify/require" + "k8s.io/client-go/tools/clientcmd" + + pbSchedulerV2 "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition" + "github.com/arangodb/kube-arangodb/pkg/logging" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/helm" + "github.com/arangodb/kube-arangodb/pkg/util/kclient" + "github.com/arangodb/kube-arangodb/pkg/util/svc" + "github.com/arangodb/kube-arangodb/pkg/util/tests" + "github.com/arangodb/kube-arangodb/pkg/util/tests/tgrpc" +) + +func init() { + logging.Global().ApplyLogLevels(map[string]logging.Level{ + logging.TopicAll: logging.Debug, + }) +} + +func Handler(t *testing.T, ctx context.Context, kclient kclient.Client, client helm.Client, mods ...Mod) svc.Handler { + handler, err := New(kclient, client, NewConfiguration().With(mods...)) + require.NoError(t, err) + + return handler +} + +func InternalClient(t *testing.T, ctx context.Context, mods ...Mod) (pbSchedulerV2.SchedulerV2Client, kclient.Client, helm.Client) { + client := kclient.NewFakeClient() + + h, err := helm.NewClient(helm.Configuration{ + Namespace: tests.FakeNamespace, + Config: client.Config(), + }) + require.NoError(t, err) + + local := svc.NewService(svc.Configuration{ + Address: "127.0.0.1:0", + }, Handler(t, ctx, client, h, mods...)) + + start := local.Start(ctx) + + return tgrpc.NewGRPCClient(t, ctx, pbSchedulerV2.NewSchedulerV2Client, start.Address()), client, h +} + +func ExternalClient(t *testing.T, ctx context.Context, mods ...Mod) (pbSchedulerV2.SchedulerV2Client, kclient.Client, helm.Client) { + z, ok := os.LookupEnv("TEST_KUBECONFIG") + if !ok { + t.Skipf("TEST_KUBECONFIG is not set") + } + + cfg, err := clientcmd.BuildConfigFromFlags("", z) + require.NoError(t, err) + + client, err := kclient.NewClient("test", cfg) + require.NoError(t, err) + + h, err := helm.NewClient(helm.Configuration{ + Namespace: tests.FakeNamespace, + Config: client.Config(), + }) + require.NoError(t, err) + + local := svc.NewService(svc.Configuration{ + Address: "127.0.0.1:0", + }, Handler(t, ctx, client, h, mods...)) + + start := local.Start(ctx) + + return tgrpc.NewGRPCClient(t, ctx, pbSchedulerV2.NewSchedulerV2Client, start.Address()), client, h +} diff --git a/integrations/shared/v1/definition/kv.go b/integrations/shared/v1/definition/kv.go new file mode 100644 index 000000000..319804ed3 --- /dev/null +++ b/integrations/shared/v1/definition/kv.go @@ -0,0 +1,76 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package definition + +// KeyValuePairList is a strong typed list of KeyValuePair +type KeyValuePairList []*KeyValuePair + +// GetValue gets the value for the requested key or nil if it doesn't exist +func (list *KeyValuePairList) GetValue(key string) *string { + if list == nil { + return nil + } + for _, kv := range *list { + if kv.GetKey() == key { + v := kv.GetValue() + return &v + } + } + return nil +} + +// UpsertPair update or insert the given value for the requested key +// Returns inserted (otherwise updated) +func (list *KeyValuePairList) UpsertPair(key, value string) bool { + if list == nil { + return false + } + for _, kv := range *list { + if kv.GetKey() == key { + kv.Value = value + return false + } + } + *list = append(*list, &KeyValuePair{ + Key: key, + Value: value, + }) + return true +} + +// RemovePairByKey removes all entries with the provided key and assigns the new list +// Returns removed, otherwise unmodified +func (list *KeyValuePairList) RemovePairByKey(key string) bool { + if list == nil { + return false + } + removed := false + remaining := make(KeyValuePairList, 0, len(*list)) + for _, kv := range *list { + if kv.GetKey() != key { + remaining = append(remaining, kv) + } else { + removed = true + } + } + *list = remaining + return removed +} diff --git a/integrations/shared/v1/definition/kv.pb.go b/integrations/shared/v1/definition/kv.pb.go new file mode 100644 index 000000000..69de23b93 --- /dev/null +++ b/integrations/shared/v1/definition/kv.pb.go @@ -0,0 +1,179 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.21.1 +// source: integrations/shared/v1/definition/kv.proto + +package definition + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Key Values Pairs +type KeyValuePair struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Key of the pair + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // Values of the pair + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *KeyValuePair) Reset() { + *x = KeyValuePair{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_shared_v1_definition_kv_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KeyValuePair) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KeyValuePair) ProtoMessage() {} + +func (x *KeyValuePair) ProtoReflect() protoreflect.Message { + mi := &file_integrations_shared_v1_definition_kv_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KeyValuePair.ProtoReflect.Descriptor instead. +func (*KeyValuePair) Descriptor() ([]byte, []int) { + return file_integrations_shared_v1_definition_kv_proto_rawDescGZIP(), []int{0} +} + +func (x *KeyValuePair) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *KeyValuePair) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +var File_integrations_shared_v1_definition_kv_proto protoreflect.FileDescriptor + +var file_integrations_shared_v1_definition_kv_proto_rawDesc = []byte{ + 0x0a, 0x2a, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x6b, 0x76, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x64, 0x22, 0x36, 0x0a, 0x0c, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x50, 0x61, 0x69, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x45, 0x5a, 0x43, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x61, 0x6e, 0x67, + 0x6f, 0x64, 0x62, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x2d, 0x61, 0x72, 0x61, 0x6e, 0x67, 0x6f, 0x64, + 0x62, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, + 0x68, 0x61, 0x72, 0x65, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_integrations_shared_v1_definition_kv_proto_rawDescOnce sync.Once + file_integrations_shared_v1_definition_kv_proto_rawDescData = file_integrations_shared_v1_definition_kv_proto_rawDesc +) + +func file_integrations_shared_v1_definition_kv_proto_rawDescGZIP() []byte { + file_integrations_shared_v1_definition_kv_proto_rawDescOnce.Do(func() { + file_integrations_shared_v1_definition_kv_proto_rawDescData = protoimpl.X.CompressGZIP(file_integrations_shared_v1_definition_kv_proto_rawDescData) + }) + return file_integrations_shared_v1_definition_kv_proto_rawDescData +} + +var file_integrations_shared_v1_definition_kv_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_integrations_shared_v1_definition_kv_proto_goTypes = []interface{}{ + (*KeyValuePair)(nil), // 0: shared.KeyValuePair +} +var file_integrations_shared_v1_definition_kv_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_integrations_shared_v1_definition_kv_proto_init() } +func file_integrations_shared_v1_definition_kv_proto_init() { + if File_integrations_shared_v1_definition_kv_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_integrations_shared_v1_definition_kv_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KeyValuePair); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_integrations_shared_v1_definition_kv_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_integrations_shared_v1_definition_kv_proto_goTypes, + DependencyIndexes: file_integrations_shared_v1_definition_kv_proto_depIdxs, + MessageInfos: file_integrations_shared_v1_definition_kv_proto_msgTypes, + }.Build() + File_integrations_shared_v1_definition_kv_proto = out.File + file_integrations_shared_v1_definition_kv_proto_rawDesc = nil + file_integrations_shared_v1_definition_kv_proto_goTypes = nil + file_integrations_shared_v1_definition_kv_proto_depIdxs = nil +} diff --git a/integrations/shared/v1/definition/kv.proto b/integrations/shared/v1/definition/kv.proto new file mode 100644 index 000000000..64a3bc2b7 --- /dev/null +++ b/integrations/shared/v1/definition/kv.proto @@ -0,0 +1,34 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +syntax = "proto3"; + +package shared; + +option go_package = "github.com/arangodb/kube-arangodb/integrations/shared/v1/definition"; + +// Key Values Pairs +message KeyValuePair { + // Key of the pair + string key = 1; + + // Values of the pair + string value = 2; +} diff --git a/integrations/storage/v1/configuration.go b/integrations/storage/v1/configuration.go new file mode 100644 index 000000000..a6fd59084 --- /dev/null +++ b/integrations/storage/v1/configuration.go @@ -0,0 +1,59 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1 + +import ( + pbImplStorageV1SharedS3 "github.com/arangodb/kube-arangodb/integrations/storage/v1/shared/s3" +) + +type Mod func(c Configuration) Configuration + +type ConfigurationType string + +const ( + ConfigurationTypeS3 ConfigurationType = "s3" +) + +func NewConfiguration(mods ...Mod) Configuration { + var cfg Configuration + + return cfg.With(mods...) +} + +type Configuration struct { + Type ConfigurationType + + S3 pbImplStorageV1SharedS3.Configuration +} + +func (c Configuration) Validate() error { + return nil +} + +func (c Configuration) With(mods ...Mod) Configuration { + n := c + + for _, mod := range mods { + n = mod(n) + } + + return n +} diff --git a/internal/md/row.go b/integrations/storage/v1/definition/consts.go similarity index 86% rename from internal/md/row.go rename to integrations/storage/v1/definition/consts.go index 451a3c46c..d8303c0c9 100644 --- a/internal/md/row.go +++ b/integrations/storage/v1/definition/consts.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,4 +18,6 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package md +package definition + +const Name = "storage.v1" diff --git a/integrations/storage/v1/shared/s3/configuration.go b/integrations/storage/v1/shared/s3/configuration.go new file mode 100644 index 000000000..87e3c5347 --- /dev/null +++ b/integrations/storage/v1/shared/s3/configuration.go @@ -0,0 +1,31 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + awsHelper "github.com/arangodb/kube-arangodb/pkg/util/aws" +) + +type Configuration struct { + BucketName string + + Client awsHelper.Config +} diff --git a/integrations/storage/v1/shared/s3/folder_counter.go b/integrations/storage/v1/shared/s3/folder_counter.go new file mode 100644 index 000000000..a01b725d9 --- /dev/null +++ b/integrations/storage/v1/shared/s3/folder_counter.go @@ -0,0 +1,65 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import "strings" + +// BucketFolderCounter is able to count "folder"s within buckets. +type BucketFolderCounter struct { + basePath string + folders map[string]interface{} +} + +// NewBucketFolderCounter creates a new BucketFolderCounter. +func NewBucketFolderCounter(basePath string) BucketFolderCounter { + return BucketFolderCounter{ + basePath: basePath, + folders: make(map[string]interface{}), + } +} + +// AddObject extracts the folder names in the passed object name and adds them into the folders map. +func (b BucketFolderCounter) AddObject(obj string) { + parts := strings.Split(obj, "/") + for i := 0; i < len(parts)-1; i++ { // `parts-1` to not include actual file name + // "folder1/folder2/file1" and "folder3/folder2/file2" are 4 different folders: + // ["folder1", "folder1/folder2", "folder3", "folder3/folder2"] + b.folders[strings.Join(parts[:i+1], "/")] = nil + } +} + +// GetFolderCount returns the number of folders within a bucket. Excludes the basePath. +func (b BucketFolderCounter) GetFolderCount() int32 { + result := len(b.folders) + + if len(b.basePath) > 0 { + rootFolders := strings.Split(b.basePath, "/") + result -= len(rootFolders) + } + + // This is possible when the basePath is file itself: + // basePath = "folder1/file.txt" + // AddObject("folder1/file.txt") + if result < 0 { + return 0 + } + return int32(result) +} diff --git a/integrations/storage/v1/shared/s3/folder_counter_test.go b/integrations/storage/v1/shared/s3/folder_counter_test.go new file mode 100644 index 000000000..a604fd939 --- /dev/null +++ b/integrations/storage/v1/shared/s3/folder_counter_test.go @@ -0,0 +1,99 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestBucketFolderCounter(t *testing.T) { + t.Run("base path same with the object, should return 0", func(t *testing.T) { + b := NewBucketFolderCounter("my_root_path/file1.txt") + b.AddObject("my_root_path/file1.txt") + numFolders := b.GetFolderCount() + assert.Equal(t, int32(0), numFolders) + }) + + t.Run("no folder within base path, should return 0", func(t *testing.T) { + b := NewBucketFolderCounter("my_root_path") + b.AddObject("my_root_path/file1.txt") + b.AddObject("my_root_path/file2.txt") + numFolders := b.GetFolderCount() + assert.Equal(t, int32(0), numFolders) + }) + + t.Run("[folder1, folder2, folder1/folder2, folder1/folder2/folder2] should return 4", func(t *testing.T) { + b := NewBucketFolderCounter("my_root_path") + b.AddObject("my_root_path/file1.txt") + b.AddObject("my_root_path/file2.txt") + b.AddObject("my_root_path/folder1/file1.txt") + b.AddObject("my_root_path/folder2/file1.txt") + b.AddObject("my_root_path/folder1/folder2/file1.txt") + b.AddObject("my_root_path/folder1/folder2/folder2/file1.txt") + numFolders := b.GetFolderCount() + assert.Equal(t, int32(4), numFolders) + }) + + t.Run("[folder1, folder3, folder1/folder2, folder3/folder2] should return 4", func(t *testing.T) { + b := NewBucketFolderCounter("my_root_path") + b.AddObject("my_root_path/folder1/folder2/file1.txt") + b.AddObject("my_root_path/folder3/folder2/file2.txt") + numFolders := b.GetFolderCount() + assert.Equal(t, int32(4), numFolders) + }) + + t.Run("nested is part of the base path, should return 0", func(t *testing.T) { + b := NewBucketFolderCounter("my_root_path/nested") + b.AddObject("my_root_path/nested/file1.txt") + b.AddObject("my_root_path/nested/file2.txt") + numFolders := b.GetFolderCount() + assert.Equal(t, int32(0), numFolders) + }) + + t.Run("nested should be excluded. [folder1, folder2, folder1/folder2, folder1/folder2/folder2] should return 4", func(t *testing.T) { + b := NewBucketFolderCounter("my_root_path/nested") + b.AddObject("my_root_path/nested/file1.txt") + b.AddObject("my_root_path/nested/file2.txt") + b.AddObject("my_root_path/nested/folder1/file1.txt") + b.AddObject("my_root_path/nested/folder2/file1.txt") + b.AddObject("my_root_path/nested/folder1/folder2/file1.txt") + b.AddObject("my_root_path/nested/folder1/folder2/folder2/file1.txt") + numFolders := b.GetFolderCount() + assert.Equal(t, int32(4), numFolders) + }) + + t.Run("nested should be excluded. [folder1, folder3, folder1/folder2, folder3/folder2] should return 4", func(t *testing.T) { + b := NewBucketFolderCounter("my_root_path/nested") + b.AddObject("my_root_path/nested/folder1/folder2/file1.txt") + b.AddObject("my_root_path/nested/folder3/folder2/file2.txt") + numFolders := b.GetFolderCount() + assert.Equal(t, int32(4), numFolders) + }) + + t.Run("counting for bucket root should work", func(t *testing.T) { + b := NewBucketFolderCounter("") + b.AddObject("my_root_path/file1.txt") + numFolders := b.GetFolderCount() + assert.Equal(t, int32(1), numFolders) + }) +} diff --git a/integrations/storage/v1/shared/s3/id.go b/integrations/storage/v1/shared/s3/id.go new file mode 100644 index 000000000..6f7c6181b --- /dev/null +++ b/integrations/storage/v1/shared/s3/id.go @@ -0,0 +1,32 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "strings" + + "github.com/dchest/uniuri" +) + +// newID creates a new unique ID. +func newID() string { + return strings.ToLower(uniuri.NewLen(uniuri.UUIDLen)) +} diff --git a/integrations/storage/v1/shared/s3/impl.go b/integrations/storage/v1/shared/s3/impl.go new file mode 100644 index 000000000..2207232da --- /dev/null +++ b/integrations/storage/v1/shared/s3/impl.go @@ -0,0 +1,142 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "context" + "fmt" + "sync" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/s3" + "golang.org/x/sync/errgroup" + "google.golang.org/grpc" + + pbStorage "github.com/arangodb-managed/integration-apis/bucket-service/v1" + + pbStorageV1 "github.com/arangodb/kube-arangodb/integrations/storage/v1/definition" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/svc" +) + +const ( + // LockedKey contains the key for indication if an object is locked + LockedKey = "locked" + // LockedValue contains the value for indicating it's locked + LockedValue = "true" +) + +var _ ShutdownableBucketServiceServer = &s3impl{} + +type ShutdownableBucketServiceServer interface { + pbStorage.BucketServiceServer + + svc.Handler + + svc.Shutdown +} + +type s3impl struct { + bucket string + region string + + registeredWritersMutex sync.Mutex + registeredWriters []*InputWriter + + client *s3.S3 + + pbStorage.UnimplementedBucketServiceServer +} + +func (s *s3impl) Name() string { + return pbStorageV1.Name +} + +func (s *s3impl) Health() svc.HealthState { + return svc.Healthy +} + +func (s *s3impl) Register(registrar *grpc.Server) { + pbStorage.RegisterBucketServiceServer(registrar, s) +} + +func NewS3Impl(cfg Configuration) (ShutdownableBucketServiceServer, error) { + prov, err := cfg.Client.GetAWSSession() + if err != nil { + return nil, err + } + + storageClient := s3.New(prov, aws.NewConfig().WithRegion(cfg.Client.GetRegion())) + + return &s3impl{ + client: storageClient, + bucket: cfg.BucketName, + region: cfg.Client.GetRegion(), + }, nil +} + +func (s *s3impl) getPrefix(path string) *string { + query := "" + if path != "." { + query = path + } + return util.NewType(query) +} + +func (s *s3impl) getRepositoryURL(path string) *pbStorage.RepositoryURL { + prefix := s.getPrefix(path) + repositoryBucketPath := fmt.Sprintf("%s/%s", s.bucket, *prefix) + repositoryURL := fmt.Sprintf("s3:%s", repositoryBucketPath) + return &pbStorage.RepositoryURL{ + Url: repositoryURL, + BucketPath: repositoryBucketPath, + } +} + +// Shutdown is called when the service needs to shutdown +func (s *s3impl) Shutdown(cancel context.CancelFunc) { + logger.Debug("Shutdown received") + + // Lock the registered writers access + s.registeredWritersMutex.Lock() + defer s.registeredWritersMutex.Unlock() + + // Close all writers (async) + g, _ := errgroup.WithContext(context.Background()) + for _, wp := range s.registeredWriters { + w := *wp + g.Go(func() error { + logger.Debug("Close writer") + if err := w.Close(); err != nil { + logger.Err(err).Debug("Close writer failed") + // Ignore + } + return nil + }) + } + if err := g.Wait(); err != nil { + logger.Err(err).Debug("Wait failed") + // Continue + } + // We are done, cancel context + logger.Debug("Service completely done, cancel context") + cancel() +} diff --git a/integrations/storage/v1/shared/s3/impl_methods.go b/integrations/storage/v1/shared/s3/impl_methods.go new file mode 100644 index 000000000..02bbce94d --- /dev/null +++ b/integrations/storage/v1/shared/s3/impl_methods.go @@ -0,0 +1,829 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "context" + "fmt" + "io" + "strings" + "sync" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/service/s3" + "github.com/aws/aws-sdk-go/service/s3/s3manager" + "golang.org/x/sync/errgroup" + "google.golang.org/protobuf/types/known/timestamppb" + + pbCommon "github.com/arangodb-managed/apis/common/v1" + pbStorage "github.com/arangodb-managed/integration-apis/bucket-service/v1" + ipbCommon "github.com/arangodb-managed/integration-apis/common/v1" + + "github.com/arangodb/kube-arangodb/pkg/logging" + "github.com/arangodb/kube-arangodb/pkg/util" +) + +func (s *s3impl) GetAPIVersion(context.Context, *pbCommon.Empty) (*pbCommon.Version, error) { + return &pbCommon.Version{ + Major: pbStorage.APIMajorVersion, + Minor: pbStorage.APIMinorVersion, + Patch: pbStorage.APIPatchVersion, + }, nil +} + +// BucketExists checks if the specified bucket exists +func (s *s3impl) BucketExists(ctx context.Context, req *pbStorage.BucketRequest) (*pbCommon.YesOrNo, error) { + log := logger.Str("func", "BucketExists") + + if len(req.Tags) > 0 { + return nil, pbCommon.InvalidArgument("tags not supported") + } + + // Check if the bucket exists + if _, err := s.client.HeadBucketWithContext(ctx, &s3.HeadBucketInput{ + Bucket: util.NewType(s.bucket), + }); err != nil { + // See https://github.com/aws/aws-sdk-go/issues/2593 + if aerr, ok := err.(awserr.Error); ok { + switch aerr.Code() { + case s3.ErrCodeNoSuchBucket, "NotFound": + return &pbCommon.YesOrNo{Result: false}, nil + } + } + log.Err(err).Error("BucketExists - HeadBucketWithContext failed") + return &pbCommon.YesOrNo{Result: false}, err + } + return &pbCommon.YesOrNo{Result: true}, nil +} + +// CreateBucket creates a bucket +func (s *s3impl) CreateBucket(ctx context.Context, req *pbStorage.BucketRequest) (*pbCommon.Empty, error) { + log := logger.Str("func", "CreateBucket") + + // Create bucket + var createBucketConfiguration *s3.CreateBucketConfiguration + if s.region != "" { + // From AWS documentation: + // Specifies the Region where the bucket will be created. If you don't specify + // a Region, the bucket is created in the US East (N. Virginia) Region (us-east-1). + createBucketConfiguration = &s3.CreateBucketConfiguration{ + LocationConstraint: util.NewType(s.region), + } + } + const bucketACL = "private" + if _, err := s.client.CreateBucketWithContext(ctx, &s3.CreateBucketInput{ + Bucket: util.NewType(s.bucket), + ACL: util.NewType(bucketACL), + CreateBucketConfiguration: createBucketConfiguration, + }); err != nil { + log.Err(err).Error("Bucket create failed: CreateBucket") + return nil, err + } + // Wait until bucket is created before finishing + if err := s.client.WaitUntilBucketExists(&s3.HeadBucketInput{ + Bucket: util.NewType(s.bucket), + }); err != nil { + log.Err(err).Error("Bucket create failed: WaitUntilBucketExists") + return nil, err + } + // Fill TagSet + tagSet := make([]*s3.Tag, 0) + for _, kv := range req.GetTags() { + tagSet = append(tagSet, &s3.Tag{Key: util.NewType(kv.GetKey()), Value: util.NewType(kv.GetValue())}) + } + if _, err := s.client.PutBucketTaggingWithContext(ctx, &s3.PutBucketTaggingInput{ + Bucket: util.NewType(s.bucket), + Tagging: &s3.Tagging{ + TagSet: tagSet, + }, + }); err != nil { + log.Err(err).Error("Bucket create failed: PutBucketTaggingWithContext") + return nil, err + } + log.Debug("Bucket created") + return &pbCommon.Empty{}, nil + +} + +// DeleteBucket deletes a bucket +// Notice that this deletes all data contained in the bucket as well +func (s *s3impl) DeleteBucket(ctx context.Context, req *pbStorage.BucketRequest) (*pbCommon.Empty, error) { + log := logger.Str("func", "DeleteBucket") + + if len(req.Tags) > 0 { + return nil, pbCommon.InvalidArgument("tags not supported") + } + + // DeleteBucket on AWS is allowed when there are no more files in the bucket, so delete them first (if any) + if _, err := s.DeletePath(ctx, &pbStorage.PathRequest{Path: "."}); err != nil { + log.Err(err).Error("Bucket delete failed: DeletePath") + return nil, err + } + // Delete bucket + if _, err := s.client.DeleteBucketWithContext(ctx, &s3.DeleteBucketInput{ + Bucket: util.NewType(s.bucket), + }); err != nil { + log.Err(err).Error("Bucket delete failed") + return nil, err + } + // Wait until bucket is deleted before finishing + if err := s.client.WaitUntilBucketNotExists(&s3.HeadBucketInput{ + Bucket: util.NewType(s.bucket), + }); err != nil { + log.Err(err).Error("Bucket delete failed: WaitUntilBucketNotExists") + return nil, err + } + log.Debug("Bucket deleted") + + return &pbCommon.Empty{}, nil +} + +// GetRepositoryURL get the URL needed to store/delete objects in a bucket +func (s *s3impl) GetRepositoryURL(_ context.Context, req *pbStorage.PathRequest) (*pbStorage.RepositoryURL, error) { + // Check request fields + path := req.GetPath() + if path == "" { + return nil, pbCommon.InvalidArgument("path missing") + } + return s.getRepositoryURL(path), nil +} + +// DeletePath deletes the specified path (recursively) from the provided bucket +func (s *s3impl) DeletePath(ctx context.Context, req *pbStorage.PathRequest) (*pbCommon.Empty, error) { + log := logger.Str("func", "DeletePath").Str("path", req.GetPath()) + + path := req.GetPath() + if path == "" { + return nil, pbCommon.InvalidArgument("path cannot be empty") + } + + counter := 0 + var continuationToken *string + for { + // Select object to delete + objs, err := s.client.ListObjectsV2WithContext(ctx, &s3.ListObjectsV2Input{ + Bucket: util.NewType(s.bucket), + Prefix: s.getPrefix(path), + ContinuationToken: continuationToken, + }) + if err != nil { + log.Err(err).Error("Bucket delete-path failed: ListObjectsV2WithContext") + return nil, err + } + // Delete if we have selected any objects + if len(objs.Contents) > 0 { + counter += len(objs.Contents) + // Create ObjectIdentifier collection + objsIds := make([]*s3.ObjectIdentifier, 0, len(objs.Contents)) + for _, obj := range objs.Contents { + objsIds = append(objsIds, &s3.ObjectIdentifier{ + Key: obj.Key, + }) + } + // Delete Objects + if _, err := s.client.DeleteObjectsWithContext(ctx, &s3.DeleteObjectsInput{ + Bucket: objs.Name, + Delete: &s3.Delete{ + Objects: objsIds, + }, + }); err != nil { + log.Err(err).Error("Bucket delete path failed") + } + } + if !util.TypeOrDefault(objs.IsTruncated) { + // We are done + break + } + continuationToken = objs.NextContinuationToken + } + if counter > 0 { + log.Int("counter", counter).Debug("DeletePath deleted objects") + } + return &pbCommon.Empty{}, nil +} + +// GetPathSize provides the size in bytes for the specified path from the provided bucket +func (s *s3impl) GetPathSize(ctx context.Context, req *pbStorage.PathRequest) (*pbStorage.PathSize, error) { + log := logger.Str("func", "DeletePath").Str("path", req.GetPath()) + + // Check request fields + path := req.GetPath() + if path == "" { + return nil, pbCommon.InvalidArgument("path missing") + } + + // Get bucket info + pSize, err := s.PathInfo(ctx, path) + if err != nil { + log.Err(err).Debug("PathInfo failed") + return nil, err + } + + return &pSize, nil +} + +// PathInfo provides the bucket size in bytes and number of files in the bucket for the specified path from the provided bucket +// Specify path as "." to indicate the root folder +func (s *s3impl) PathInfo(ctx context.Context, path string) (pbStorage.PathSize, error) { + log := logger.Str("func", "PathInfo").Str("path", path) + if path == "" { + return pbStorage.PathSize{}, pbCommon.InvalidArgument("path cannot be empty") + } + var pSize int64 + var numFiles int32 + var continuationToken *string + prefix := s.getPrefix(path) + folderCounter := NewBucketFolderCounter(*prefix) + for { + objs, err := s.client.ListObjectsV2WithContext(ctx, &s3.ListObjectsV2Input{ + Bucket: util.NewType(s.bucket), + Prefix: prefix, + ContinuationToken: continuationToken, + }) + if err != nil { + log.Err(err).Error("Bucket path size failed: ListObjectsV2WithContext") + return pbStorage.PathSize{}, err + } + for _, obj := range objs.Contents { + folderCounter.AddObject(util.TypeOrDefault(obj.Key)) + numFiles++ + size := util.TypeOrDefault(obj.Size) + pSize += size + } + if !util.TypeOrDefault(objs.IsTruncated) { + // We are done + break + } + continuationToken = objs.NextContinuationToken + } + + return pbStorage.PathSize{ + SizeInBytes: uint64(pSize), + NumberOfFiles: uint32(numFiles), + NumberOfFolders: uint32(folderCounter.GetFolderCount()), + }, nil +} + +// createReader creates a reader to return the content of a bucket object. +func (s *s3impl) createReader(ctx context.Context, path string) (OutputReader, error) { + log := logger.Str("func", "CreateReader").Str("path", path) + if path == "" { + return nil, pbCommon.InvalidArgument("path cannot be empty") + } + + obj, err := s.client.GetObjectWithContext(ctx, &s3.GetObjectInput{ + Bucket: util.NewType(s.bucket), + Key: s.getPrefix(path), + }) + if err != nil { + log.Err(err).Debug("GetObjectWithContext failed") + return nil, err + } + + readerLog := logger.Str("path", path).Str("ctx", "output-reader") + + return NewBucketOutputReader(readerLog, obj.Body, nil) +} + +// ReadObject opens an object in the bucket and streams the existing data from the object into the client +func (s *s3impl) ReadObject(req *pbStorage.PathRequest, server pbStorage.BucketService_ReadObjectServer) error { + log := logger.Str("func", "ReadObject").Str("path", req.GetPath()) + ctx := server.Context() + path := req.GetPath() + if path == "" { + return pbCommon.InvalidArgument("path missing") + } + + funcResult := util.NewType("fail") + defer func() { + // Log when we are terminated this call + log.Str("result", *funcResult).Debug("ReadObject terminated (defer)") + }() + // Create the reader + reader, err := s.createReader(ctx, path) + if err != nil { + log.Err(err).Debug("CreateReader failed") + return err + } + + for { + // Read next chunk + chunk, moreData, err := reader.ReadOutput(ctx) + if err != nil { + log.Err(err).Debug("ReadOutput failed") + return err + } + // Send chunk to caller + if err := server.Send(&pbStorage.ReadObjectChunk{ + Chunk: chunk, + }); err != nil { + log.Err(err).Debug("Failed to send ReadObjectChunk") + return err + } + // Stop if needed + if !moreData { + // No more data expected + log.Debug("ReadOutput done") + funcResult = util.NewType("ok") + return nil + } + } +} + +// createWriter creates a writer to store chunks in the provided bucket object. +func (s *s3impl) createWriter(ctx context.Context, path string, tags ipbCommon.KeyValuePairList) (InputWriter, error) { + log := logger.Str("func", "createWriter").Str("path", path) + if path == "" { + return nil, pbCommon.InvalidArgument("path cannot be empty") + } + info, err := s.getObjectInfo(ctx, path) + if err != nil { + log.Err(err).Debug("getObjectInfo failed") + return nil, err + } + // Do not write to locked objects + if info.IsLocked { + log.Debug("Object is locked") + return nil, pbCommon.PreconditionFailed("Object is locked") + } + prefix := s.getPrefix(path) + objPath := fmt.Sprintf("%s/%s", s.bucket, *prefix) + queryTemp := fmt.Sprintf("%s.%s.tmp", objPath, newID()) + g, lctx := errgroup.WithContext(ctx) + r, w := io.Pipe() + // Check if blob already exists, if so make sure the original content is preserved + if !info.Exists { + // Copy tags into info object + info.Tags = tags + } else { + // Copy original file to temp file + if _, err := s.client.CopyObjectWithContext(ctx, &s3.CopyObjectInput{ + Bucket: util.NewType(s.bucket), + Key: util.NewType(queryTemp), + CopySource: util.NewType(objPath), + }); err != nil { + log.Err(err).Debug("CopyObjectWithContext failed") + return nil, err + } + // Append temp data (async to the write, so we do not need to buffer the complete document) back to original + g.Go(func() error { + obj, err := s.client.GetObjectWithContext(lctx, &s3.GetObjectInput{ + Bucket: util.NewType(s.bucket), + Key: util.NewType(queryTemp), + }) + if err != nil { + log.Err(err).Debug("GetObjectWithContext failed") + w.CloseWithError(err) + return err + } + // Write the existing data + if _, err := io.Copy(w, obj.Body); err != nil { + log.Err(err).Debug("io.Copy failed") + w.CloseWithError(err) + return err + } + if err := obj.Body.Close(); err != nil { + log.Err(err).Debug("Body.Close failed") + w.CloseWithError(err) + return err + } + return nil + }) + } + // Create uploader + uploader := s3manager.NewUploaderWithClient(s.client) + uploadDone := sync.Mutex{} + uploadDone.Lock() + // Upload async + go func() { + // Unlock the upload done to indicate we are fully done + defer uploadDone.Unlock() + if _, err := uploader.UploadWithContext(ctx, &s3manager.UploadInput{ + Bucket: util.NewType(s.bucket), + Key: prefix, + Body: r, + }); err != nil { + log.Err(err).Debug("UploadWithContext failed") + r.CloseWithError(err) + return + } + // Set tags (if needed) + if len(info.Tags) > 0 { + // Fill TagSet + tagSet := make([]*s3.Tag, 0, len(info.Tags)) + for _, kv := range info.Tags { + tagSet = append(tagSet, &s3.Tag{Key: util.NewType(kv.GetKey()), Value: util.NewType(kv.GetValue())}) + } + if _, err := s.client.PutObjectTaggingWithContext(ctx, &s3.PutObjectTaggingInput{ + Bucket: util.NewType(s.bucket), + Key: prefix, + Tagging: &s3.Tagging{ + TagSet: tagSet, + }, + }); err != nil { + log.Err(err).Warn("PutObjectTaggingWithContext failed (tagging)") + r.CloseWithError(err) + return + } + } + // Lock object + if err := s.lockObject(ctx, log, path); err != nil { + log.Err(err).Warn("lockObject failed") + r.CloseWithError(err) + return + } + }() + // Wait until the original file has been written with the temp data (if needed) + if err := g.Wait(); err != nil { + log.Err(err).Debug("Group wait failed") + return nil, err + } + // Delete temp file (if needed) + if info.Exists { + if _, err := s.client.DeleteObjectWithContext(ctx, &s3.DeleteObjectInput{ + Bucket: util.NewType(s.bucket), + Key: util.NewType(queryTemp), + }); err != nil { + log.Err(err).Debug("DeleteObjectWithContext failed") + return nil, err + } + } + // Return writer, which should be closed by caller + return NewBucketInputWriter(log, w, nil, &uploadDone) +} + +// WriteObject creates or opens an object in the bucket and allows the client to stream (additional) data into the object +func (s *s3impl) WriteObject(server pbStorage.BucketService_WriteObjectServer) error { + ctx := server.Context() + log := logger.Str("func", "WriteObject") + + var ( + pathReq *pbStorage.PathRequest + path string + writer InputWriter + ) + funcResult := util.NewType("fail") + defer func() { + log.Str("result", *funcResult).Debug("WriteObject terminated (defer)") + }() + + closeLoop := false + for { + // Send the control message + if err := server.Send(&pbStorage.WriteObjectControl{ + AllowMoreOutput: !closeLoop, + MaxChunkBytes: MaxChunkBytes, + }); err != nil { + log.Err(err).Debug("Failed to send WriteObjectControl message") + return err + } + + // Wait for output message + msg, err := server.Recv() + if closeLoop || err == io.EOF || pbCommon.IsCanceled(err) { + // Connection terminated + funcResult = util.NewType("ok") + // Unregister writer (if needed) + if writer != nil { + found := false + s.registeredWritersMutex.Lock() + for i, w := range s.registeredWriters { + if w == &writer { + // Remove writer + found = true + s.registeredWriters = append(s.registeredWriters[:i], s.registeredWriters[i+1:]...) + // break the loop + break + } + } + s.registeredWritersMutex.Unlock() + if !found { + log.Debug("Writer not found in registeredWriters, so cannot remove") + } + } + return nil + } else if err != nil { + log.Err(err).Debug("Failed to read WriteObjectControl message") + return err + } + if pathReq == nil { + // First received message, check path + pathReq = msg.GetPath() + path = pathReq.GetPath() + log = log.Str("path", path) + if path == "" { + log.Debug("path missing") + return pbCommon.InvalidArgument("path missing") + } + // Create writer + writer, err = s.createWriter(ctx, path, nil) + if err != nil { + if !pbCommon.IsUnavailable(err) { + log.Err(err).Debug("createWriter failed") + return err + } + // If Unavailable for this provider, the normal Write will be used, otherwise the writer will be used + } + // Register writer (if needed) + if writer != nil { + s.registeredWritersMutex.Lock() + s.registeredWriters = append(s.registeredWriters, &writer) + s.registeredWritersMutex.Unlock() + } + } + // Dependent if the writer is available we will use that, or the normal write. + var moreDataAllowed bool + if writer == nil { + // Pass chunk to provider + if moreDataAllowed, err = s.write(ctx, path, msg.GetChunk(), msg.GetHasMore(), nil); err != nil { + log.Debug("bucketProvider.Write failed") + return err + } + } else { + // Use writer + if moreDataAllowed, err = writer.WriteInput(ctx, msg.GetChunk(), msg.GetHasMore()); err != nil { + log.Debug("writer.WriteInput failed") + return err + } + } + // Should we continue? + if !msg.GetHasMore() || !moreDataAllowed { + // We're done (or no more data allowed) + // Make sure to send last message + closeLoop = true + } + } +} + +// write stores the given chunk in the provided bucket object. +// Returns: moreDataAllowed, error +func (s *s3impl) write(ctx context.Context, path string, chunk []byte, hasMore bool, tags ipbCommon.KeyValuePairList) (bool, error) { + log := logger.Str("func", "Write").Str("path", path) + if path == "" { + return false, pbCommon.InvalidArgument("path cannot be empty") + } + info, err := s.getObjectInfo(ctx, path) + if err != nil { + log.Err(err).Debug("getObjectInfo failed") + return false, err + } + // Do not write to locked objects + if info.IsLocked { + log.Debug("Object is locked") + return false, pbCommon.PreconditionFailed("Object is locked") + } + prefix := s.getPrefix(path) + //objPath := fmt.Sprintf("%s/%s", s.bucketName, *prefix) + tempPath := fmt.Sprintf("%s.%s.tmp", *prefix, newID()) + tempPathFull := fmt.Sprintf("%s/%s", s.bucket, tempPath) + + // Create blob (if needed) + if !info.Exists { + // Create + if _, err := s.client.PutObjectWithContext(ctx, &s3.PutObjectInput{ + Bucket: util.NewType(s.bucket), + Key: prefix, + Body: aws.ReadSeekCloser(strings.NewReader(string(chunk))), + }); err != nil { + log.Err(err).Debug("PutObjectWithContext failed") + return false, err + } + // Add tags (if needed) + if len(tags) > 0 { + // Fill TagSet + tagSet := make([]*s3.Tag, 0, len(tags)) + for _, kv := range tags { + tagSet = append(tagSet, &s3.Tag{Key: util.NewType(kv.GetKey()), Value: util.NewType(kv.GetValue())}) + } + if _, err := s.client.PutObjectTaggingWithContext(ctx, &s3.PutObjectTaggingInput{ + Bucket: util.NewType(s.bucket), + Key: prefix, + Tagging: &s3.Tagging{ + TagSet: tagSet, + }, + }); err != nil { + log.Err(err).Debug("PutObjectTaggingWithContext failed (tagging)") + return false, err + } + } + // Lock if no more data is expected + if !hasMore { + if err := s.lockObject(ctx, log, path); err != nil { + log.Err(err).Debug("lockObject failed") + return false, err + } + } + return hasMore, nil + } + // Append data (async to the write, so we do not need to buffer the complete document) + r, w := io.Pipe() + go func() { + obj, err := s.client.GetObjectWithContext(ctx, &s3.GetObjectInput{ + Bucket: util.NewType(s.bucket), + Key: prefix, + }) + if err != nil { + w.CloseWithError(err) + return + } + // Write the existing data + if _, err := io.Copy(w, obj.Body); err != nil { + w.CloseWithError(err) + return + } + obj.Body.Close() + // Add the new data + if _, err := io.Copy(w, strings.NewReader(string(chunk))); err != nil { + w.CloseWithError(err) + return + } + w.Close() + }() + // Create uploader + uploader := s3manager.NewUploaderWithClient(s.client) + // Write combined (in temp file, not to original, because AWS will first wipe the original and then attempt to write the new one) + if _, err := uploader.UploadWithContext(ctx, &s3manager.UploadInput{ + Bucket: util.NewType(s.bucket), + Key: util.NewType(tempPath), + Body: r, + }); err != nil { + r.CloseWithError(err) + log.Err(err).Debug("UploadWithContext failed") + return false, err + } + // Move temp to destination + if _, err := s.client.CopyObjectWithContext(ctx, &s3.CopyObjectInput{ + Bucket: util.NewType(s.bucket), + Key: prefix, + CopySource: util.NewType(tempPathFull), + }); err != nil { + log.Err(err).Debug("CopyObjectWithContext failed") + return false, err + } + // Restore tags (if needed) + if len(info.Tags) > 0 { + // Fill TagSet + tagSet := make([]*s3.Tag, 0, len(info.Tags)) + for _, kv := range info.Tags { + tagSet = append(tagSet, &s3.Tag{Key: util.NewType(kv.GetKey()), Value: util.NewType(kv.GetValue())}) + } + if _, err := s.client.PutObjectTaggingWithContext(ctx, &s3.PutObjectTaggingInput{ + Bucket: util.NewType(s.bucket), + Key: prefix, + Tagging: &s3.Tagging{ + TagSet: tagSet, + }, + }); err != nil { + log.Err(err).Debug("PutObjectTaggingWithContext failed (tagging restore)") + return false, err + } + } + // Delete temp file + if _, err := s.client.DeleteObjectWithContext(ctx, &s3.DeleteObjectInput{ + Bucket: util.NewType(s.bucket), + Key: util.NewType(tempPath), + }); err != nil { + log.Err(err).Debug("DeleteObjectWithContext failed") + return false, err + } + // Lock if no more data is expected + if !hasMore { + if err := s.lockObject(ctx, log, path); err != nil { + log.Err(err).Debug("lockObject failed") + return false, err + } + } + return hasMore, nil +} + +// GetObjectInfo provides information for the specified object from the provided bucket +// A Not-Found error is returned if the object cannot be found +func (s *s3impl) GetObjectInfo(ctx context.Context, req *pbStorage.PathRequest) (*pbStorage.ObjectInfo, error) { + log := logger.Str("func", "GetObjectInfo").Str("path", req.GetPath()) + + // Check request fields + path := req.GetPath() + if path == "" { + return nil, pbCommon.InvalidArgument("path missing") + } + result, err := s.getObjectInfo(ctx, path) + if err != nil { + log.Err(err).Debug("getObjectInfo failed") + return nil, err + } + if !result.Exists { + return nil, pbCommon.NotFound(path) + } + + lastUpdatedAt := timestamppb.New(result.LastUpdatedAt) + + return &pbStorage.ObjectInfo{ + IsLocked: result.IsLocked, + SizeInBytes: result.SizeInBytes, + LastUpdatedAt: lastUpdatedAt, + }, nil +} + +func (s *s3impl) getObjectInfo(ctx context.Context, path string) (ObjectInfo, error) { + log := logger.Str("func", "getObjectInfo").Str("path", path) + // Get properties + prefix := s.getPrefix(path) + obj, err := s.client.HeadObjectWithContext(ctx, &s3.HeadObjectInput{ + Bucket: util.NewType(s.bucket), + Key: prefix, + }) + if err != nil { + if aerr, ok := err.(awserr.Error); ok { + switch aerr.Code() { + case s3.ErrCodeNoSuchKey, "NotFound": + return ObjectInfo{Exists: false}, nil + } + } + log.Err(err).Debug("blobURL.GetProperties failed") + return ObjectInfo{}, err + } + tagging, err := s.client.GetObjectTaggingWithContext(ctx, &s3.GetObjectTaggingInput{ + Bucket: util.NewType(s.bucket), + Key: prefix, + }) + if err != nil { + log.Err(err).Debug("GetObjectTaggingWithContext failed") + return ObjectInfo{}, err + } + // Get the locked value + isLocked := false + ts := tagging.TagSet + for _, t := range ts { + if util.TypeOrDefault(t.Key) == LockedKey { + isLocked = util.TypeOrDefault(t.Value) == LockedValue + break + } + } + // Convert the tags + tags := make(ipbCommon.KeyValuePairList, 0, len(ts)) + for _, t := range ts { + if util.TypeOrDefault(t.Key) == LockedKey { + // Filter out the LockedKey, this is for internal use only + continue + } + tags.UpsertPair(util.TypeOrDefault(t.Key), util.TypeOrDefault(t.Value)) + } + // Return result + return ObjectInfo{ + Exists: true, + IsLocked: isLocked, + SizeInBytes: uint64(util.TypeOrDefault(obj.ContentLength)), + LastUpdatedAt: util.TypeOrDefault(obj.LastModified), + Tags: tags, + }, nil +} + +// Se the lock for the provided bucket object +func (s *s3impl) lockObject(ctx context.Context, log logging.Logger, path string) error { + info, err := s.getObjectInfo(ctx, path) + if err != nil { + log.Err(err).Debug("getObjectInfo failed") + return err + } + if info.IsLocked { + log.Debug("Object is locked") + return pbCommon.AlreadyExists("Lock already exists") + } + tagSet := []*s3.Tag{ + {Key: util.NewType(LockedKey), Value: util.NewType(LockedValue)}, + } + // Merge existing metadata + for _, kv := range info.Tags { + tagSet = append(tagSet, &s3.Tag{Key: util.NewType(kv.GetKey()), Value: util.NewType(kv.GetValue())}) + } + if _, err := s.client.PutObjectTaggingWithContext(ctx, &s3.PutObjectTaggingInput{ + Bucket: util.NewType(s.bucket), + Key: s.getPrefix(path), + Tagging: &s3.Tagging{ + TagSet: tagSet, + }, + }); err != nil { + log.Err(err).Debug("PutObjectTaggingWithContext failed") + return err + } + return nil +} diff --git a/integrations/storage/v1/shared/s3/impl_test.go b/integrations/storage/v1/shared/s3/impl_test.go new file mode 100644 index 000000000..1eca86a63 --- /dev/null +++ b/integrations/storage/v1/shared/s3/impl_test.go @@ -0,0 +1,314 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "k8s.io/apimachinery/pkg/util/uuid" + + pbStorage "github.com/arangodb-managed/integration-apis/bucket-service/v1" + icommon "github.com/arangodb-managed/integration-apis/common/v1" +) + +func Test_BucketServiceServerTestManualRun(t *testing.T) { + testLargeFile := !testing.Short() + + s, err := NewS3Impl(getClient(t)) + + tid := fmt.Sprintf("temp/%s", uuid.NewUUID()) + + assert.NoError(t, err) + + server := s.(*s3impl) + + ctx := context.Background() + assert.NotNil(t, ctx) + + rounding := time.Millisecond * 100 + assert.NotZero(t, rounding) + maxTimeDiffServers := time.Second * 2 + assert.NotZero(t, maxTimeDiffServers) + + // Validate it's there + existsResult, err := server.BucketExists(ctx, &pbStorage.BucketRequest{}) + assert.NoError(t, err) + assert.True(t, existsResult.GetResult()) + // Get Size (should be 0) + pSize, err := server.PathInfo(ctx, tid) + assert.NoError(t, err) + assert.Equal(t, uint64(0), pSize.GetSizeInBytes()) + assert.Equal(t, uint32(0), pSize.GetNumberOfFiles()) + assert.Equal(t, uint32(0), pSize.GetNumberOfFolders()) + // Add data + fileTags := icommon.KeyValuePairList{ + { + Key: "ftestk", + Value: "ftestv", + }, + } + // Capture current time (however we are not completely synced with the provider, so allow 2 seconds diff) + dtBefore := time.Now().UTC().Add(-maxTimeDiffServers) + moreDataAllowed, err := server.write(ctx, fmt.Sprintf("%s/temp/test.txt", tid), []byte("test"), true, fileTags) + assert.NoError(t, err) + assert.True(t, moreDataAllowed) + info, err := server.getObjectInfo(ctx, fmt.Sprintf("%s/temp/test.txt", tid)) + assert.NoError(t, err) + dtAfter := time.Now().UTC().Add(maxTimeDiffServers) + assert.True(t, info.Exists) + assert.False(t, info.IsLocked) + assert.Equal(t, uint64(4), info.SizeInBytes) + assert.Len(t, info.Tags, 1) + assert.Equal(t, "ftestv", *info.Tags.GetValue("ftestk")) + firstLastUpdatedAt := info.LastUpdatedAt + assert.WithinDuration(t, dtBefore, info.LastUpdatedAt, dtAfter.Sub(dtBefore), fmt.Sprintf("%v not between %v and %v", info.LastUpdatedAt, dtBefore, dtAfter)) + // Wait a little before appending more data + time.Sleep(maxTimeDiffServers) + // Append data + dtBefore = time.Now().UTC().Add(-maxTimeDiffServers) + moreDataAllowed, err = server.write(ctx, fmt.Sprintf("%s/temp/test.txt", tid), []byte("123"), false, nil) + assert.NoError(t, err) + assert.False(t, moreDataAllowed) + info, err = server.getObjectInfo(ctx, fmt.Sprintf("%s/temp/test.txt", tid)) + assert.NoError(t, err) + dtAfter = time.Now().Add(maxTimeDiffServers) + assert.True(t, info.Exists) + assert.True(t, info.IsLocked) + assert.Equal(t, uint64(7), info.SizeInBytes) + assert.Len(t, info.Tags, 1) + assert.Equal(t, "ftestv", *info.Tags.GetValue("ftestk")) + assert.WithinDuration(t, dtBefore, info.LastUpdatedAt, dtAfter.Sub(dtBefore), fmt.Sprintf("%v not between %v and %v", info.LastUpdatedAt, dtBefore, dtAfter)) + assert.True(t, firstLastUpdatedAt.Before(info.LastUpdatedAt)) + // Try to append more data + _, err = server.write(ctx, fmt.Sprintf("%s/temp/test.txt", tid), []byte("should-fail"), false, nil) + assert.Error(t, err) + // Wait a little before reading it again + time.Sleep(maxTimeDiffServers) + // Get Data + reader, err := server.createReader(ctx, fmt.Sprintf("%s/temp/test.txt", tid)) + assert.NoError(t, err) + // Iterate until done, the provider can devide into multiple parts (or not) + var outTotal []byte + for { + out, moreData, err := reader.ReadOutput(ctx) + assert.NoError(t, err) + outTotal = append(outTotal, out...) + if !moreData { + break + } + } + assert.Equal(t, "test123", string(outTotal)) + _, _, err = reader.ReadOutput(ctx) + assert.Error(t, err) + // Get Size (should be the number of bytes we stored) + pSize, err = server.PathInfo(ctx, tid) + assert.NoError(t, err) + assert.Equal(t, uint64(7), pSize.GetSizeInBytes()) + assert.Equal(t, uint32(1), pSize.GetNumberOfFiles()) + assert.Equal(t, uint32(1), pSize.GetNumberOfFolders()) + // Get Size (should be the number of bytes we stored) + pSize, err = server.PathInfo(ctx, fmt.Sprintf("%s/temp", tid)) + assert.NoError(t, err) + assert.Equal(t, uint64(7), pSize.GetSizeInBytes()) + assert.Equal(t, uint32(1), pSize.GetNumberOfFiles()) + assert.Equal(t, uint32(0), pSize.GetNumberOfFolders()) + // Get Size (should be the number of bytes we stored) + pSize, err = server.PathInfo(ctx, fmt.Sprintf("%s/temp/test.txt", tid)) + assert.NoError(t, err) + assert.Equal(t, uint64(7), pSize.GetSizeInBytes()) + assert.Equal(t, uint32(1), pSize.GetNumberOfFiles()) + assert.Equal(t, uint32(0), pSize.GetNumberOfFolders()) + // Get Size (should be the number of bytes we stored) + moreDataAllowed, err = server.write(ctx, fmt.Sprintf("%s/newtest.txt", tid), []byte("anewtest"), true, fileTags) + assert.NoError(t, err) + assert.True(t, moreDataAllowed) + moreDataAllowed, err = server.write(ctx, fmt.Sprintf("%s/anothertest.txt", tid), []byte("newone"), true, fileTags) + assert.NoError(t, err) + assert.True(t, moreDataAllowed) + moreDataAllowed, err = server.write(ctx, fmt.Sprintf("%s/folder/anothertest.txt", tid), []byte("newone"), true, fileTags) + assert.NoError(t, err) + assert.True(t, moreDataAllowed) + moreDataAllowed, err = server.write(ctx, fmt.Sprintf("%s/folder/folder2/anothertest.txt", tid), []byte("newone"), true, fileTags) + assert.NoError(t, err) + assert.True(t, moreDataAllowed) + pSize, err = server.PathInfo(ctx, tid) + assert.NoError(t, err) + assert.Equal(t, uint64(33), pSize.GetSizeInBytes()) + assert.Equal(t, uint32(5), pSize.GetNumberOfFiles()) + assert.Equal(t, uint32(3), pSize.GetNumberOfFolders()) + // Get Size of non existing path (should be 0) + pSize, err = server.PathInfo(ctx, fmt.Sprintf("%s/temp/test2.txt", tid)) + assert.NoError(t, err) + assert.Equal(t, uint64(0), pSize.GetSizeInBytes()) + assert.Equal(t, uint32(0), pSize.GetNumberOfFiles()) + assert.Equal(t, uint32(0), pSize.GetNumberOfFolders()) + + // Write another file, which end with an empty slice to close + moreDataAllowed, err = server.write(ctx, fmt.Sprintf("%s/temp/test2.txt", tid), []byte("test2"), true, nil) + assert.NoError(t, err) + assert.True(t, moreDataAllowed) + // Close file + moreDataAllowed, err = server.write(ctx, fmt.Sprintf("%s/temp/test2.txt", tid), nil, false, nil) + assert.NoError(t, err) + assert.False(t, moreDataAllowed) + // Check file + info, err = server.getObjectInfo(ctx, fmt.Sprintf("%s/temp/test2.txt", tid)) + assert.NoError(t, err) + assert.True(t, info.Exists) + assert.True(t, info.IsLocked) + assert.Equal(t, uint64(5), info.SizeInBytes) + // Delete file + _, err = server.DeletePath(ctx, &pbStorage.PathRequest{Path: fmt.Sprintf("%s/temp/test2.txt", tid)}) + assert.NoError(t, err) + + if testLargeFile { + // Write an approx. 10MB file, which need to be read again + for i := 0; i < 100; i++ { + // 1k per line + line := fmt.Sprintf("%01023d\n", i) + // 100k per block + block := "" + for j := 0; j < 100; j++ { + block += line + } + moreDataAllowed, err = server.write(ctx, fmt.Sprintf("%s/temp/test3.txt", tid), []byte(block), true, nil) + assert.NoError(t, err) + assert.True(t, moreDataAllowed) + } + // Close file + moreDataAllowed, err = server.write(ctx, fmt.Sprintf("%s/temp/test3.txt", tid), nil, false, nil) + assert.NoError(t, err) + assert.False(t, moreDataAllowed) + // Check file + info, err = server.getObjectInfo(ctx, fmt.Sprintf("%s/temp/test3.txt", tid)) + assert.NoError(t, err) + assert.True(t, info.Exists) + assert.True(t, info.IsLocked) + assert.Equal(t, uint64(1024*100*100), info.SizeInBytes) + // Read file + reader, err = server.createReader(ctx, fmt.Sprintf("%s/temp/test3.txt", tid)) + assert.NoError(t, err) + // Iterate until done, the provider can devide into multiple parts (or not) + totalBytes := 0 + for { + out, moreData, err := reader.ReadOutput(ctx) + assert.NoError(t, err) + totalBytes += len(out) + if !moreData { + break + } + } + assert.Equal(t, 1024*100*100, totalBytes) + // Delete file + _, err = server.DeletePath(ctx, &pbStorage.PathRequest{Path: fmt.Sprintf("%s/temp/test3.txt", tid)}) + assert.NoError(t, err) + } + // Test with Writer mode + { + // Test CreateWriter + writer, err := server.createWriter(ctx, fmt.Sprintf("%s/temp/test4.txt", tid), fileTags) + assert.NoError(t, err) + assert.NotNil(t, writer) + // Write some data + moreAllowed, err := writer.WriteInput(ctx, []byte("test4a"), true) + assert.NoError(t, err) + assert.True(t, moreAllowed) + // Write more data + moreAllowed, err = writer.WriteInput(ctx, []byte("test4bb"), true) + assert.NoError(t, err) + assert.True(t, moreAllowed) + // Wait a few seconds before checking, the write is async + time.Sleep(2 * time.Second) + // Check file + info, err = server.getObjectInfo(ctx, fmt.Sprintf("%s/temp/test4.txt", tid)) + assert.NoError(t, err) + assert.False(t, info.Exists) + // Write more data + moreAllowed, err = writer.WriteInput(ctx, []byte("test4ccc"), false) + assert.NoError(t, err) + assert.False(t, moreAllowed) + _, err = writer.WriteInput(ctx, []byte("test4dddd"), false) + assert.Error(t, err) + // Wait a few seconds before checking, the close is async + time.Sleep(2 * time.Second) + // Check file + info, err = server.getObjectInfo(ctx, fmt.Sprintf("%s/temp/test4.txt", tid)) + assert.NoError(t, err) + assert.True(t, info.Exists) + assert.True(t, info.IsLocked) + assert.Equal(t, uint64(len("test4atest4bbtest4ccc")), info.SizeInBytes) + assert.Len(t, info.Tags, 1) + assert.Equal(t, "ftestv", *info.Tags.GetValue("ftestk")) + // Get Data + reader, err = server.createReader(ctx, fmt.Sprintf("%s/temp/test4.txt", tid)) + assert.NoError(t, err) + // Iterate until done, the provider can devide into multiple parts (or not) + outTotal = []byte{} + for { + out, moreData, err := reader.ReadOutput(ctx) + assert.NoError(t, err) + outTotal = append(outTotal, out...) + if !moreData { + break + } + } + assert.Equal(t, "test4atest4bbtest4ccc", string(outTotal)) + moreDataAllowed, err = server.write(ctx, fmt.Sprintf("%s/temp/test5.txt", tid), []byte("test4atest4bb"), true, nil) + assert.NoError(t, err) + assert.True(t, moreDataAllowed) + info, err = server.getObjectInfo(ctx, fmt.Sprintf("%s/temp/test5.txt", tid)) + assert.NoError(t, err) + assert.True(t, info.Exists) + assert.False(t, info.IsLocked) + assert.Equal(t, uint64(len("test4atest4bb")), info.SizeInBytes) + // Create a writer on the existing data + writer, err = server.createWriter(ctx, fmt.Sprintf("%s/temp/test5.txt", tid), nil) + assert.NoError(t, err) + assert.NotNil(t, writer) + // Write more data + moreAllowed, err = writer.WriteInput(ctx, []byte("test4ccc"), false) + assert.NoError(t, err) + assert.False(t, moreAllowed) + _, err = writer.WriteInput(ctx, []byte("test4dddd"), false) + assert.Error(t, err) + // Check file + info, err = server.getObjectInfo(ctx, fmt.Sprintf("%s/temp/test4.txt", tid)) + assert.NoError(t, err) + assert.True(t, info.Exists) + assert.True(t, info.IsLocked) + assert.Equal(t, uint64(len("test4atest4bbtest4ccc")), info.SizeInBytes) + assert.Len(t, info.Tags, 1) + assert.Equal(t, "ftestv", *info.Tags.GetValue("ftestk")) + } + // Delete Path + _, err = server.DeletePath(ctx, &pbStorage.PathRequest{Path: tid}) + assert.NoError(t, err) + // Get Size (should be 0 again) + pSize, err = server.PathInfo(ctx, tid) + assert.NoError(t, err) + assert.Equal(t, uint64(0), pSize.GetSizeInBytes()) + assert.Equal(t, uint32(0), pSize.GetNumberOfFiles()) + assert.Equal(t, uint32(0), pSize.GetNumberOfFolders()) +} diff --git a/integrations/storage/v1/shared/s3/io.go b/integrations/storage/v1/shared/s3/io.go new file mode 100644 index 000000000..6662e3061 --- /dev/null +++ b/integrations/storage/v1/shared/s3/io.go @@ -0,0 +1,180 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "context" + "crypto/aes" + "crypto/cipher" + "fmt" + "io" + "sync" + + "github.com/arangodb/kube-arangodb/pkg/logging" +) + +const ( + // MaxChunkBytes contains the maximum number of bytes in a chunk (for Read/Write streaming operations) + MaxChunkBytes = 1024 * 1024 +) + +// InputWriter abstracts the implementation of input writers. +type InputWriter interface { + // WriteInput writes the next chunk into the bucket object. + // Returns: moreDataAllowed, error + WriteInput(ctx context.Context, chunk []byte, hasMore bool) (bool, error) + // Close the underlying object + Close() error +} + +// OutputReader abstracts the implementation of output readers. +type OutputReader interface { + // ReadOutput fetches the next chunk available for the bucket object with given info. + // Returns: chunk, moreData, error + // If an empty chunk is returned and moreData is true, more data is expected. + ReadOutput(ctx context.Context) ([]byte, bool, error) +} + +// NewBucketOutputReader create a BucketOutputReader +func NewBucketOutputReader(log logging.Logger, readCloser io.ReadCloser, encryptionKey []byte) (OutputReader, error) { + var reader io.Reader + if len(encryptionKey) > 0 { + block, err := aes.NewCipher(encryptionKey) + if err != nil { + log.Err(err).Debug("aes.NewCipher failed") + return nil, err + } + // If the key is unique for each ciphertext (aka object in the bucket), then it's ok to use a zero IV. + var iv [aes.BlockSize]byte + stream := cipher.NewOFB(block, iv[:]) + // Wrap the provided reader in a cipher reader + reader = &cipher.StreamReader{S: stream, R: readCloser} + } else { + reader = readCloser + } + + return &bucketOutputReader{ + Log: log, + Reader: reader, + Closer: readCloser, + }, nil +} + +// bucketOutputReader implements OutputReader with a io.Reader and io.Closer +type bucketOutputReader struct { + Log logging.Logger + Reader io.Reader + Closer io.Closer +} + +// ReadOutput fetches the next chunk available for the bucket object with given info. +// Returns: chunk, moreData, error +// If an empty chunk is returned and moreData is true, more data is expected. +func (r *bucketOutputReader) ReadOutput(ctx context.Context) ([]byte, bool, error) { + buf := make([]byte, MaxChunkBytes) + n, err := r.Reader.Read(buf) + if err != nil { + if err == io.EOF { + // The client must close the reader + if err := r.Closer.Close(); err != nil { + r.Log.Err(err).Debug("reader.Close failed") + // Continue + } + // Returns we are done + return buf[:n], false, nil + } + r.Log.Err(err).Debug("reader.Read failed") + return nil, false, err + } + // Return the buffer, indicating more data is expected + return buf[:n], true, nil +} + +// NewBucketInputWriter creates a BucketInputWriter +func NewBucketInputWriter(log logging.Logger, pipeWriter *io.PipeWriter, encryptionKey []byte, uploadDone *sync.Mutex) (InputWriter, error) { + var writer io.Writer + if len(encryptionKey) > 0 { + block, err := aes.NewCipher(encryptionKey) + if err != nil { + log.Err(err).Debug("aes.NewCipher failed") + return nil, err + } + // If the key is unique for each ciphertext (aka object in the bucket), then it's ok to use a zero IV. + var iv [aes.BlockSize]byte + stream := cipher.NewOFB(block, iv[:]) + // Wrap the provided writer in a cipher writer + writer = &cipher.StreamWriter{S: stream, W: pipeWriter} + } else { + writer = pipeWriter + } + + return &bucketInputWriter{ + Log: log, + Writer: writer, + Closer: pipeWriter, + UploadDone: uploadDone, + }, nil +} + +// bucketInputWriter implements InputWriter with a io.Writer and io.Closer +type bucketInputWriter struct { + Log logging.Logger + Writer io.Writer + Closer io.Closer + UploadDone *sync.Mutex +} + +// WriteInput writes the next chunk into the bucket object. +// Returns: moreDataAllowed, error +func (w *bucketInputWriter) WriteInput(ctx context.Context, chunk []byte, hasMore bool) (bool, error) { + if len(chunk) > 0 { + n, err := w.Writer.Write(chunk) + if err != nil { + w.Log.Err(err).Debug("writer.Write failed") + return false, err + } + if n != len(chunk) { + w.Log.Int("expected", len(chunk)).Int("written", n).Warn("Inconsistent amount of data written") + return false, fmt.Errorf("Inconsistent amount of data written") + } + } + if !hasMore { + // Close writer, so the async code will stop + if err := w.Close(); err != nil { + w.Log.Err(err).Debug("Close failed") + return false, err + } + } + // Return + return hasMore, nil +} + +// Close the underlaying object and wait it's fully done +func (w *bucketInputWriter) Close() error { + // Close writer, so the async code will stop + if err := w.Closer.Close(); err != nil { + w.Log.Err(err).Debug("writer.Close failed") + return err + } + // Wait until the upload if fully done + w.UploadDone.Lock() + return nil +} diff --git a/integrations/storage/v1/shared/s3/logger.go b/integrations/storage/v1/shared/s3/logger.go new file mode 100644 index 000000000..867b67c55 --- /dev/null +++ b/integrations/storage/v1/shared/s3/logger.go @@ -0,0 +1,25 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import "github.com/arangodb/kube-arangodb/pkg/logging" + +var logger = logging.Global().RegisterAndGetLogger("integration-storage-v1-s3", logging.Info) diff --git a/integrations/storage/v1/shared/s3/object.go b/integrations/storage/v1/shared/s3/object.go new file mode 100644 index 000000000..484fe63c4 --- /dev/null +++ b/integrations/storage/v1/shared/s3/object.go @@ -0,0 +1,43 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "time" + + pbCommon "github.com/arangodb-managed/integration-apis/common/v1" +) + +// ObjectInfo is the response type for the GetObjectInfo method +type ObjectInfo struct { + // Indicates if the object exists + Exists bool + // Indicates if the object is locked + // This info is only relevant if the object exists + IsLocked bool + // Indicates the size of the object in bytes + // This info is only relevant if the object exists + SizeInBytes uint64 + // The timestamp this object has last been modified + LastUpdatedAt time.Time + // The tags associated with this object, if any + Tags pbCommon.KeyValuePairList +} diff --git a/integrations/storage/v1/shared/s3/suite_test.go b/integrations/storage/v1/shared/s3/suite_test.go new file mode 100644 index 000000000..1a50da100 --- /dev/null +++ b/integrations/storage/v1/shared/s3/suite_test.go @@ -0,0 +1,36 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "testing" + + "github.com/arangodb/kube-arangodb/pkg/util/tests" +) + +func getClient(t *testing.T) Configuration { + var scfg Configuration + + scfg.Client = tests.GetAWSClientConfig(t) + scfg.BucketName = tests.GetAWSS3Bucket(t) + + return scfg +} diff --git a/pkg/ml/storage/service.community.go b/integrations/storage/v1/storage.go similarity index 59% rename from pkg/ml/storage/service.community.go rename to integrations/storage/v1/storage.go index 2bd609d7e..82e60b68c 100644 --- a/pkg/ml/storage/service.community.go +++ b/integrations/storage/v1/storage.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,17 +18,25 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -//go:build !enterprise - -package storage +package v1 import ( - "context" - + pbImplStorageV1SharedS3 "github.com/arangodb/kube-arangodb/integrations/storage/v1/shared/s3" "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/svc" ) -func NewService(_ context.Context, _ Configuration) (svc.Handler, error) { - return nil, errors.New("this service is available only in enterprise edition of operator") +func New(cfg Configuration) (svc.Handler, error) { + switch cfg.Type { + case ConfigurationTypeS3: + + impl, err := pbImplStorageV1SharedS3.NewS3Impl(cfg.S3) + if err != nil { + return nil, errors.Wrap(err, "failed to create S3 service server") + } + + return impl, nil + default: + return nil, errors.New("currently only 's3' storage type is supported") + } } diff --git a/integrations/storage/v2/configuration.go b/integrations/storage/v2/configuration.go new file mode 100644 index 000000000..982d2b580 --- /dev/null +++ b/integrations/storage/v2/configuration.go @@ -0,0 +1,70 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import ( + pbImplStorageV2Shared "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared" + pbImplStorageV2SharedS3 "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared/s3" + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +type Mod func(c Configuration) Configuration + +type ConfigurationType string + +const ( + ConfigurationTypeS3 ConfigurationType = "s3" +) + +func NewConfiguration(mods ...Mod) Configuration { + var cfg Configuration + + return cfg.With(mods...) +} + +type Configuration struct { + Type ConfigurationType + + S3 pbImplStorageV2SharedS3.Configuration +} + +func (c Configuration) IO() (pbImplStorageV2Shared.IO, error) { + switch c.Type { + case ConfigurationTypeS3: + return c.S3.New() + default: + return nil, errors.Errorf("Unknoen Type: %s", c.Type) + } +} + +func (c Configuration) Validate() error { + return nil +} + +func (c Configuration) With(mods ...Mod) Configuration { + n := c + + for _, mod := range mods { + n = mod(n) + } + + return n +} diff --git a/pkg/ml/storage/consts.go b/integrations/storage/v2/definition/consts.go similarity index 93% rename from pkg/ml/storage/consts.go rename to integrations/storage/v2/definition/consts.go index a170c7072..e90744d98 100644 --- a/pkg/ml/storage/consts.go +++ b/integrations/storage/v2/definition/consts.go @@ -18,6 +18,8 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package storage +package definition -const Name = "storage.v1" +const ( + Name = "storage.v2" +) diff --git a/integrations/storage/v2/definition/helpers.go b/integrations/storage/v2/definition/helpers.go new file mode 100644 index 000000000..ddaa4e5c6 --- /dev/null +++ b/integrations/storage/v2/definition/helpers.go @@ -0,0 +1,107 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package definition + +import ( + "context" + "io" + + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/errors" + ugrpc "github.com/arangodb/kube-arangodb/pkg/util/grpc" +) + +const BufferSize = 4094 + +func Send(ctx context.Context, client StorageV2Client, key string, in io.Reader) (*StorageV2WriteObjectResponse, error) { + cache := make([]byte, BufferSize) + + wr, err := client.WriteObject(ctx) + if err != nil { + return nil, err + } + + return ugrpc.Send[*StorageV2WriteObjectRequest, *StorageV2WriteObjectResponse](wr, func() (*StorageV2WriteObjectRequest, error) { + n, err := in.Read(cache) + if err != nil { + return nil, err + } + + return &StorageV2WriteObjectRequest{ + Path: &StorageV2Path{ + Path: key, + }, + Chunk: cache[:n], + }, nil + }) +} + +func Receive(ctx context.Context, client StorageV2Client, key string, out io.Writer) (int, error) { + wr, err := client.ReadObject(ctx, &StorageV2ReadObjectRequest{ + Path: &StorageV2Path{Path: key}, + }) + if err != nil { + return 0, err + } + + var bytes int + + if err := ugrpc.Recv[*StorageV2ReadObjectResponse](wr, func(response *StorageV2ReadObjectResponse) error { + n, err := util.WriteAll(out, response.GetChunk()) + if err != nil { + if cerr := wr.CloseSend(); cerr != nil { + return errors.Errors(err, cerr) + } + + return err + } + + bytes += n + + return nil + }); err != nil { + return 0, err + } + + return bytes, nil +} + +func List(ctx context.Context, client StorageV2Client, prefix string) ([]*StorageV2Object, error) { + var r []*StorageV2Object + + res, err := client.ListObjects(ctx, &StorageV2ListObjectsRequest{ + Path: &StorageV2Path{ + Path: prefix, + }, + }) + if err != nil { + return nil, err + } + + if err := ugrpc.Recv[*StorageV2ListObjectsResponse](res, func(response *StorageV2ListObjectsResponse) error { + r = append(r, response.GetFiles()...) + return nil + }); err != nil { + return nil, err + } + + return r, nil +} diff --git a/integrations/storage/v2/definition/storage.pb.go b/integrations/storage/v2/definition/storage.pb.go new file mode 100644 index 000000000..b4ad3017c --- /dev/null +++ b/integrations/storage/v2/definition/storage.pb.go @@ -0,0 +1,1179 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.21.1 +// source: integrations/storage/v2/definition/storage.proto + +package definition + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Defines Object Path/Key +type StorageV2Path struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Defines Object Path/Key + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` +} + +func (x *StorageV2Path) Reset() { + *x = StorageV2Path{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2Path) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2Path) ProtoMessage() {} + +func (x *StorageV2Path) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2Path.ProtoReflect.Descriptor instead. +func (*StorageV2Path) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{0} +} + +func (x *StorageV2Path) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +// Defines Object Details +type StorageV2Object struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Defines Object Path/Key + Path *StorageV2Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + // Defines Object Info + Info *StorageV2ObjectInfo `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` +} + +func (x *StorageV2Object) Reset() { + *x = StorageV2Object{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2Object) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2Object) ProtoMessage() {} + +func (x *StorageV2Object) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2Object.ProtoReflect.Descriptor instead. +func (*StorageV2Object) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{1} +} + +func (x *StorageV2Object) GetPath() *StorageV2Path { + if x != nil { + return x.Path + } + return nil +} + +func (x *StorageV2Object) GetInfo() *StorageV2ObjectInfo { + if x != nil { + return x.Info + } + return nil +} + +// Defines Object Info +type StorageV2ObjectInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Size in bytes of the object + Size uint64 `protobuf:"varint,1,opt,name=size,proto3" json:"size,omitempty"` + // Timestamp of last update + LastUpdated *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=last_updated,json=lastUpdated,proto3" json:"last_updated,omitempty"` +} + +func (x *StorageV2ObjectInfo) Reset() { + *x = StorageV2ObjectInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2ObjectInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2ObjectInfo) ProtoMessage() {} + +func (x *StorageV2ObjectInfo) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2ObjectInfo.ProtoReflect.Descriptor instead. +func (*StorageV2ObjectInfo) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{2} +} + +func (x *StorageV2ObjectInfo) GetSize() uint64 { + if x != nil { + return x.Size + } + return 0 +} + +func (x *StorageV2ObjectInfo) GetLastUpdated() *timestamppb.Timestamp { + if x != nil { + return x.LastUpdated + } + return nil +} + +// StorageV2 Init Request +type StorageV2InitRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Defines if required resources should be created + Create *bool `protobuf:"varint,1,opt,name=create,proto3,oneof" json:"create,omitempty"` +} + +func (x *StorageV2InitRequest) Reset() { + *x = StorageV2InitRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2InitRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2InitRequest) ProtoMessage() {} + +func (x *StorageV2InitRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2InitRequest.ProtoReflect.Descriptor instead. +func (*StorageV2InitRequest) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{3} +} + +func (x *StorageV2InitRequest) GetCreate() bool { + if x != nil && x.Create != nil { + return *x.Create + } + return false +} + +// StorageV2 Init Response +type StorageV2InitResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *StorageV2InitResponse) Reset() { + *x = StorageV2InitResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2InitResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2InitResponse) ProtoMessage() {} + +func (x *StorageV2InitResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2InitResponse.ProtoReflect.Descriptor instead. +func (*StorageV2InitResponse) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{4} +} + +// StorageV2 ReadObject Request +type StorageV2ReadObjectRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Defines Object Path/Key + Path *StorageV2Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` +} + +func (x *StorageV2ReadObjectRequest) Reset() { + *x = StorageV2ReadObjectRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2ReadObjectRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2ReadObjectRequest) ProtoMessage() {} + +func (x *StorageV2ReadObjectRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2ReadObjectRequest.ProtoReflect.Descriptor instead. +func (*StorageV2ReadObjectRequest) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{5} +} + +func (x *StorageV2ReadObjectRequest) GetPath() *StorageV2Path { + if x != nil { + return x.Path + } + return nil +} + +// StorageV2 ReadObject Response +type StorageV2ReadObjectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Bytes of the object + Chunk []byte `protobuf:"bytes,1,opt,name=chunk,proto3" json:"chunk,omitempty"` +} + +func (x *StorageV2ReadObjectResponse) Reset() { + *x = StorageV2ReadObjectResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2ReadObjectResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2ReadObjectResponse) ProtoMessage() {} + +func (x *StorageV2ReadObjectResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2ReadObjectResponse.ProtoReflect.Descriptor instead. +func (*StorageV2ReadObjectResponse) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{6} +} + +func (x *StorageV2ReadObjectResponse) GetChunk() []byte { + if x != nil { + return x.Chunk + } + return nil +} + +// StorageV2 WriteObject Request +type StorageV2WriteObjectRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Defines Object Path/Key + Path *StorageV2Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + // Bytes of the object + Chunk []byte `protobuf:"bytes,2,opt,name=chunk,proto3" json:"chunk,omitempty"` +} + +func (x *StorageV2WriteObjectRequest) Reset() { + *x = StorageV2WriteObjectRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2WriteObjectRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2WriteObjectRequest) ProtoMessage() {} + +func (x *StorageV2WriteObjectRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2WriteObjectRequest.ProtoReflect.Descriptor instead. +func (*StorageV2WriteObjectRequest) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{7} +} + +func (x *StorageV2WriteObjectRequest) GetPath() *StorageV2Path { + if x != nil { + return x.Path + } + return nil +} + +func (x *StorageV2WriteObjectRequest) GetChunk() []byte { + if x != nil { + return x.Chunk + } + return nil +} + +// StorageV2 WriteObject Response +type StorageV2WriteObjectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Bytes Saved + Bytes int64 `protobuf:"varint,1,opt,name=bytes,proto3" json:"bytes,omitempty"` + // Checksum (sha256) of the object + Checksum string `protobuf:"bytes,2,opt,name=checksum,proto3" json:"checksum,omitempty"` +} + +func (x *StorageV2WriteObjectResponse) Reset() { + *x = StorageV2WriteObjectResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2WriteObjectResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2WriteObjectResponse) ProtoMessage() {} + +func (x *StorageV2WriteObjectResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2WriteObjectResponse.ProtoReflect.Descriptor instead. +func (*StorageV2WriteObjectResponse) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{8} +} + +func (x *StorageV2WriteObjectResponse) GetBytes() int64 { + if x != nil { + return x.Bytes + } + return 0 +} + +func (x *StorageV2WriteObjectResponse) GetChecksum() string { + if x != nil { + return x.Checksum + } + return "" +} + +// StorageV2 HeadObject Request +type StorageV2HeadObjectRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Defines Object Path/Key + Path *StorageV2Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` +} + +func (x *StorageV2HeadObjectRequest) Reset() { + *x = StorageV2HeadObjectRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2HeadObjectRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2HeadObjectRequest) ProtoMessage() {} + +func (x *StorageV2HeadObjectRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2HeadObjectRequest.ProtoReflect.Descriptor instead. +func (*StorageV2HeadObjectRequest) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{9} +} + +func (x *StorageV2HeadObjectRequest) GetPath() *StorageV2Path { + if x != nil { + return x.Path + } + return nil +} + +// StorageV2 HeadObject Response +type StorageV2HeadObjectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Defines Object Info + Info *StorageV2ObjectInfo `protobuf:"bytes,1,opt,name=info,proto3" json:"info,omitempty"` +} + +func (x *StorageV2HeadObjectResponse) Reset() { + *x = StorageV2HeadObjectResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2HeadObjectResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2HeadObjectResponse) ProtoMessage() {} + +func (x *StorageV2HeadObjectResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2HeadObjectResponse.ProtoReflect.Descriptor instead. +func (*StorageV2HeadObjectResponse) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{10} +} + +func (x *StorageV2HeadObjectResponse) GetInfo() *StorageV2ObjectInfo { + if x != nil { + return x.Info + } + return nil +} + +// StorageV2 DeleteObject Request +type StorageV2DeleteObjectRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Defines Object Path/Key + Path *StorageV2Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` +} + +func (x *StorageV2DeleteObjectRequest) Reset() { + *x = StorageV2DeleteObjectRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2DeleteObjectRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2DeleteObjectRequest) ProtoMessage() {} + +func (x *StorageV2DeleteObjectRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2DeleteObjectRequest.ProtoReflect.Descriptor instead. +func (*StorageV2DeleteObjectRequest) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{11} +} + +func (x *StorageV2DeleteObjectRequest) GetPath() *StorageV2Path { + if x != nil { + return x.Path + } + return nil +} + +// StorageV2 DeleteObject Response +type StorageV2DeleteObjectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *StorageV2DeleteObjectResponse) Reset() { + *x = StorageV2DeleteObjectResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2DeleteObjectResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2DeleteObjectResponse) ProtoMessage() {} + +func (x *StorageV2DeleteObjectResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2DeleteObjectResponse.ProtoReflect.Descriptor instead. +func (*StorageV2DeleteObjectResponse) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{12} +} + +// StorageV2 ListObjects Request +type StorageV2ListObjectsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Defines Object Path/Key + Path *StorageV2Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` +} + +func (x *StorageV2ListObjectsRequest) Reset() { + *x = StorageV2ListObjectsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2ListObjectsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2ListObjectsRequest) ProtoMessage() {} + +func (x *StorageV2ListObjectsRequest) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2ListObjectsRequest.ProtoReflect.Descriptor instead. +func (*StorageV2ListObjectsRequest) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{13} +} + +func (x *StorageV2ListObjectsRequest) GetPath() *StorageV2Path { + if x != nil { + return x.Path + } + return nil +} + +// StorageV2 ListObjects Response +type StorageV2ListObjectsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of the objects + Files []*StorageV2Object `protobuf:"bytes,1,rep,name=files,proto3" json:"files,omitempty"` +} + +func (x *StorageV2ListObjectsResponse) Reset() { + *x = StorageV2ListObjectsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageV2ListObjectsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageV2ListObjectsResponse) ProtoMessage() {} + +func (x *StorageV2ListObjectsResponse) ProtoReflect() protoreflect.Message { + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageV2ListObjectsResponse.ProtoReflect.Descriptor instead. +func (*StorageV2ListObjectsResponse) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{14} +} + +func (x *StorageV2ListObjectsResponse) GetFiles() []*StorageV2Object { + if x != nil { + return x.Files + } + return nil +} + +var File_integrations_storage_v2_definition_storage_proto protoreflect.FileDescriptor + +var file_integrations_storage_v2_definition_storage_proto_rawDesc = []byte{ + 0x0a, 0x30, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x23, 0x0a, 0x0d, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x50, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x22, 0x6f, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x12, 0x30, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x56, 0x32, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, + 0x66, 0x6f, 0x22, 0x68, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3d, 0x0a, + 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x22, 0x3e, 0x0a, 0x14, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x88, 0x01, + 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x22, 0x17, 0x0a, 0x15, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x0a, 0x1a, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x56, 0x32, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x56, 0x32, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, + 0x33, 0x0a, 0x1b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x52, 0x65, 0x61, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x63, + 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x5f, 0x0a, 0x1b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, + 0x32, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x56, 0x32, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x14, 0x0a, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x50, 0x0a, 0x1c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x56, 0x32, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x22, 0x48, 0x0a, 0x1a, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x56, 0x32, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x22, 0x4f, 0x0a, 0x1b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x48, 0x65, + 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x30, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x56, 0x32, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, + 0x66, 0x6f, 0x22, 0x4a, 0x0a, 0x1c, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x56, 0x32, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x1f, + 0x0a, 0x1d, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x49, 0x0a, 0x1b, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x4c, 0x69, 0x73, 0x74, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, + 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x4e, 0x0a, 0x1c, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x32, 0xa1, 0x04, 0x0a, 0x09, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x12, 0x45, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74, + 0x12, 0x1d, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x56, 0x32, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1e, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x56, 0x32, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x59, 0x0a, 0x0a, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x2e, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, + 0x32, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x52, 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x5c, 0x0a, 0x0b, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x25, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x56, 0x32, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x57, 0x0a, 0x0a, 0x48, 0x65, 0x61, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x23, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x73, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x48, + 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x5d, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x25, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x56, 0x32, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x5c, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, + 0x24, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x56, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, 0x46, + 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x61, + 0x6e, 0x67, 0x6f, 0x64, 0x62, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x2d, 0x61, 0x72, 0x61, 0x6e, 0x67, + 0x6f, 0x64, 0x62, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_integrations_storage_v2_definition_storage_proto_rawDescOnce sync.Once + file_integrations_storage_v2_definition_storage_proto_rawDescData = file_integrations_storage_v2_definition_storage_proto_rawDesc +) + +func file_integrations_storage_v2_definition_storage_proto_rawDescGZIP() []byte { + file_integrations_storage_v2_definition_storage_proto_rawDescOnce.Do(func() { + file_integrations_storage_v2_definition_storage_proto_rawDescData = protoimpl.X.CompressGZIP(file_integrations_storage_v2_definition_storage_proto_rawDescData) + }) + return file_integrations_storage_v2_definition_storage_proto_rawDescData +} + +var file_integrations_storage_v2_definition_storage_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_integrations_storage_v2_definition_storage_proto_goTypes = []interface{}{ + (*StorageV2Path)(nil), // 0: storage.StorageV2Path + (*StorageV2Object)(nil), // 1: storage.StorageV2Object + (*StorageV2ObjectInfo)(nil), // 2: storage.StorageV2ObjectInfo + (*StorageV2InitRequest)(nil), // 3: storage.StorageV2InitRequest + (*StorageV2InitResponse)(nil), // 4: storage.StorageV2InitResponse + (*StorageV2ReadObjectRequest)(nil), // 5: storage.StorageV2ReadObjectRequest + (*StorageV2ReadObjectResponse)(nil), // 6: storage.StorageV2ReadObjectResponse + (*StorageV2WriteObjectRequest)(nil), // 7: storage.StorageV2WriteObjectRequest + (*StorageV2WriteObjectResponse)(nil), // 8: storage.StorageV2WriteObjectResponse + (*StorageV2HeadObjectRequest)(nil), // 9: storage.StorageV2HeadObjectRequest + (*StorageV2HeadObjectResponse)(nil), // 10: storage.StorageV2HeadObjectResponse + (*StorageV2DeleteObjectRequest)(nil), // 11: storage.StorageV2DeleteObjectRequest + (*StorageV2DeleteObjectResponse)(nil), // 12: storage.StorageV2DeleteObjectResponse + (*StorageV2ListObjectsRequest)(nil), // 13: storage.StorageV2ListObjectsRequest + (*StorageV2ListObjectsResponse)(nil), // 14: storage.StorageV2ListObjectsResponse + (*timestamppb.Timestamp)(nil), // 15: google.protobuf.Timestamp +} +var file_integrations_storage_v2_definition_storage_proto_depIdxs = []int32{ + 0, // 0: storage.StorageV2Object.path:type_name -> storage.StorageV2Path + 2, // 1: storage.StorageV2Object.info:type_name -> storage.StorageV2ObjectInfo + 15, // 2: storage.StorageV2ObjectInfo.last_updated:type_name -> google.protobuf.Timestamp + 0, // 3: storage.StorageV2ReadObjectRequest.path:type_name -> storage.StorageV2Path + 0, // 4: storage.StorageV2WriteObjectRequest.path:type_name -> storage.StorageV2Path + 0, // 5: storage.StorageV2HeadObjectRequest.path:type_name -> storage.StorageV2Path + 2, // 6: storage.StorageV2HeadObjectResponse.info:type_name -> storage.StorageV2ObjectInfo + 0, // 7: storage.StorageV2DeleteObjectRequest.path:type_name -> storage.StorageV2Path + 0, // 8: storage.StorageV2ListObjectsRequest.path:type_name -> storage.StorageV2Path + 1, // 9: storage.StorageV2ListObjectsResponse.files:type_name -> storage.StorageV2Object + 3, // 10: storage.StorageV2.Init:input_type -> storage.StorageV2InitRequest + 5, // 11: storage.StorageV2.ReadObject:input_type -> storage.StorageV2ReadObjectRequest + 7, // 12: storage.StorageV2.WriteObject:input_type -> storage.StorageV2WriteObjectRequest + 9, // 13: storage.StorageV2.HeadObject:input_type -> storage.StorageV2HeadObjectRequest + 11, // 14: storage.StorageV2.DeleteObject:input_type -> storage.StorageV2DeleteObjectRequest + 13, // 15: storage.StorageV2.ListObjects:input_type -> storage.StorageV2ListObjectsRequest + 4, // 16: storage.StorageV2.Init:output_type -> storage.StorageV2InitResponse + 6, // 17: storage.StorageV2.ReadObject:output_type -> storage.StorageV2ReadObjectResponse + 8, // 18: storage.StorageV2.WriteObject:output_type -> storage.StorageV2WriteObjectResponse + 10, // 19: storage.StorageV2.HeadObject:output_type -> storage.StorageV2HeadObjectResponse + 12, // 20: storage.StorageV2.DeleteObject:output_type -> storage.StorageV2DeleteObjectResponse + 14, // 21: storage.StorageV2.ListObjects:output_type -> storage.StorageV2ListObjectsResponse + 16, // [16:22] is the sub-list for method output_type + 10, // [10:16] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name +} + +func init() { file_integrations_storage_v2_definition_storage_proto_init() } +func file_integrations_storage_v2_definition_storage_proto_init() { + if File_integrations_storage_v2_definition_storage_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_integrations_storage_v2_definition_storage_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2Path); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2Object); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2ObjectInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2InitRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2InitResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2ReadObjectRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2ReadObjectResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2WriteObjectRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2WriteObjectResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2HeadObjectRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2HeadObjectResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2DeleteObjectRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2DeleteObjectResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2ListObjectsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageV2ListObjectsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_integrations_storage_v2_definition_storage_proto_msgTypes[3].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_integrations_storage_v2_definition_storage_proto_rawDesc, + NumEnums: 0, + NumMessages: 15, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_integrations_storage_v2_definition_storage_proto_goTypes, + DependencyIndexes: file_integrations_storage_v2_definition_storage_proto_depIdxs, + MessageInfos: file_integrations_storage_v2_definition_storage_proto_msgTypes, + }.Build() + File_integrations_storage_v2_definition_storage_proto = out.File + file_integrations_storage_v2_definition_storage_proto_rawDesc = nil + file_integrations_storage_v2_definition_storage_proto_goTypes = nil + file_integrations_storage_v2_definition_storage_proto_depIdxs = nil +} diff --git a/integrations/storage/v2/definition/storage.proto b/integrations/storage/v2/definition/storage.proto new file mode 100644 index 000000000..fa641b2f7 --- /dev/null +++ b/integrations/storage/v2/definition/storage.proto @@ -0,0 +1,142 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +syntax = "proto3"; + +package storage; + +import "google/protobuf/timestamp.proto"; + +option go_package = "github.com/arangodb/kube-arangodb/integrations/storage/v2/definition"; + +// Defines StorageV2 Service +service StorageV2 { + // Allows to init the Storage settings (like bucket creation) + rpc Init(StorageV2InitRequest) returns (StorageV2InitResponse); + + // Allows to Read Objects using stream + rpc ReadObject(StorageV2ReadObjectRequest) returns (stream StorageV2ReadObjectResponse); + + // Allows to Write Objects using stream + rpc WriteObject(stream StorageV2WriteObjectRequest) returns (StorageV2WriteObjectResponse); + + // Gets basic info about object + rpc HeadObject(StorageV2HeadObjectRequest) returns (StorageV2HeadObjectResponse); + + // Deletes object + rpc DeleteObject(StorageV2DeleteObjectRequest) returns (StorageV2DeleteObjectResponse); + + // List all objects in batches + rpc ListObjects(StorageV2ListObjectsRequest) returns (stream StorageV2ListObjectsResponse); +} + +// Defines Object Path/Key +message StorageV2Path { + // Defines Object Path/Key + string path = 1; +} + +// Defines Object Details +message StorageV2Object { + // Defines Object Path/Key + StorageV2Path path = 1; + // Defines Object Info + StorageV2ObjectInfo info = 2; +} + +// Defines Object Info +message StorageV2ObjectInfo { + // Size in bytes of the object + uint64 size = 1; + // Timestamp of last update + google.protobuf.Timestamp last_updated = 2; +} + +// StorageV2 Init Request +message StorageV2InitRequest { + // Defines if required resources should be created + optional bool create = 1; +} + +// StorageV2 Init Response +message StorageV2InitResponse { +} + +// StorageV2 ReadObject Request +message StorageV2ReadObjectRequest { + // Defines Object Path/Key + StorageV2Path path = 1; +} + +// StorageV2 ReadObject Response +message StorageV2ReadObjectResponse { + // Bytes of the object + bytes chunk = 1; +} + +// StorageV2 WriteObject Request +message StorageV2WriteObjectRequest { + // Defines Object Path/Key + StorageV2Path path = 1; + // Bytes of the object + bytes chunk = 2; +} + +// StorageV2 WriteObject Response +message StorageV2WriteObjectResponse { + // Bytes Saved + int64 bytes =1; + // Checksum (sha256) of the object + string checksum = 2; +} + +// StorageV2 HeadObject Request +message StorageV2HeadObjectRequest { + // Defines Object Path/Key + StorageV2Path path = 1; +} + +// StorageV2 HeadObject Response +message StorageV2HeadObjectResponse { + // Defines Object Info + StorageV2ObjectInfo info = 1; +} + +// StorageV2 DeleteObject Request +message StorageV2DeleteObjectRequest { + // Defines Object Path/Key + StorageV2Path path = 1; +} + +// StorageV2 DeleteObject Response +message StorageV2DeleteObjectResponse { +} + +// StorageV2 ListObjects Request +message StorageV2ListObjectsRequest { + // Defines Object Path/Key + StorageV2Path path = 1; +} + +// StorageV2 ListObjects Response +message StorageV2ListObjectsResponse { + // List of the objects + repeated StorageV2Object files = 1; +} \ No newline at end of file diff --git a/integrations/storage/v2/definition/storage_grpc.pb.go b/integrations/storage/v2/definition/storage_grpc.pb.go new file mode 100644 index 000000000..799736731 --- /dev/null +++ b/integrations/storage/v2/definition/storage_grpc.pb.go @@ -0,0 +1,386 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc v3.21.1 +// source: integrations/storage/v2/definition/storage.proto + +package definition + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// StorageV2Client is the client API for StorageV2 service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type StorageV2Client interface { + // Allows to init the Storage settings (like bucket creation) + Init(ctx context.Context, in *StorageV2InitRequest, opts ...grpc.CallOption) (*StorageV2InitResponse, error) + // Allows to Read Objects using stream + ReadObject(ctx context.Context, in *StorageV2ReadObjectRequest, opts ...grpc.CallOption) (StorageV2_ReadObjectClient, error) + // Allows to Write Objects using stream + WriteObject(ctx context.Context, opts ...grpc.CallOption) (StorageV2_WriteObjectClient, error) + // Gets basic info about object + HeadObject(ctx context.Context, in *StorageV2HeadObjectRequest, opts ...grpc.CallOption) (*StorageV2HeadObjectResponse, error) + // Deletes object + DeleteObject(ctx context.Context, in *StorageV2DeleteObjectRequest, opts ...grpc.CallOption) (*StorageV2DeleteObjectResponse, error) + // List all objects in batches + ListObjects(ctx context.Context, in *StorageV2ListObjectsRequest, opts ...grpc.CallOption) (StorageV2_ListObjectsClient, error) +} + +type storageV2Client struct { + cc grpc.ClientConnInterface +} + +func NewStorageV2Client(cc grpc.ClientConnInterface) StorageV2Client { + return &storageV2Client{cc} +} + +func (c *storageV2Client) Init(ctx context.Context, in *StorageV2InitRequest, opts ...grpc.CallOption) (*StorageV2InitResponse, error) { + out := new(StorageV2InitResponse) + err := c.cc.Invoke(ctx, "/storage.StorageV2/Init", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *storageV2Client) ReadObject(ctx context.Context, in *StorageV2ReadObjectRequest, opts ...grpc.CallOption) (StorageV2_ReadObjectClient, error) { + stream, err := c.cc.NewStream(ctx, &StorageV2_ServiceDesc.Streams[0], "/storage.StorageV2/ReadObject", opts...) + if err != nil { + return nil, err + } + x := &storageV2ReadObjectClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type StorageV2_ReadObjectClient interface { + Recv() (*StorageV2ReadObjectResponse, error) + grpc.ClientStream +} + +type storageV2ReadObjectClient struct { + grpc.ClientStream +} + +func (x *storageV2ReadObjectClient) Recv() (*StorageV2ReadObjectResponse, error) { + m := new(StorageV2ReadObjectResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *storageV2Client) WriteObject(ctx context.Context, opts ...grpc.CallOption) (StorageV2_WriteObjectClient, error) { + stream, err := c.cc.NewStream(ctx, &StorageV2_ServiceDesc.Streams[1], "/storage.StorageV2/WriteObject", opts...) + if err != nil { + return nil, err + } + x := &storageV2WriteObjectClient{stream} + return x, nil +} + +type StorageV2_WriteObjectClient interface { + Send(*StorageV2WriteObjectRequest) error + CloseAndRecv() (*StorageV2WriteObjectResponse, error) + grpc.ClientStream +} + +type storageV2WriteObjectClient struct { + grpc.ClientStream +} + +func (x *storageV2WriteObjectClient) Send(m *StorageV2WriteObjectRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *storageV2WriteObjectClient) CloseAndRecv() (*StorageV2WriteObjectResponse, error) { + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + m := new(StorageV2WriteObjectResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *storageV2Client) HeadObject(ctx context.Context, in *StorageV2HeadObjectRequest, opts ...grpc.CallOption) (*StorageV2HeadObjectResponse, error) { + out := new(StorageV2HeadObjectResponse) + err := c.cc.Invoke(ctx, "/storage.StorageV2/HeadObject", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *storageV2Client) DeleteObject(ctx context.Context, in *StorageV2DeleteObjectRequest, opts ...grpc.CallOption) (*StorageV2DeleteObjectResponse, error) { + out := new(StorageV2DeleteObjectResponse) + err := c.cc.Invoke(ctx, "/storage.StorageV2/DeleteObject", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *storageV2Client) ListObjects(ctx context.Context, in *StorageV2ListObjectsRequest, opts ...grpc.CallOption) (StorageV2_ListObjectsClient, error) { + stream, err := c.cc.NewStream(ctx, &StorageV2_ServiceDesc.Streams[2], "/storage.StorageV2/ListObjects", opts...) + if err != nil { + return nil, err + } + x := &storageV2ListObjectsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type StorageV2_ListObjectsClient interface { + Recv() (*StorageV2ListObjectsResponse, error) + grpc.ClientStream +} + +type storageV2ListObjectsClient struct { + grpc.ClientStream +} + +func (x *storageV2ListObjectsClient) Recv() (*StorageV2ListObjectsResponse, error) { + m := new(StorageV2ListObjectsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// StorageV2Server is the server API for StorageV2 service. +// All implementations must embed UnimplementedStorageV2Server +// for forward compatibility +type StorageV2Server interface { + // Allows to init the Storage settings (like bucket creation) + Init(context.Context, *StorageV2InitRequest) (*StorageV2InitResponse, error) + // Allows to Read Objects using stream + ReadObject(*StorageV2ReadObjectRequest, StorageV2_ReadObjectServer) error + // Allows to Write Objects using stream + WriteObject(StorageV2_WriteObjectServer) error + // Gets basic info about object + HeadObject(context.Context, *StorageV2HeadObjectRequest) (*StorageV2HeadObjectResponse, error) + // Deletes object + DeleteObject(context.Context, *StorageV2DeleteObjectRequest) (*StorageV2DeleteObjectResponse, error) + // List all objects in batches + ListObjects(*StorageV2ListObjectsRequest, StorageV2_ListObjectsServer) error + mustEmbedUnimplementedStorageV2Server() +} + +// UnimplementedStorageV2Server must be embedded to have forward compatible implementations. +type UnimplementedStorageV2Server struct { +} + +func (UnimplementedStorageV2Server) Init(context.Context, *StorageV2InitRequest) (*StorageV2InitResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Init not implemented") +} +func (UnimplementedStorageV2Server) ReadObject(*StorageV2ReadObjectRequest, StorageV2_ReadObjectServer) error { + return status.Errorf(codes.Unimplemented, "method ReadObject not implemented") +} +func (UnimplementedStorageV2Server) WriteObject(StorageV2_WriteObjectServer) error { + return status.Errorf(codes.Unimplemented, "method WriteObject not implemented") +} +func (UnimplementedStorageV2Server) HeadObject(context.Context, *StorageV2HeadObjectRequest) (*StorageV2HeadObjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method HeadObject not implemented") +} +func (UnimplementedStorageV2Server) DeleteObject(context.Context, *StorageV2DeleteObjectRequest) (*StorageV2DeleteObjectResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteObject not implemented") +} +func (UnimplementedStorageV2Server) ListObjects(*StorageV2ListObjectsRequest, StorageV2_ListObjectsServer) error { + return status.Errorf(codes.Unimplemented, "method ListObjects not implemented") +} +func (UnimplementedStorageV2Server) mustEmbedUnimplementedStorageV2Server() {} + +// UnsafeStorageV2Server may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to StorageV2Server will +// result in compilation errors. +type UnsafeStorageV2Server interface { + mustEmbedUnimplementedStorageV2Server() +} + +func RegisterStorageV2Server(s grpc.ServiceRegistrar, srv StorageV2Server) { + s.RegisterService(&StorageV2_ServiceDesc, srv) +} + +func _StorageV2_Init_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StorageV2InitRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StorageV2Server).Init(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/storage.StorageV2/Init", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StorageV2Server).Init(ctx, req.(*StorageV2InitRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StorageV2_ReadObject_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(StorageV2ReadObjectRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(StorageV2Server).ReadObject(m, &storageV2ReadObjectServer{stream}) +} + +type StorageV2_ReadObjectServer interface { + Send(*StorageV2ReadObjectResponse) error + grpc.ServerStream +} + +type storageV2ReadObjectServer struct { + grpc.ServerStream +} + +func (x *storageV2ReadObjectServer) Send(m *StorageV2ReadObjectResponse) error { + return x.ServerStream.SendMsg(m) +} + +func _StorageV2_WriteObject_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(StorageV2Server).WriteObject(&storageV2WriteObjectServer{stream}) +} + +type StorageV2_WriteObjectServer interface { + SendAndClose(*StorageV2WriteObjectResponse) error + Recv() (*StorageV2WriteObjectRequest, error) + grpc.ServerStream +} + +type storageV2WriteObjectServer struct { + grpc.ServerStream +} + +func (x *storageV2WriteObjectServer) SendAndClose(m *StorageV2WriteObjectResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *storageV2WriteObjectServer) Recv() (*StorageV2WriteObjectRequest, error) { + m := new(StorageV2WriteObjectRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _StorageV2_HeadObject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StorageV2HeadObjectRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StorageV2Server).HeadObject(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/storage.StorageV2/HeadObject", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StorageV2Server).HeadObject(ctx, req.(*StorageV2HeadObjectRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StorageV2_DeleteObject_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StorageV2DeleteObjectRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(StorageV2Server).DeleteObject(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/storage.StorageV2/DeleteObject", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(StorageV2Server).DeleteObject(ctx, req.(*StorageV2DeleteObjectRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _StorageV2_ListObjects_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(StorageV2ListObjectsRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(StorageV2Server).ListObjects(m, &storageV2ListObjectsServer{stream}) +} + +type StorageV2_ListObjectsServer interface { + Send(*StorageV2ListObjectsResponse) error + grpc.ServerStream +} + +type storageV2ListObjectsServer struct { + grpc.ServerStream +} + +func (x *storageV2ListObjectsServer) Send(m *StorageV2ListObjectsResponse) error { + return x.ServerStream.SendMsg(m) +} + +// StorageV2_ServiceDesc is the grpc.ServiceDesc for StorageV2 service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var StorageV2_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "storage.StorageV2", + HandlerType: (*StorageV2Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Init", + Handler: _StorageV2_Init_Handler, + }, + { + MethodName: "HeadObject", + Handler: _StorageV2_HeadObject_Handler, + }, + { + MethodName: "DeleteObject", + Handler: _StorageV2_DeleteObject_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "ReadObject", + Handler: _StorageV2_ReadObject_Handler, + ServerStreams: true, + }, + { + StreamName: "WriteObject", + Handler: _StorageV2_WriteObject_Handler, + ClientStreams: true, + }, + { + StreamName: "ListObjects", + Handler: _StorageV2_ListObjects_Handler, + ServerStreams: true, + }, + }, + Metadata: "integrations/storage/v2/definition/storage.proto", +} diff --git a/integrations/storage/v2/logger.go b/integrations/storage/v2/logger.go new file mode 100644 index 000000000..ad6d01bb5 --- /dev/null +++ b/integrations/storage/v2/logger.go @@ -0,0 +1,25 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import "github.com/arangodb/kube-arangodb/pkg/logging" + +var logger = logging.Global().RegisterAndGetLogger("integration-storage-v2", logging.Info) diff --git a/integrations/storage/v2/shared/consts.go b/integrations/storage/v2/shared/consts.go new file mode 100644 index 000000000..2508ae38b --- /dev/null +++ b/integrations/storage/v2/shared/consts.go @@ -0,0 +1,34 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package shared + +const ( + // MaxChunkBytes contains the maximum number of bytes in a chunk (for Read/Write streaming operations) + MaxChunkBytes = 1024 * 1024 +) + +func NewBuffer(size int) []byte { + if size > MaxChunkBytes { + size = MaxChunkBytes + } + + return make([]byte, size) +} diff --git a/integrations/storage/v2/shared/init.go b/integrations/storage/v2/shared/init.go new file mode 100644 index 000000000..86040270e --- /dev/null +++ b/integrations/storage/v2/shared/init.go @@ -0,0 +1,33 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package shared + +type InitOptions struct { + Create *bool +} + +func (i *InitOptions) GetCreate() bool { + if i == nil || i.Create == nil { + return false + } + + return *i.Create +} diff --git a/integrations/storage/v2/shared/io.go b/integrations/storage/v2/shared/io.go new file mode 100644 index 000000000..176e74f59 --- /dev/null +++ b/integrations/storage/v2/shared/io.go @@ -0,0 +1,64 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package shared + +import ( + "context" + "io" + "time" + + "github.com/arangodb/kube-arangodb/pkg/util" +) + +type Writer interface { + io.Writer + + Close(ctx context.Context) (string, int64, error) + + Closed() bool +} + +type Reader interface { + io.Reader + + Close(ctx context.Context) (string, int64, error) + + Closed() bool +} + +type File struct { + Key string + Info Info +} + +type Info struct { + Size uint64 + LastUpdatedAt time.Time +} + +type IO interface { + Init(ctx context.Context, opts *InitOptions) error + Write(ctx context.Context, key string) (Writer, error) + Read(ctx context.Context, key string) (Reader, error) + Head(ctx context.Context, key string) (*Info, error) + Delete(ctx context.Context, key string) (bool, error) + List(ctx context.Context, key string) (util.NextIterator[[]File], error) +} diff --git a/integrations/storage/v2/shared/s3/configuration.go b/integrations/storage/v2/shared/s3/configuration.go new file mode 100644 index 000000000..d761347c8 --- /dev/null +++ b/integrations/storage/v2/shared/s3/configuration.go @@ -0,0 +1,57 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/s3" + "github.com/aws/aws-sdk-go/service/s3/s3manager" + + pbImplStorageV2Shared "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared" + awsHelper "github.com/arangodb/kube-arangodb/pkg/util/aws" +) + +type Configuration struct { + BucketName string + BucketPrefix string + + MaxListKeys *int64 + + Client awsHelper.Config +} + +func (c Configuration) New() (pbImplStorageV2Shared.IO, error) { + prov, err := c.Client.GetAWSSession() + if err != nil { + return nil, err + } + + storageClient := s3.New(prov, aws.NewConfig().WithRegion(c.Client.GetRegion())) + + return &ios{ + config: c, + client: storageClient, + uploader: s3manager.NewUploaderWithClient(storageClient), + downloader: s3manager.NewDownloaderWithClient(storageClient, func(downloader *s3manager.Downloader) { + downloader.Concurrency = 1 + }), + }, nil +} diff --git a/integrations/storage/v2/shared/s3/delete.go b/integrations/storage/v2/shared/s3/delete.go new file mode 100644 index 000000000..d3007ce6a --- /dev/null +++ b/integrations/storage/v2/shared/s3/delete.go @@ -0,0 +1,44 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "context" + + "github.com/aws/aws-sdk-go/service/s3" + + "github.com/arangodb/kube-arangodb/pkg/util" +) + +func (i *ios) Delete(ctx context.Context, key string) (bool, error) { + _, err := i.client.DeleteObjectWithContext(ctx, &s3.DeleteObjectInput{ + Key: util.NewType(i.key(key)), + Bucket: util.NewType(i.config.BucketName), + }) + if err != nil { + if IsAWSNotFoundError(err) { + return false, nil + } + return false, err + } + + return true, nil +} diff --git a/integrations/storage/v2/shared/s3/errors.go b/integrations/storage/v2/shared/s3/errors.go new file mode 100644 index 000000000..bd503d3a8 --- /dev/null +++ b/integrations/storage/v2/shared/s3/errors.go @@ -0,0 +1,49 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "github.com/aws/aws-sdk-go/aws/awserr" + "github.com/aws/aws-sdk-go/service/s3" + + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +func IsAWSNotFoundError(err error) bool { + if err != nil { + { + var aerr awserr.Error + if errors.As(err, &aerr) { + switch aerr.Code() { + case s3.ErrCodeNoSuchKey, "NotFound": + return true + } + } + } + { + var aerr awserr.RequestFailure + if errors.As(err, &aerr) { + return IsAWSNotFoundError(aerr.OrigErr()) + } + } + } + return false +} diff --git a/integrations/storage/v2/shared/s3/head.go b/integrations/storage/v2/shared/s3/head.go new file mode 100644 index 000000000..cd65660c4 --- /dev/null +++ b/integrations/storage/v2/shared/s3/head.go @@ -0,0 +1,48 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "context" + + "github.com/aws/aws-sdk-go/service/s3" + + pbImplStorageV2Shared "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared" + "github.com/arangodb/kube-arangodb/pkg/util" +) + +func (i *ios) Head(ctx context.Context, key string) (*pbImplStorageV2Shared.Info, error) { + obj, err := i.client.HeadObjectWithContext(ctx, &s3.HeadObjectInput{ + Bucket: util.NewType(i.config.BucketName), + Key: util.NewType(i.key(key)), + }) + if err != nil { + if IsAWSNotFoundError(err) { + return nil, nil + } + return nil, err + } + + return &pbImplStorageV2Shared.Info{ + Size: uint64(util.TypeOrDefault(obj.ContentLength)), + LastUpdatedAt: util.TypeOrDefault(obj.LastModified), + }, nil +} diff --git a/integrations/storage/v2/shared/s3/init.go b/integrations/storage/v2/shared/s3/init.go new file mode 100644 index 000000000..35ac10bc8 --- /dev/null +++ b/integrations/storage/v2/shared/s3/init.go @@ -0,0 +1,50 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "context" + + "github.com/aws/aws-sdk-go/service/s3" + + pbImplStorageV2Shared "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared" + "github.com/arangodb/kube-arangodb/pkg/util" +) + +func (i *ios) Init(ctx context.Context, opts *pbImplStorageV2Shared.InitOptions) error { + if opts.GetCreate() { + if _, err := i.client.HeadBucketWithContext(ctx, &s3.HeadBucketInput{ + Bucket: util.NewType(i.config.BucketName), + }); err != nil { + if !IsAWSNotFoundError(err) { + return err + } + + if _, err := i.client.CreateBucketWithContext(ctx, &s3.CreateBucketInput{ + Bucket: util.NewType(i.config.BucketName), + }); err != nil { + return err + } + } + } + + return nil +} diff --git a/integrations/storage/v2/shared/s3/io.go b/integrations/storage/v2/shared/s3/io.go new file mode 100644 index 000000000..2f8d05bb0 --- /dev/null +++ b/integrations/storage/v2/shared/s3/io.go @@ -0,0 +1,71 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "context" + "path" + "strings" + + "github.com/aws/aws-sdk-go/service/s3" + "github.com/aws/aws-sdk-go/service/s3/s3iface" + "github.com/aws/aws-sdk-go/service/s3/s3manager" + + pbImplStorageV2Shared "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared" + "github.com/arangodb/kube-arangodb/pkg/util" +) + +type ios struct { + config Configuration + client s3iface.S3API + uploader *s3manager.Uploader + downloader *s3manager.Downloader +} + +func (i *ios) key(keys ...string) string { + return path.Join(strings.TrimPrefix(i.config.BucketPrefix, "/"), path.Join(keys...)) +} + +func (i *ios) clean(key string) string { + return strings.TrimPrefix(strings.TrimPrefix(key, i.key()), "/") +} + +func (i *ios) Write(ctx context.Context, key string) (pbImplStorageV2Shared.Writer, error) { + w := newWriter(i) + + w.start(ctx, &s3manager.UploadInput{ + Bucket: util.NewType(i.config.BucketName), + Key: util.NewType(i.key(key)), + }) + + return w, nil +} + +func (i *ios) Read(ctx context.Context, key string) (pbImplStorageV2Shared.Reader, error) { + r := newReader(i) + + r.start(ctx, &s3.GetObjectInput{ + Bucket: util.NewType(i.config.BucketName), + Key: util.NewType(i.key(key)), + }) + + return r, nil +} diff --git a/integrations/storage/v2/shared/s3/io_test.go b/integrations/storage/v2/shared/s3/io_test.go new file mode 100644 index 000000000..7a950a624 --- /dev/null +++ b/integrations/storage/v2/shared/s3/io_test.go @@ -0,0 +1,94 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "context" + "fmt" + "io" + "testing" + + "github.com/stretchr/testify/require" + "k8s.io/apimachinery/pkg/util/uuid" + + pbImplStorageV2Shared "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/tests" +) + +func getClient(t *testing.T) pbImplStorageV2Shared.IO { + var cfg Configuration + + cfg.Client = tests.GetAWSClientConfig(t) + cfg.BucketName = tests.GetAWSS3Bucket(t) + cfg.BucketPrefix = fmt.Sprintf("test/%s/", uuid.NewUUID()) + + z, err := cfg.New() + require.NoError(t, err) + + return z +} + +func Test(t *testing.T) { + w := getClient(t) + + data := make([]byte, 1024*1024*64) + + for id := range data { + data[id] = 0 + } + + ctx, c := context.WithCancel(context.Background()) + defer c() + + q, err := w.Write(ctx, "test.data") + require.NoError(t, err) + + _, err = util.WriteAll(q, data) + require.NoError(t, err) + + checksum, size, err := q.Close(context.Background()) + require.NoError(t, err) + + t.Logf("Write Checksum: %s", checksum) + + require.EqualValues(t, 1024*1024*64, size) + + r, err := w.Read(context.Background(), "test.data") + require.NoError(t, err) + + data, err = io.ReadAll(r) + require.NoError(t, err) + + echecksum, esize, err := r.Close(context.Background()) + require.NoError(t, err) + + require.EqualValues(t, 1024*1024*64, esize) + require.Len(t, data, 1024*1024*64) + + t.Logf("Read Checksum: %s", echecksum) + + require.EqualValues(t, echecksum, checksum) + + removed, err := w.Delete(ctx, "test.data") + require.NoError(t, err) + require.True(t, removed) +} diff --git a/integrations/storage/v2/shared/s3/list.go b/integrations/storage/v2/shared/s3/list.go new file mode 100644 index 000000000..7cedc85d5 --- /dev/null +++ b/integrations/storage/v2/shared/s3/list.go @@ -0,0 +1,100 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "context" + "io" + "sync" + + "github.com/aws/aws-sdk-go/service/s3" + + pbImplStorageV2Shared "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared" + "github.com/arangodb/kube-arangodb/pkg/util" +) + +func (i *ios) List(_ context.Context, key string) (util.NextIterator[[]pbImplStorageV2Shared.File], error) { + return &listIterator{ + parent: i, + key: key, + }, nil +} + +type listIterator struct { + lock sync.Mutex + + parent *ios + + key string + + next *string + + done bool +} + +func (l *listIterator) Next(ctx context.Context) ([]pbImplStorageV2Shared.File, error) { + l.lock.Lock() + defer l.lock.Unlock() + + if l.done { + return nil, io.EOF + } + + resp, err := l.parent.client.ListObjectsWithContext(ctx, &s3.ListObjectsInput{ + Bucket: util.NewType(l.parent.config.BucketName), + Prefix: util.NewType(l.parent.key(l.key)), + MaxKeys: l.parent.config.MaxListKeys, + Marker: l.next, + }) + if err != nil { + return nil, err + } + + results := make([]pbImplStorageV2Shared.File, 0, len(resp.Contents)) + + for _, obj := range resp.Contents { + if obj == nil { + continue + } + + if obj.Key == nil { + continue + } + + var info pbImplStorageV2Shared.Info + + info.Size = uint64(util.TypeOrDefault(obj.Size)) + info.LastUpdatedAt = util.TypeOrDefault(obj.LastModified) + + results = append(results, pbImplStorageV2Shared.File{ + Key: l.parent.clean(*obj.Key), + Info: info, + }) + + l.next = util.NewType(*obj.Key) + } + + if !util.OptionalType(resp.IsTruncated, false) { + l.done = true + } + + return results, nil +} diff --git a/integrations/storage/v2/shared/s3/read.go b/integrations/storage/v2/shared/s3/read.go new file mode 100644 index 000000000..0ad1689ac --- /dev/null +++ b/integrations/storage/v2/shared/s3/read.go @@ -0,0 +1,151 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "context" + "crypto/sha256" + "errors" + "fmt" + "hash" + "io" + "os" + "sync" + + "github.com/aws/aws-sdk-go/service/s3" +) + +func newReader(parent *ios) *reader { + pr, pw := io.Pipe() + + return &reader{ + parent: parent, + closed: make(chan string), + pr: pr, + pw: pw, + checksum: sha256.New(), + } +} + +type reader struct { + lock, closeLock sync.Mutex + + parent *ios + + closed chan string + + err error + + bytes int64 + checksum hash.Hash + + pr io.Reader + pw io.WriteCloser +} + +func (w *reader) Read(p []byte) (n int, err error) { + w.lock.Lock() + defer w.lock.Unlock() + + n, err = w.pr.Read(p) + if err == nil { + w.bytes += int64(n) + w.checksum.Write(p[:n]) + return n, nil + } + + if errors.Is(err, io.EOF) { + if !w.done() { + return 0, io.ErrUnexpectedEOF + } + + if IsAWSNotFoundError(w.err) { + return 0, os.ErrNotExist + } + } + + return n, err +} + +func (w *reader) Closed() bool { + return w.done() +} + +func (w *reader) Close(ctx context.Context) (string, int64, error) { + w.lock.Lock() + defer w.lock.Unlock() + + if !w.done() { + return "", 0, io.ErrNoProgress + } + + if err := w.err; err != nil { + return "", 0, err + } + + return fmt.Sprintf("%02x", w.checksum.Sum(nil)), w.bytes, nil +} + +func (w *reader) done() bool { + w.closeLock.Lock() + defer w.closeLock.Unlock() + + select { + case <-w.closed: + return true + default: + return false + } +} + +func (w *reader) start(ctx context.Context, input *s3.GetObjectInput) { + go w._start(ctx, input) +} + +func (w *reader) _start(ctx context.Context, input *s3.GetObjectInput) { + defer func() { + w.closeLock.Lock() + defer w.closeLock.Unlock() + + defer close(w.closed) + + if err := w.pw.Close(); err != nil { + if w.err != nil { + w.err = err + } + } + + buff := make([]byte, 128) + + for { + _, err := w.pr.Read(buff) + if err != nil { + return + } + } + }() + + _, err := w.parent.downloader.DownloadWithContext(ctx, wrapWithOffsetWriter(w.pw), input) + if err != nil { + w.err = err + return + } +} diff --git a/integrations/storage/v2/shared/s3/wr_offset.go b/integrations/storage/v2/shared/s3/wr_offset.go new file mode 100644 index 000000000..9c9355591 --- /dev/null +++ b/integrations/storage/v2/shared/s3/wr_offset.go @@ -0,0 +1,57 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "io" + "sync" +) + +func wrapWithOffsetWriter(in io.Writer) io.WriterAt { + return &offsetWriter{ + offset: 0, + out: in, + } +} + +type offsetWriter struct { + lock sync.Mutex + offset int64 + out io.Writer +} + +func (o *offsetWriter) WriteAt(p []byte, off int64) (n int, err error) { + o.lock.Lock() + defer o.lock.Unlock() + + if o.offset != off { + return 0, io.ErrUnexpectedEOF + } + + n, err = o.out.Write(p) + if err != nil { + return 0, err + } + + o.offset += int64(n) + + return n, nil +} diff --git a/integrations/storage/v2/shared/s3/write.go b/integrations/storage/v2/shared/s3/write.go new file mode 100644 index 000000000..70f4158fe --- /dev/null +++ b/integrations/storage/v2/shared/s3/write.go @@ -0,0 +1,142 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package s3 + +import ( + "context" + "crypto/sha256" + "fmt" + "hash" + "io" + "sync" + + "github.com/aws/aws-sdk-go/service/s3/s3manager" +) + +func newWriter(parent *ios) *writer { + pr, pw := io.Pipe() + + return &writer{ + parent: parent, + closed: make(chan string), + pr: pr, + pw: pw, + checksum: sha256.New(), + } +} + +type writer struct { + lock sync.Mutex + + parent *ios + + closed chan string + + err error + + bytes int64 + checksum hash.Hash + + pr io.Reader + pw io.WriteCloser +} + +func (w *writer) Closed() bool { + return w.done() +} + +func (w *writer) Write(p []byte) (n int, err error) { + w.lock.Lock() + defer w.lock.Unlock() + + if w.done() { + return 0, w.err + } + + n, err = w.pw.Write(p) + if err != nil { + return 0, err + } + + if n > 0 { + w.bytes += int64(n) + w.checksum.Write(p[:n]) + } + + return n, nil +} + +func (w *writer) done() bool { + select { + case <-w.closed: + return true + default: + return false + } +} + +func (w *writer) Close(ctx context.Context) (string, int64, error) { + w.lock.Lock() + defer w.lock.Unlock() + + if !w.done() { + if err := w.pw.Close(); err != nil { + return "", 0, err + } + + <-w.closed + } + + if w.err != nil { + return "", 0, w.err + } + + return fmt.Sprintf("%02x", w.checksum.Sum(nil)), w.bytes, nil +} + +func (w *writer) start(ctx context.Context, input *s3manager.UploadInput) { + go w._start(ctx, input) +} + +func (w *writer) _start(ctx context.Context, input *s3manager.UploadInput) { + defer close(w.closed) + + defer func() { + // Clean the channel + + buff := make([]byte, 128) + + for { + _, err := w.pr.Read(buff) + if err != nil { + return + } + } + }() + + input.Body = w.pr + + _, err := w.parent.uploader.UploadWithContext(ctx, input) + if err != nil { + w.err = err + return + } +} diff --git a/integrations/storage/v2/storage.go b/integrations/storage/v2/storage.go new file mode 100644 index 000000000..26b856b38 --- /dev/null +++ b/integrations/storage/v2/storage.go @@ -0,0 +1,286 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import ( + "context" + "io" + "os" + + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/types/known/timestamppb" + + pbStorageV2 "github.com/arangodb/kube-arangodb/integrations/storage/v2/definition" + pbImplStorageV2Shared "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/svc" +) + +var _ pbStorageV2.StorageV2Server = &implementation{} +var _ svc.Handler = &implementation{} + +func New(cfg Configuration) (svc.Handler, error) { + return newInternal(cfg) +} + +func newInternal(c Configuration) (*implementation, error) { + if err := c.Validate(); err != nil { + return nil, errors.Wrapf(err, "Invalid config") + } + + io, err := c.IO() + if err != nil { + return nil, err + } + + return &implementation{ + io: io, + }, nil +} + +type implementation struct { + io pbImplStorageV2Shared.IO + + pbStorageV2.UnimplementedStorageV2Server +} + +func (i *implementation) Name() string { + return pbStorageV2.Name +} + +func (i *implementation) Register(registrar *grpc.Server) { + pbStorageV2.RegisterStorageV2Server(registrar, i) +} + +func (i *implementation) Health() svc.HealthState { + return svc.Healthy +} + +func (i *implementation) WriteObject(server pbStorageV2.StorageV2_WriteObjectServer) error { + ctx, c := context.WithCancel(server.Context()) + defer c() + + log := logger.Str("func", "WriteObject") + + msg, err := server.Recv() + if err == io.EOF || errors.IsGRPCCode(err, codes.Canceled) { + return io.ErrUnexpectedEOF + } + + path := msg.GetPath().GetPath() + if path == "" { + log.Debug("path missing") + return status.Error(codes.InvalidArgument, "path missing") + } + + wd, err := i.io.Write(ctx, path) + if err != nil { + return err + } + + if _, err := util.WriteAll(wd, msg.GetChunk()); err != nil { + return err + } + + for { + msg, err := server.Recv() + if errors.IsGRPCCode(err, codes.Canceled) { + c() + return io.ErrUnexpectedEOF + } + + if errors.Is(err, io.EOF) { + checksum, bytes, err := wd.Close(ctx) + if err != nil { + return err + } + + if err := server.SendAndClose(&pbStorageV2.StorageV2WriteObjectResponse{ + Bytes: bytes, + Checksum: checksum, + }); err != nil { + log.Err(err).Debug("Failed to send WriteObjectControl message") + return err + } + + return nil + } + + if err != nil { + return err + } + + if msg.GetPath() != nil { + if path != msg.GetPath().GetPath() { + log.Debug("path changed") + return status.Error(codes.InvalidArgument, "path changed") + } + } + + if _, err := util.WriteAll(wd, msg.GetChunk()); err != nil { + return err + } + } +} + +func (i *implementation) ReadObject(req *pbStorageV2.StorageV2ReadObjectRequest, server pbStorageV2.StorageV2_ReadObjectServer) error { + log := logger.Str("func", "ReadObject").Str("path", req.GetPath().GetPath()) + ctx := server.Context() + path := req.GetPath().GetPath() + if path == "" { + return status.Errorf(codes.InvalidArgument, "path missing") + } + + rd, err := i.io.Read(ctx, path) + if err != nil { + return err + } + + buff := pbImplStorageV2Shared.NewBuffer(pbImplStorageV2Shared.MaxChunkBytes) + + for { + n, err := rd.Read(buff) + if err != nil { + if errors.Is(err, io.EOF) { + return nil + } + + if errors.Is(err, os.ErrNotExist) { + return status.Errorf(codes.NotFound, "file not found") + } + + return err + } + + // Send chunk to caller + if err := server.Send(&pbStorageV2.StorageV2ReadObjectResponse{ + Chunk: buff[:n], + }); err != nil { + log.Err(err).Debug("Failed to send ReadObjectChunk") + return err + } + } +} + +func (i *implementation) HeadObject(ctx context.Context, req *pbStorageV2.StorageV2HeadObjectRequest) (*pbStorageV2.StorageV2HeadObjectResponse, error) { + log := logger.Str("func", "HeadObject").Str("path", req.GetPath().GetPath()) + + // Check request fields + path := req.GetPath().GetPath() + if path == "" { + return nil, status.Error(codes.InvalidArgument, "path missing") + } + + info, err := i.io.Head(ctx, path) + if err != nil { + log.Err(err).Debug("getObjectInfo failed") + return nil, err + } + if info == nil { + return nil, status.Error(codes.NotFound, path) + } + + return &pbStorageV2.StorageV2HeadObjectResponse{ + Info: &pbStorageV2.StorageV2ObjectInfo{ + Size: info.Size, + LastUpdated: timestamppb.New(info.LastUpdatedAt), + }, + }, nil +} + +func (i *implementation) DeleteObject(ctx context.Context, req *pbStorageV2.StorageV2DeleteObjectRequest) (*pbStorageV2.StorageV2DeleteObjectResponse, error) { + log := logger.Str("func", "DeleteObject").Str("path", req.GetPath().GetPath()) + + // Check request fields + path := req.GetPath().GetPath() + if path == "" { + return nil, status.Error(codes.InvalidArgument, "path missing") + } + + deleted, err := i.io.Delete(ctx, path) + if err != nil { + log.Err(err).Debug("deleteObject failed") + return nil, err + } + + if deleted { + return &pbStorageV2.StorageV2DeleteObjectResponse{}, nil + } + + return nil, status.Error(codes.NotFound, "Object Not Found") +} + +func (i *implementation) ListObjects(req *pbStorageV2.StorageV2ListObjectsRequest, server pbStorageV2.StorageV2_ListObjectsServer) error { + log := logger.Str("func", "ReadObject").Str("path", req.GetPath().GetPath()) + ctx := server.Context() + path := req.GetPath().GetPath() + + lister, err := i.io.List(ctx, path) + if err != nil { + log.Err(err).Debug("listObjects failed") + return err + } + + for { + files, err := lister.Next(ctx) + if err != nil { + if errors.Is(err, io.EOF) { + return nil + } + log.Err(err).Debug("listObjects failed") + return err + } + + ret := make([]*pbStorageV2.StorageV2Object, len(files)) + + for id := range files { + ret[id] = &pbStorageV2.StorageV2Object{ + Path: &pbStorageV2.StorageV2Path{ + Path: files[id].Key, + }, + Info: &pbStorageV2.StorageV2ObjectInfo{ + Size: files[id].Info.Size, + LastUpdated: timestamppb.New(files[id].Info.LastUpdatedAt), + }, + } + } + + if err := server.Send(&pbStorageV2.StorageV2ListObjectsResponse{ + Files: ret, + }); err != nil { + log.Err(err).Debug("listObjects failed") + return err + } + } +} + +func (i *implementation) Init(ctx context.Context, in *pbStorageV2.StorageV2InitRequest) (*pbStorageV2.StorageV2InitResponse, error) { + if err := i.io.Init(ctx, &pbImplStorageV2Shared.InitOptions{ + Create: util.NewPointer(in.Create), + }); err != nil { + return nil, err + } + + return &pbStorageV2.StorageV2InitResponse{}, nil +} diff --git a/integrations/storage/v2/storage_test.go b/integrations/storage/v2/storage_test.go new file mode 100644 index 000000000..ab4adcdf5 --- /dev/null +++ b/integrations/storage/v2/storage_test.go @@ -0,0 +1,340 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import ( + "bytes" + "context" + "crypto/rand" + "fmt" + "sort" + "testing" + + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "k8s.io/apimachinery/pkg/util/uuid" + + pbStorageV2 "github.com/arangodb/kube-arangodb/integrations/storage/v2/definition" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +func Test_List(t *testing.T) { + ctx, c := context.WithCancel(context.Background()) + defer c() + + h := Client(t, ctx, func(c Configuration) Configuration { + c.S3.MaxListKeys = util.NewType[int64](32) + return c + }) + testFileListing(t, ctx, h) +} + +func Test_Flow_16(t *testing.T) { + ctx, c := context.WithCancel(context.Background()) + defer c() + + h := Client(t, ctx, func(c Configuration) Configuration { + c.S3.MaxListKeys = util.NewType[int64](32) + return c + }) + + testS3BucketFileHandling(t, ctx, h, 16) +} + +func Test_Flow_1024(t *testing.T) { + ctx, c := context.WithCancel(context.Background()) + defer c() + + h := Client(t, ctx, func(c Configuration) Configuration { + c.S3.MaxListKeys = util.NewType[int64](32) + return c + }) + + testS3BucketFileHandling(t, ctx, h, 1024) +} + +func Test_Flow_1048576(t *testing.T) { + ctx, c := context.WithCancel(context.Background()) + defer c() + + h := Client(t, ctx, func(c Configuration) Configuration { + c.S3.MaxListKeys = util.NewType[int64](32) + return c + }) + + testS3BucketFileHandling(t, ctx, h, 1024*1024) +} + +func Test_Flow_4194304(t *testing.T) { + ctx, c := context.WithCancel(context.Background()) + defer c() + + h := Client(t, ctx, func(c Configuration) Configuration { + c.S3.MaxListKeys = util.NewType[int64](32) + return c + }) + + testS3BucketFileHandling(t, ctx, h, 4*1024*1024) +} + +func testFileListing(t *testing.T, ctx context.Context, h pbStorageV2.StorageV2Client) { + prefix := fmt.Sprintf("%s/", uuid.NewUUID()) + t.Run("List", func(t *testing.T) { + var files []string + + t.Run("RenderFileNames", func(t *testing.T) { + for i := 0; i < 128; i++ { + files = append(files, fmt.Sprintf("%sfile%04d", prefix, i)) + files = append(files, fmt.Sprintf("%spath%04d/file", prefix, i)) + } + }) + + sort.Strings(files) + + t.Logf("Files: %d", len(files)) + + data := make([]byte, 1024) + n, err := rand.Read(data) + require.NoError(t, err) + require.EqualValues(t, 1024, n) + + checksum := util.SHA256(data) + + t.Run("UploadAll", func(t *testing.T) { + util.ParallelProcess(func(in string) { + ds, err := pbStorageV2.Send(ctx, h, in, bytes.NewReader(data)) + require.NoError(t, err) + + require.NotNil(t, ds) + require.EqualValues(t, checksum, ds.GetChecksum()) + require.EqualValues(t, len(data), ds.GetBytes()) + }, 32, files) + }) + + t.Run("CheckAll", func(t *testing.T) { + util.ParallelProcess(func(in string) { + wr, err := h.HeadObject(ctx, &pbStorageV2.StorageV2HeadObjectRequest{ + Path: &pbStorageV2.StorageV2Path{Path: in}, + }) + require.NoError(t, err) + require.NotNil(t, wr) + + require.EqualValues(t, len(data), wr.GetInfo().GetSize()) + }, 32, files) + }) + + t.Run("List", func(t *testing.T) { + revcFiles, err := pbStorageV2.List(ctx, h, prefix) + require.NoError(t, err) + + require.Len(t, revcFiles, len(files)) + + for id := range files { + require.EqualValues(t, files[id], revcFiles[id].GetPath().GetPath()) + require.EqualValues(t, revcFiles[id].GetInfo().GetSize(), len(data)) + } + }) + + t.Run("ListSubFolder", func(t *testing.T) { + revcFiles, err := pbStorageV2.List(ctx, h, fmt.Sprintf("%spath0000/", prefix)) + require.NoError(t, err) + + require.Len(t, revcFiles, 1) + + require.EqualValues(t, fmt.Sprintf("%spath0000/file", prefix), revcFiles[0].GetPath().GetPath()) + require.EqualValues(t, len(data), revcFiles[0].GetInfo().GetSize()) + }) + + t.Run("ListMisSubFolder", func(t *testing.T) { + revcFiles, err := pbStorageV2.List(ctx, h, fmt.Sprintf("%snon-existent/", prefix)) + require.NoError(t, err) + + require.Len(t, revcFiles, 0) + }) + + t.Run("DeleteAll", func(t *testing.T) { + util.ParallelProcess(func(in string) { + wr, err := h.DeleteObject(ctx, &pbStorageV2.StorageV2DeleteObjectRequest{ + Path: &pbStorageV2.StorageV2Path{Path: in}, + }) + require.NoError(t, err) + require.NotNil(t, wr) + }, 32, files) + }) + }) +} + +func testS3BucketFileHandling(t *testing.T, ctx context.Context, h pbStorageV2.StorageV2Client, size int) { + t.Run(fmt.Sprintf("Size:%d", size), func(t *testing.T) { + prefix := fmt.Sprintf("%s/", uuid.NewUUID()) + name := fmt.Sprintf("%stest.local", prefix) + nameTwo := fmt.Sprintf("%stest.local.two", prefix) + t.Logf("File: %s", name) + + dataOne := make([]byte, size) + + n, err := rand.Read(dataOne) + require.NoError(t, err) + require.EqualValues(t, size, n) + + checksumOne := util.SHA256(dataOne) + + dataTwo := make([]byte, size) + + n, err = rand.Read(dataTwo) + require.NoError(t, err) + require.EqualValues(t, size, n) + + checksumTwo := util.SHA256(dataTwo) + + t.Logf("Checksum One: %s", checksumOne) + t.Logf("Checksum Two: %s", checksumTwo) + + require.NotEqual(t, checksumTwo, checksumOne) + + t.Run("Check if object exists", func(t *testing.T) { + resp, err := h.HeadObject(ctx, &pbStorageV2.StorageV2HeadObjectRequest{ + Path: &pbStorageV2.StorageV2Path{Path: name}, + }) + + require.EqualValues(t, codes.NotFound, errors.GRPCCode(err)) + require.Nil(t, resp) + }) + + t.Run("Send Object", func(t *testing.T) { + ds, err := pbStorageV2.Send(ctx, h, name, bytes.NewReader(dataOne)) + require.NoError(t, err) + + require.NotNil(t, ds) + require.EqualValues(t, checksumOne, ds.GetChecksum()) + require.EqualValues(t, len(dataOne), ds.GetBytes()) + }) + + t.Run("Re-Check if object exists", func(t *testing.T) { + resp, err := h.HeadObject(ctx, &pbStorageV2.StorageV2HeadObjectRequest{ + Path: &pbStorageV2.StorageV2Path{Path: name}, + }) + + require.EqualValues(t, codes.OK, errors.GRPCCode(err)) + require.NotNil(t, resp) + + require.EqualValues(t, len(dataOne), resp.GetInfo().GetSize()) + }) + + t.Run("Download Object", func(t *testing.T) { + data := bytes.NewBuffer(nil) + n, err := pbStorageV2.Receive(ctx, h, name, data) + require.NoError(t, err) + require.EqualValues(t, n, size) + + pdata := data.Bytes() + + require.Len(t, pdata, size) + + pchecksum := util.SHA256(pdata) + require.EqualValues(t, checksumOne, pchecksum) + }) + + t.Run("Re-Send Object", func(t *testing.T) { + ds, err := pbStorageV2.Send(ctx, h, name, bytes.NewReader(dataTwo)) + require.NoError(t, err) + + require.NotNil(t, ds) + require.EqualValues(t, checksumTwo, ds.GetChecksum()) + require.EqualValues(t, len(dataTwo), ds.GetBytes()) + }) + + t.Run("List Objects", func(t *testing.T) { + revcFiles, err := pbStorageV2.List(ctx, h, "/") + require.NoError(t, err) + + t.Logf("Size: %d", len(revcFiles)) + }) + + t.Run("Send Second Object", func(t *testing.T) { + ds, err := pbStorageV2.Send(ctx, h, nameTwo, bytes.NewReader(dataOne)) + require.NoError(t, err) + + require.NotNil(t, ds) + require.EqualValues(t, checksumOne, ds.GetChecksum()) + require.EqualValues(t, len(dataOne), ds.GetBytes()) + }) + + t.Run("Re-Download Object", func(t *testing.T) { + data := bytes.NewBuffer(nil) + n, err := pbStorageV2.Receive(ctx, h, name, data) + require.NoError(t, err) + require.EqualValues(t, n, size) + + pdata := data.Bytes() + + require.Len(t, pdata, size) + + pchecksum := util.SHA256(pdata) + require.EqualValues(t, checksumTwo, pchecksum) + }) + + t.Run("Delete Object", func(t *testing.T) { + wr, err := h.DeleteObject(ctx, &pbStorageV2.StorageV2DeleteObjectRequest{ + Path: &pbStorageV2.StorageV2Path{Path: name}, + }) + require.NoError(t, err) + require.NotNil(t, wr) + }) + + t.Run("Delete Second Object", func(t *testing.T) { + wr, err := h.DeleteObject(ctx, &pbStorageV2.StorageV2DeleteObjectRequest{ + Path: &pbStorageV2.StorageV2Path{Path: nameTwo}, + }) + require.NoError(t, err) + require.NotNil(t, wr) + }) + + t.Run("Re-Check if deleted object exists", func(t *testing.T) { + resp, err := h.HeadObject(ctx, &pbStorageV2.StorageV2HeadObjectRequest{ + Path: &pbStorageV2.StorageV2Path{Path: name}, + }) + + require.EqualValues(t, codes.NotFound, errors.GRPCCode(err)) + require.Nil(t, resp) + }) + + t.Run("Download Deleted Object", func(t *testing.T) { + wr, err := h.ReadObject(ctx, &pbStorageV2.StorageV2ReadObjectRequest{ + Path: &pbStorageV2.StorageV2Path{Path: name}, + }) + require.NoError(t, err) + + resp, err := wr.Recv() + require.EqualValues(t, codes.NotFound, errors.GRPCCode(err)) + require.Nil(t, resp) + }) + + t.Run("Delete Deleted Object", func(t *testing.T) { + wr, err := h.DeleteObject(ctx, &pbStorageV2.StorageV2DeleteObjectRequest{ + Path: &pbStorageV2.StorageV2Path{Path: name}, + }) + require.NoError(t, err) + require.NotNil(t, wr) + }) + }) +} diff --git a/integrations/storage/v2/suite_test.go b/integrations/storage/v2/suite_test.go new file mode 100644 index 000000000..5e48a1d5f --- /dev/null +++ b/integrations/storage/v2/suite_test.go @@ -0,0 +1,76 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2 + +import ( + "context" + _ "embed" + "fmt" + "testing" + + "github.com/stretchr/testify/require" + "k8s.io/apimachinery/pkg/util/uuid" + + pbStorageV2 "github.com/arangodb/kube-arangodb/integrations/storage/v2/definition" + pbImplStorageV2SharedS3 "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared/s3" + "github.com/arangodb/kube-arangodb/pkg/logging" + "github.com/arangodb/kube-arangodb/pkg/util/svc" + "github.com/arangodb/kube-arangodb/pkg/util/tests" + "github.com/arangodb/kube-arangodb/pkg/util/tests/tgrpc" +) + +func getClient(t *testing.T, mods ...Mod) Configuration { + var scfg pbImplStorageV2SharedS3.Configuration + + scfg.Client = tests.GetAWSClientConfig(t) + scfg.BucketName = tests.GetAWSS3Bucket(t) + scfg.BucketPrefix = fmt.Sprintf("test/%s/", uuid.NewUUID()) + + var cfg Configuration + + cfg.Type = ConfigurationTypeS3 + cfg.S3 = scfg + + return cfg.With(mods...) +} + +func init() { + logging.Global().ApplyLogLevels(map[string]logging.Level{ + logging.TopicAll: logging.Debug, + }) +} + +func Handler(t *testing.T, mods ...Mod) svc.Handler { + handler, err := New(getClient(t).With(mods...)) + require.NoError(t, err) + + return handler +} + +func Client(t *testing.T, ctx context.Context, mods ...Mod) pbStorageV2.StorageV2Client { + local := svc.NewService(svc.Configuration{ + Address: "127.0.0.1:0", + }, Handler(t, mods...)) + + start := local.Start(ctx) + + return tgrpc.NewGRPCClient(t, ctx, pbStorageV2.NewStorageV2Client, start.Address()) +} diff --git a/internal/actions.go b/internal/actions.go index c8ac14958..8c0ae98e5 100644 --- a/internal/actions.go +++ b/internal/actions.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -32,9 +32,9 @@ import ( meta "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/yaml" - "github.com/arangodb/kube-arangodb/internal/md" api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/pretty" "github.com/arangodb/kube-arangodb/pkg/util/strings" ) @@ -350,20 +350,19 @@ func RenderActions(root string) error { { actions := path.Join(root, "docs", "generated", "actions.md") - action := md.NewColumn("Action", md.ColumnCenterAlign) - timeout := md.NewColumn("Timeout", md.ColumnCenterAlign) - description := md.NewColumn("Description", md.ColumnCenterAlign) - internal := md.NewColumn("Internal", md.ColumnCenterAlign) - optional := md.NewColumn("Optional", md.ColumnCenterAlign) - edition := md.NewColumn("Edition", md.ColumnCenterAlign) - t := md.NewTable( - action, - internal, - timeout, - optional, - edition, - description, - ) + type actionRow struct { + Action string `table:"Action" table_align:"center"` + Internal string `table:"Internal" table_align:"center"` + Timeout string `table:"Timeout" table_align:"center"` + Optional string `table:"Optional" table_align:"center"` + Edition string `table:"Edition" table_align:"center"` + Description string `table:"Description" table_align:"center"` + } + + out, err := pretty.NewTable[actionRow]() + if err != nil { + return err + } for _, k := range in.Keys() { name := k @@ -390,16 +389,14 @@ func RenderActions(root string) error { opt = "no" } - if err := t.AddRow(map[md.Column]string{ - action: name, - timeout: v, - description: a.Description, - edition: vr, - optional: opt, - internal: int, - }); err != nil { - return err - } + out.Add(actionRow{ + Action: name, + Timeout: v, + Description: a.Description, + Internal: int, + Optional: opt, + Edition: vr, + }) } timeouts := api.ActionTimeouts{} @@ -424,9 +421,9 @@ func RenderActions(root string) error { return err } - if err := md.ReplaceSectionsInFile(actions, map[string]string{ - "actionsTable": md.WrapWithNewLines(t.Render()), - "actionsModYaml": md.WrapWithNewLines(md.WrapWithYAMLSegment(string(d))), + if err := pretty.ReplaceSectionsInFile(actions, map[string]string{ + "actionsTable": pretty.WrapWithNewLines(out.RenderMarkdown()), + "actionsModYaml": pretty.WrapWithNewLines(pretty.WrapWithYAMLSegment(string(d))), }); err != nil { return err } diff --git a/internal/cr_validation_test.go b/internal/cr_validation_test.go index c376d4c4d..4b6907ab4 100644 --- a/internal/cr_validation_test.go +++ b/internal/cr_validation_test.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2023-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -41,6 +41,7 @@ import ( mlApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" mlApi "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" replicationv1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v1" replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1" schedulerApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1" @@ -75,7 +76,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { // CR file prefix -> packages to parse -> versions -> obj input := map[string]map[string]map[string]genSpec{ "apps-job": { - fmt.Sprintf("%s/pkg/apis/apps/v1", root): { + fmt.Sprintf("%s/pkg/apis/apps", root): { "v1": { objects: map[string]interface{}{ "spec": appsv1.ArangoJob{}.Spec, @@ -84,47 +85,30 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "backups-backup": { - fmt.Sprintf("%s/pkg/apis/backup/v1", root): { + fmt.Sprintf("%s/pkg/apis/backup", root): { "v1": { objects: map[string]interface{}{ "spec": backupv1.ArangoBackup{}.Spec, }, }, - "v1alpha": { - objects: map[string]interface{}{ - "spec": backupv1.ArangoBackup{}.Spec, - }, - }, }, }, "backups-backuppolicy": { - fmt.Sprintf("%s/pkg/apis/backup/v1", root): { + fmt.Sprintf("%s/pkg/apis/backup", root): { "v1": { objects: map[string]interface{}{ "spec": backupv1.ArangoBackupPolicy{}.Spec, }, }, - "v1alpha": { - objects: map[string]interface{}{ - "spec": backupv1.ArangoBackupPolicy{}.Spec, - }, - }, }, }, "database-deployment": { - fmt.Sprintf("%s/pkg/apis/deployment/v1", root): { + fmt.Sprintf("%s/pkg/apis/deployment", root): { "v1": { objects: map[string]interface{}{ "spec": deploymentv1.ArangoDeployment{}.Spec, }, }, - "v1alpha": { - objects: map[string]interface{}{ - "spec": deploymentv1.ArangoDeployment{}.Spec, - }, - }, - }, - fmt.Sprintf("%s/pkg/apis/deployment/v2alpha1", root): { "v2alpha1": { objects: map[string]interface{}{ "spec": deploymentv2alpha1.ArangoDeployment{}.Spec, @@ -133,14 +117,12 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "database-member": { - fmt.Sprintf("%s/pkg/apis/deployment/v1", root): { + fmt.Sprintf("%s/pkg/apis/deployment", root): { "v1": { objects: map[string]interface{}{ "spec": deploymentv1.ArangoMember{}.Spec, }, }, - }, - fmt.Sprintf("%s/pkg/apis/deployment/v2alpha1", root): { "v2alpha1": { objects: map[string]interface{}{ "spec": deploymentv2alpha1.ArangoMember{}.Spec, @@ -149,14 +131,12 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "database-clustersynchronization": { - fmt.Sprintf("%s/pkg/apis/deployment/v1", root): { + fmt.Sprintf("%s/pkg/apis/deployment", root): { "v1": { objects: map[string]interface{}{ "spec": deploymentv1.ArangoClusterSynchronization{}.Spec, }, }, - }, - fmt.Sprintf("%s/pkg/apis/deployment/v2alpha1", root): { "v2alpha1": { objects: map[string]interface{}{ "spec": deploymentv2alpha1.ArangoClusterSynchronization{}.Spec, @@ -165,19 +145,12 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "database-task": { - fmt.Sprintf("%s/pkg/apis/deployment/v1", root): { + fmt.Sprintf("%s/pkg/apis/deployment", root): { "v1": { objects: map[string]interface{}{ "spec": deploymentv1.ArangoTask{}.Spec, }, }, - "v1alpha": { - objects: map[string]interface{}{ - "spec": deploymentv1.ArangoTask{}.Spec, - }, - }, - }, - fmt.Sprintf("%s/pkg/apis/deployment/v2alpha1", root): { "v2alpha1": { objects: map[string]interface{}{ "spec": deploymentv2alpha1.ArangoTask{}.Spec, @@ -186,19 +159,12 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "replication-deploymentreplication": { - fmt.Sprintf("%s/pkg/apis/replication/v1", root): { + fmt.Sprintf("%s/pkg/apis/replication", root): { "v1": { objects: map[string]interface{}{ "spec": replicationv1.ArangoDeploymentReplication{}.Spec, }, }, - "v1alpha": { - objects: map[string]interface{}{ - "spec": replicationv1.ArangoDeploymentReplication{}.Spec, - }, - }, - }, - fmt.Sprintf("%s/pkg/apis/replication/v2alpha1", root): { "v2alpha1": { objects: map[string]interface{}{ "spec": replicationv2alpha1.ArangoDeploymentReplication{}.Spec, @@ -207,7 +173,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "storage-localstorage": { - fmt.Sprintf("%s/pkg/apis/storage/v1alpha", root): { + fmt.Sprintf("%s/pkg/apis/storage", root): { "v1alpha": { objects: map[string]interface{}{ "spec": storagev1alpha.ArangoLocalStorage{}.Spec, @@ -216,7 +182,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "scheduler-profile": { - fmt.Sprintf("%s/pkg/apis/scheduler/v1alpha1", root): { + fmt.Sprintf("%s/pkg/apis/scheduler", root): { "v1alpha1": { objects: map[string]interface{}{ "spec": schedulerApiv1alpha1.ArangoProfile{}.Spec, @@ -230,7 +196,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "scheduler-pod": { - fmt.Sprintf("%s/pkg/apis/scheduler/v1alpha1", root): { + fmt.Sprintf("%s/pkg/apis/scheduler", root): { "v1beta1": { objects: map[string]interface{}{ "spec": schedulerApi.ArangoSchedulerPod{}.Spec, @@ -239,7 +205,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "scheduler-deployment": { - fmt.Sprintf("%s/pkg/apis/scheduler/v1alpha1", root): { + fmt.Sprintf("%s/pkg/apis/scheduler", root): { "v1beta1": { objects: map[string]interface{}{ "spec": schedulerApi.ArangoSchedulerDeployment{}.Spec, @@ -248,7 +214,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "scheduler-batchjob": { - fmt.Sprintf("%s/pkg/apis/scheduler/v1alpha1", root): { + fmt.Sprintf("%s/pkg/apis/scheduler", root): { "v1beta1": { objects: map[string]interface{}{ "spec": schedulerApi.ArangoSchedulerBatchJob{}.Spec, @@ -257,7 +223,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "scheduler-cronjob": { - fmt.Sprintf("%s/pkg/apis/scheduler/v1alpha1", root): { + fmt.Sprintf("%s/pkg/apis/scheduler", root): { "v1beta1": { objects: map[string]interface{}{ "spec": schedulerApi.ArangoSchedulerCronJob{}.Spec, @@ -266,7 +232,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "ml-extension": { - fmt.Sprintf("%s/pkg/apis/ml/v1alpha1", root): { + fmt.Sprintf("%s/pkg/apis/ml", root): { "v1alpha1": { objects: map[string]interface{}{ "spec": mlApiv1alpha1.ArangoMLExtension{}.Spec, @@ -280,7 +246,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "ml-storage": { - fmt.Sprintf("%s/pkg/apis/ml/v1alpha1", root): { + fmt.Sprintf("%s/pkg/apis/ml", root): { "v1alpha1": { objects: map[string]interface{}{ "spec": mlApiv1alpha1.ArangoMLStorage{}.Spec, @@ -294,7 +260,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "ml-job-cron": { - fmt.Sprintf("%s/pkg/apis/ml/v1alpha1", root): { + fmt.Sprintf("%s/pkg/apis/ml", root): { "v1alpha1": { objects: map[string]interface{}{ "spec": mlApiv1alpha1.ArangoMLCronJob{}.Spec, @@ -303,7 +269,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "ml-job-batch": { - fmt.Sprintf("%s/pkg/apis/ml/v1alpha1", root): { + fmt.Sprintf("%s/pkg/apis/ml", root): { "v1alpha1": { objects: map[string]interface{}{ "spec": mlApiv1alpha1.ArangoMLBatchJob{}.Spec, @@ -312,7 +278,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "analytics-graphanalyticsengine": { - fmt.Sprintf("%s/pkg/apis/analytics/v1alpha1", root): { + fmt.Sprintf("%s/pkg/apis/analytics", root): { "v1alpha1": { objects: map[string]interface{}{ "spec": analyticsApi.GraphAnalyticsEngine{}.Spec, @@ -321,7 +287,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "networking-route": { - fmt.Sprintf("%s/pkg/apis/networking/v1alpha1", root): { + fmt.Sprintf("%s/pkg/apis/networking", root): { "v1alpha1": { objects: map[string]interface{}{ "spec": networkingApi.ArangoRoute{}.Spec, @@ -329,6 +295,24 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, }, + "platform-storage": { + fmt.Sprintf("%s/pkg/apis/platform", root): { + "v1alpha1": { + objects: map[string]interface{}{ + "spec": platformApi.ArangoPlatformStorage{}.Spec, + }, + }, + }, + }, + "platform-chart": { + fmt.Sprintf("%s/pkg/apis/platform", root): { + "v1alpha1": { + objects: map[string]interface{}{ + "spec": platformApi.ArangoPlatformChart{}.Spec, + }, + }, + }, + }, } for filePrefix, packagesToVersion := range input { @@ -343,14 +327,14 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { validationPerVersion := make(map[string]apiextensions.CustomResourceValidation, len(packagesToVersion)) for apiDir, versionMap := range packagesToVersion { - fields := parseSourceFiles(t, root, fset, apiDir) + for version, generationSpec := range versionMap { + fields := parseSourceFiles(t, root, fset, path.Join(apiDir, version)) - for n, f := range sharedFields { - require.NotContains(t, fields, n) - fields[n] = f - } + for n, f := range sharedFields { + require.NotContains(t, fields, n) + fields[n] = f + } - for version, generationSpec := range versionMap { crdVersion := findCRDVersion(t, crd, version) t.Log(crdVersion.Schema) diff --git a/internal/docs_test.go b/internal/docs_test.go index 291fce799..7e1ef4938 100644 --- a/internal/docs_test.go +++ b/internal/docs_test.go @@ -45,6 +45,7 @@ import ( mlApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" mlApi "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" replicationApi "github.com/arangodb/kube-arangodb/pkg/apis/replication/v1" schedulerApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1" schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" @@ -347,6 +348,21 @@ func Test_GenerateAPIDocs(t *testing.T) { }, }, }, + "platform": map[string]inputPackage{ + "v1alpha1": { + Types: inputPackageTypes{ + "ArangoPlatformStorage.V1Alpha1": { + "Spec": platformApi.ArangoPlatformStorage{}.Spec, + }, + "ArangoPlatformChart.V1Alpha1": { + "Spec": platformApi.ArangoPlatformChart{}.Spec, + }, + }, + Shared: []string{ + "shared/v1", + }, + }, + }, } for name, versions := range input { diff --git a/internal/features.yaml b/internal/features.yaml index fddd3f509..2f13c1a59 100644 --- a/internal/features.yaml +++ b/internal/features.yaml @@ -140,9 +140,17 @@ features: doc: docs/features/failover_leader_service.md flag: --deployment.feature.failover-leadership enabled: false + arangoDBVersion: "< 3.12.0" releases: - operatorVersion: 1.2.13 state: Production + - name: ActiveFailover Support + flag: --deployment.feature.active-failover + enabled: true + arangoDBVersion: "< 3.12.0" + releases: + - operatorVersion: 1.0.0 + state: Production - name: Spec Default Restore doc: docs/features/deployment_spec_defaults.md flag: --deployment.feature.deployment-spec-defaults-restore diff --git a/internal/md/column.go b/internal/md/column.go deleted file mode 100644 index 10b7d85fa..000000000 --- a/internal/md/column.go +++ /dev/null @@ -1,76 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package md - -import "k8s.io/apimachinery/pkg/util/uuid" - -type ColumnAlign int - -const ( - ColumnRightAlign ColumnAlign = iota - ColumnCenterAlign - ColumnLeftAlign -) - -type Columns []Column - -func (c Columns) Get(id string) (Column, bool) { - for _, z := range c { - if z.ID() == id { - return z, true - } - } - - return nil, false -} - -type Column interface { - Name() string - Align() ColumnAlign - - ID() string -} - -func NewColumn(name string, align ColumnAlign) Column { - return column{ - name: name, - id: string(uuid.NewUUID()), - align: align, - } -} - -type column struct { - name string - id string - align ColumnAlign -} - -func (c column) ID() string { - return c.id -} - -func (c column) Name() string { - return c.name -} - -func (c column) Align() ColumnAlign { - return c.align -} diff --git a/internal/md/table.go b/internal/md/table.go deleted file mode 100644 index 854b5c3b6..000000000 --- a/internal/md/table.go +++ /dev/null @@ -1,145 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package md - -import ( - "sync" - - "github.com/arangodb/kube-arangodb/pkg/util/errors" -) - -func NewTable(columns ...Column) Table { - return &table{ - columns: columns, - } -} - -type Table interface { - Render() string - - AddRow(in map[Column]string) error -} - -type table struct { - lock sync.Mutex - - columns Columns - rows []map[string]string -} - -func (t *table) AddRow(in map[Column]string) error { - t.lock.Lock() - defer t.lock.Unlock() - - r := map[string]string{} - - for k, v := range in { - if _, ok := t.columns.Get(k.ID()); !ok { - return errors.Errorf("Column not found") - } - - r[k.ID()] = v - } - - t.rows = append(t.rows, r) - - return nil -} - -func (t *table) fillString(base, filler string, align ColumnAlign, size int) string { - for len(base) < size { - switch align { - case ColumnLeftAlign: - base += filler - case ColumnRightAlign: - base = filler + base - case ColumnCenterAlign: - base += filler - if len(base) < size { - base = filler + base - } - } - } - - return base -} - -func (t *table) Render() string { - t.lock.Lock() - defer t.lock.Unlock() - - ks := map[string]int{} - - for _, c := range t.columns { - ks[c.ID()] = len(c.Name()) - } - - for _, r := range t.rows { - for _, c := range t.columns { - if q := len(r[c.ID()]); q > ks[c.ID()] { - ks[c.ID()] = q - } - } - } - - buff := "" - - buff += "|" - - for _, c := range t.columns { - buff += " " - buff += t.fillString(c.Name(), " ", c.Align(), ks[c.ID()]) - buff += " |" - } - buff += "\n|" - - for _, c := range t.columns { - switch c.Align() { - case ColumnLeftAlign, ColumnCenterAlign: - buff += ":" - default: - buff += "-" - } - - buff += t.fillString("", "-", ColumnLeftAlign, ks[c.ID()]) - switch c.Align() { - case ColumnRightAlign, ColumnCenterAlign: - buff += ":" - default: - buff += "-" - } - buff += "|" - } - buff += "\n" - - for _, r := range t.rows { - buff += "|" - - for _, c := range t.columns { - buff += " " - buff += t.fillString(r[c.ID()], " ", c.Align(), ks[c.ID()]) - buff += " |" - } - buff += "\n" - } - - return buff -} diff --git a/internal/metrics.go b/internal/metrics.go index a72a7b150..a241c0276 100644 --- a/internal/metrics.go +++ b/internal/metrics.go @@ -28,7 +28,7 @@ import ( "path" "sort" - "github.com/arangodb/kube-arangodb/internal/md" + "github.com/arangodb/kube-arangodb/pkg/util/pretty" "github.com/arangodb/kube-arangodb/pkg/util/strings" ) @@ -155,38 +155,40 @@ func GenerateMetricsDocumentation(root string, in MetricsDoc) error { } func generateMetricFile(root, name string, m Metric) error { - key := md.NewColumn("Label", md.ColumnCenterAlign) - description := md.NewColumn("Description", md.ColumnLeftAlign) - priority := md.NewColumn("Priority", md.ColumnCenterAlign) - query := md.NewColumn("Query", md.ColumnCenterAlign) - t := md.NewTable( - key, - description, - ) + type tableRowLabels struct { + Label string `table:"Label" table_align:"center"` + Description string `table:"Description" table_align:"left"` + } + type tableRowPriority struct { + Priority string `table:"Priority" table_align:"center"` + Query string `table:"Query" table_align:"center"` + Description string `table:"Description" table_align:"left"` + } - for _, l := range m.Labels { - if err := t.AddRow(map[md.Column]string{ - key: l.Key, - description: l.Description, - }); err != nil { - return err - } + t, err := pretty.NewTable[tableRowLabels]() + if err != nil { + return err + } + + ta, err := pretty.NewTable[tableRowPriority]() + if err != nil { + return err } - ta := md.NewTable( - priority, - query, - description, - ) + for _, l := range m.Labels { + t.Add(tableRowLabels{ + Label: l.Key, + Description: l.Description, + }) + } for _, l := range m.AlertingRules { - if err := ta.AddRow(map[md.Column]string{ - priority: l.Priority, - query: l.Query, - description: l.Description, - }); err != nil { - return err - } + //nolint:all + ta.Add(tableRowPriority{ + Priority: l.Priority, + Query: l.Query, + Description: l.Description, + }) } q, err := template.New("metrics").Parse(string(metricItemTemplate)) @@ -203,9 +205,9 @@ func generateMetricFile(root, name string, m Metric) error { "name": name, "type": m.Type, "description": m.Description, - "labels_table": t.Render(), + "labels_table": t.RenderMarkdown(), "labels": len(m.Labels) > 0, - "alerting_table": ta.Render(), + "alerting_table": ta.RenderMarkdown(), "alerting": len(m.AlertingRules) > 0, }); err != nil { return err @@ -219,18 +221,18 @@ func generateMetricFile(root, name string, m Metric) error { } func generateMetricsREADME(root string, in MetricsDoc) error { - name := md.NewColumn("Name", md.ColumnCenterAlign) - ns := md.NewColumn("Namespace", md.ColumnCenterAlign) - group := md.NewColumn("Group", md.ColumnCenterAlign) - typeCol := md.NewColumn("Type", md.ColumnCenterAlign) - description := md.NewColumn("Description", md.ColumnLeftAlign) - t := md.NewTable( - name, - ns, - group, - typeCol, - description, - ) + type tableRow struct { + Name string `table:"Name" table_align:"center"` + Namespace string `table:"Namespace" table_align:"center"` + Group string `table:"Group" table_align:"center"` + Type string `table:"Type" table_align:"center"` + Description string `table:"Description" table_align:"left"` + } + + t, err := pretty.NewTable[tableRow]() + if err != nil { + return err + } for _, namespace := range in.Namespaces.Keys() { for _, g := range in.Namespaces[namespace].Keys() { @@ -240,15 +242,13 @@ func generateMetricsREADME(root string, in MetricsDoc) error { details := in.Namespaces[namespace][g][metric] - if err := t.AddRow(map[md.Column]string{ - name: rname, - ns: namespace, - group: g, - description: details.ShortDescription, - typeCol: details.Type, - }); err != nil { - return err - } + t.Add(tableRow{ + Name: rname, + Namespace: namespace, + Group: g, + Type: details.Type, + Description: details.ShortDescription, + }) if err := generateMetricFile(root, mname, details); err != nil { return err @@ -257,8 +257,8 @@ func generateMetricsREADME(root string, in MetricsDoc) error { } } - if err := md.ReplaceSectionsInFile(path.Join(root, "README.md"), map[string]string{ - "metricsTable": md.WrapWithNewLines(t.Render()), + if err := pretty.ReplaceSectionsInFile(path.Join(root, "README.md"), map[string]string{ + "metricsTable": pretty.WrapWithNewLines(t.RenderMarkdown()), }); err != nil { return err } diff --git a/internal/readme.go b/internal/readme.go index 7ce37fb12..2f97ccbc6 100644 --- a/internal/readme.go +++ b/internal/readme.go @@ -35,9 +35,9 @@ import ( "github.com/arangodb/go-driver" "github.com/arangodb/kube-arangodb/cmd" - "github.com/arangodb/kube-arangodb/internal/md" "github.com/arangodb/kube-arangodb/pkg/deployment/features" "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/pretty" ) type PlatformsDoc struct { @@ -137,7 +137,7 @@ func GenerateReadme(root string) error { readmeSections["operatorArguments"] = section } - if err := md.ReplaceSectionsInFile(path.Join(root, "README.md"), readmeSections); err != nil { + if err := pretty.ReplaceSectionsInFile(path.Join(root, "README.md"), readmeSections); err != nil { return err } @@ -162,7 +162,7 @@ func GenerateHelp(cmd *cobra.Command, args ...string) (string, error) { lines = append(lines, "```") - return md.WrapWithNewLines(md.WrapWithNewLines(strings.Join(lines, "\n"))), nil + return pretty.WrapWithNewLines(pretty.WrapWithNewLines(strings.Join(lines, "\n"))), nil } func GenerateHelpQuoted(cmd *cobra.Command, args ...string) (string, error) { @@ -189,26 +189,22 @@ func GenerateHelpRaw(cmd *cobra.Command, args ...string) (string, error) { } func GenerateReadmeFeatures(root, basePath string, eeOnly bool) (string, error) { - feature := md.NewColumn("Feature", md.ColumnLeftAlign) - introduced := md.NewColumn("Introduced", md.ColumnLeftAlign) - oVersion := md.NewColumn("Operator Version", md.ColumnLeftAlign) - aVersion := md.NewColumn("ArangoDB Version", md.ColumnLeftAlign) - aEdition := md.NewColumn("ArangoDB Edition", md.ColumnLeftAlign) - state := md.NewColumn("State", md.ColumnLeftAlign) - enabled := md.NewColumn("Enabled", md.ColumnLeftAlign) - flag := md.NewColumn("Flag", md.ColumnLeftAlign) - remarks := md.NewColumn("Remarks", md.ColumnLeftAlign) - t := md.NewTable( - feature, - oVersion, - introduced, - aVersion, - aEdition, - state, - enabled, - flag, - remarks, - ) + type tableRow struct { + Feature string `table:"Feature" table_align:"left"` + OperatorVersion string `table:"Operator Version" table_align:"left"` + Introduced string `table:"Introduced" table_align:"left"` + ArangoDBVersion string `table:"ArangoDB Version" table_align:"left"` + ArangoDBEdition string `table:"ArangoDB Edition" table_align:"left"` + State string `table:"State" table_align:"left"` + Enabled string `table:"Enabled" table_align:"left"` + Flag string `table:"Flag" table_align:"left"` + Remarks string `table:"Remarks" table_align:"left"` + } + + tb, err := pretty.NewTable[tableRow]() + if err != nil { + return "", err + } var d FeaturesDoc @@ -266,36 +262,33 @@ func GenerateReadmeFeatures(root, basePath string, eeOnly bool) (string, error) n = fmt.Sprintf("[%s](%s)", n, p) } - if err := t.AddRow(map[md.Column]string{ - feature: n, - oVersion: util.TypeOrDefault[string](util.First(r.OperatorVersion, f.OperatorVersion), "ANY"), - introduced: util.TypeOrDefault[string](f.Releases[0].OperatorVersion, "ANY"), - aVersion: util.TypeOrDefault[string](util.First(r.ArangoDBVersion, f.ArangoDBVersion), fmt.Sprintf(">= %s", features.MinSupportedArangoDBVersion)), - aEdition: util.TypeOrDefault[string](util.First(r.ArangoDBEdition, f.ArangoDBEdition), "Community, Enterprise"), - aEdition: util.TypeOrDefault[string](util.First(r.ArangoDBEdition, f.ArangoDBEdition), "Community, Enterprise"), - state: util.TypeOrDefault[string](util.First(r.State, f.State), "Alpha"), - enabled: util.BoolSwitch[string](util.TypeOrDefault[bool](util.First(r.Enabled, f.Enabled), true), "True", "False"), - flag: util.TypeOrDefault[string](util.First(r.Flag, f.Flag), "N/A"), - remarks: util.TypeOrDefault[string](util.First(r.Remarks, f.Remarks), "N/A"), - }); err != nil { - return "", err - } + tb.Add(tableRow{ + Feature: n, + Introduced: util.TypeOrDefault[string](f.Releases[0].OperatorVersion, "ANY"), + OperatorVersion: util.TypeOrDefault[string](util.First(r.OperatorVersion, f.OperatorVersion)), + ArangoDBVersion: util.TypeOrDefault[string](util.First(r.ArangoDBVersion, f.ArangoDBVersion), fmt.Sprintf(">= %s", features.MinSupportedArangoDBVersion)), + ArangoDBEdition: util.TypeOrDefault[string](util.First(r.ArangoDBEdition, f.ArangoDBEdition), "Community, Enterprise"), + State: util.TypeOrDefault[string](util.First(r.State, f.State), "Alpha"), + Enabled: util.BoolSwitch[string](util.TypeOrDefault[bool](util.First(r.Enabled, f.Enabled), true), "True", "False"), + Flag: util.TypeOrDefault[string](util.First(r.Flag, f.Flag), "N/A"), + Remarks: util.TypeOrDefault[string](util.First(r.Remarks, f.Remarks), "N/A"), + }) } - return md.WrapWithNewLines(t.Render()), nil + return pretty.WrapWithNewLines(tb.RenderMarkdown()), nil } func GenerateReadmeLimits(root string) (string, error) { - limit := md.NewColumn("Limit", md.ColumnLeftAlign) - description := md.NewColumn("Description", md.ColumnLeftAlign) - community := md.NewColumn("Community", md.ColumnLeftAlign) - enterprise := md.NewColumn("Enterprise", md.ColumnLeftAlign) - t := md.NewTable( - limit, - description, - community, - enterprise, - ) + type tableRow struct { + Limit string `table:"Limit" table_align:"left"` + Description string `table:"Description" table_align:"left"` + Community string `table:"Community" table_align:"left"` + Enterprise string `table:"Enterprise" table_align:"left"` + } + tb, err := pretty.NewTable[tableRow]() + if err != nil { + return "", err + } var d LimitsDoc @@ -309,34 +302,30 @@ func GenerateReadmeLimits(root string) (string, error) { } for _, l := range d.Limits { - if err := t.AddRow(map[md.Column]string{ - limit: l.Name, - description: l.Description, - community: util.TypeOrDefault[string](l.Community, "N/A"), - enterprise: util.TypeOrDefault[string](l.Enterprise, "N/A"), - }); err != nil { - return "", err - } + tb.Add(tableRow{ + Limit: l.Name, + Description: l.Description, + Community: util.TypeOrDefault[string](l.Community, "N/A"), + Enterprise: util.TypeOrDefault[string](l.Enterprise, "N/A"), + }) } - return md.WrapWithNewLines(t.Render()), nil + return pretty.WrapWithNewLines(tb.RenderMarkdown()), nil } func GenerateReadmePlatforms(root string) (string, error) { - platform := md.NewColumn("Platform", md.ColumnLeftAlign) - kVersion := md.NewColumn("Kubernetes Version", md.ColumnLeftAlign) - aVersion := md.NewColumn("ArangoDB Version", md.ColumnLeftAlign) - state := md.NewColumn("State", md.ColumnLeftAlign) - remarks := md.NewColumn("Remarks", md.ColumnLeftAlign) - pRemarks := md.NewColumn("Provider Remarks", md.ColumnLeftAlign) - t := md.NewTable( - platform, - state, - kVersion, - aVersion, - remarks, - pRemarks, - ) + type tableRow struct { + Platform string `table:"Platform" table_align:"left"` + State string `table:"State" table_align:"left"` + KubernetesVersion string `table:"Kubernetes Version" table_align:"left"` + ArangoDBVersion string `table:"ArangoDB Version" table_align:"left"` + Remarks string `table:"Remarks" table_align:"left"` + ProviderRemarks string `table:"Provider Remarks" table_align:"left"` + } + tb, err := pretty.NewTable[tableRow]() + if err != nil { + return "", err + } var d PlatformsDoc @@ -355,18 +344,16 @@ func GenerateReadmePlatforms(root string) (string, error) { if id == 0 { n = p.Name } - if err := t.AddRow(map[md.Column]string{ - platform: n, - kVersion: util.TypeOrDefault[string](v.KubernetesVersion, ""), - aVersion: util.TypeOrDefault[string](v.ArangoDBVersion, ""), - state: util.TypeOrDefault[string](v.State, ""), - remarks: util.TypeOrDefault[string](v.Remarks, ""), - pRemarks: util.TypeOrDefault[string](v.ProviderRemarks, ""), - }); err != nil { - return "", err - } + tb.Add(tableRow{ + Platform: n, + KubernetesVersion: util.TypeOrDefault[string](v.KubernetesVersion, ""), + ArangoDBVersion: util.TypeOrDefault[string](v.ArangoDBVersion, ""), + State: util.TypeOrDefault[string](v.State, ""), + Remarks: util.TypeOrDefault[string](v.Remarks, ""), + ProviderRemarks: util.TypeOrDefault[string](v.ProviderRemarks, ""), + }) } } - return md.WrapWithNewLines(t.Render()), nil + return pretty.WrapWithNewLines(tb.RenderMarkdown()), nil } diff --git a/internal/readme_cli.go b/internal/readme_cli.go index 3e2e61c20..7bcbd2b0d 100644 --- a/internal/readme_cli.go +++ b/internal/readme_cli.go @@ -25,7 +25,7 @@ import ( "github.com/arangodb/kube-arangodb/cmd" "github.com/arangodb/kube-arangodb/cmd/integration" - "github.com/arangodb/kube-arangodb/internal/md" + "github.com/arangodb/kube-arangodb/pkg/util/pretty" ) func GenerateCLIArangoDBOperatorReadme(root string) error { @@ -37,7 +37,7 @@ func GenerateCLIArangoDBOperatorReadme(root string) error { readmeSections["arangodb_operator_cmd"] = section } - if err := md.ReplaceSectionsInFile(path.Join(root, "docs", "cli", "arangodb_operator.md"), readmeSections); err != nil { + if err := pretty.ReplaceSectionsInFile(path.Join(root, "docs", "cli", "arangodb_operator.md"), readmeSections); err != nil { return err } @@ -71,7 +71,13 @@ func GenerateCLIArangoDBOperatorOpsReadme(root string) error { readmeSections["arangodb_operator_ops_cmd_crd_generate"] = section } - if err := md.ReplaceSectionsInFile(path.Join(root, "docs", "cli", "arangodb_operator_ops.md"), readmeSections); err != nil { + if section, err := GenerateHelpQuoted(cmd.CommandOps(), "debug-package"); err != nil { + return err + } else { + readmeSections["arangodb_operator_ops_cmd_debug_package"] = section + } + + if err := pretty.ReplaceSectionsInFile(path.Join(root, "docs", "cli", "arangodb_operator_ops.md"), readmeSections); err != nil { return err } @@ -93,7 +99,7 @@ func GenerateCLIArangoDBOperatorIntegrationReadme(root string) error { readmeSections["arangodb_operator_integration_cmd_client"] = section } - if err := md.ReplaceSectionsInFile(path.Join(root, "docs", "cli", "arangodb_operator_integration.md"), readmeSections); err != nil { + if err := pretty.ReplaceSectionsInFile(path.Join(root, "docs", "cli", "arangodb_operator_integration.md"), readmeSections); err != nil { return err } diff --git a/internal/schema_builder_test.go b/internal/schema_builder_test.go index af82eb633..25056ab7d 100644 --- a/internal/schema_builder_test.go +++ b/internal/schema_builder_test.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2023-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -72,6 +72,9 @@ func (b *schemaBuilder) tryGetKubeOpenAPIV2Definitions(t *testing.T, obj interfa type openAPISchemaFormatGetter interface { OpenAPISchemaFormat() string } + type openApiSchemaV3OneOfTypes interface { + OpenAPIV3OneOfTypes() []string + } var typ, frmt string if o, ok := obj.(openAPISchemaTypeGetter); ok { strs := o.OpenAPISchemaType() @@ -90,6 +93,15 @@ func (b *schemaBuilder) tryGetKubeOpenAPIV2Definitions(t *testing.T, obj interfa } } + if o, ok := obj.(openApiSchemaV3OneOfTypes); ok { + if b.isV3IntOrString(o.OpenAPIV3OneOfTypes()) { + return &apiextensions.JSONSchemaProps{ + Type: typ, + XIntOrString: true, + } + } + } + return &apiextensions.JSONSchemaProps{ Type: typ, Format: frmt, @@ -98,6 +110,10 @@ func (b *schemaBuilder) tryGetKubeOpenAPIV2Definitions(t *testing.T, obj interfa return nil } +func (b *schemaBuilder) isV3IntOrString(types []string) bool { + return len(types) == 2 && util.ContainsList(types, "number") && util.ContainsList(types, "string") +} + func (b *schemaBuilder) openAPIDefToSchemaPros(t *testing.T, _ *openapi.OpenAPIDefinition) *apiextensions.JSONSchemaProps { require.Fail(t, "openAPIDefToSchemaPros is not implemented because there were no calls to this function. Add the impl if needed.") return nil diff --git a/manifests/arango-all.yaml b/manifests/arango-all.yaml index 0225b65c8..0a7a87c2b 100644 --- a/manifests/arango-all.yaml +++ b/manifests/arango-all.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -19,7 +19,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -31,7 +31,7 @@ metadata: name: arangolocalstorages.storage.arangodb.com labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -61,7 +61,7 @@ metadata: name: arango-all-operator-rbac-analytics labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -77,7 +77,7 @@ metadata: name: arango-all-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -93,7 +93,7 @@ metadata: name: arango-all-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -109,7 +109,7 @@ metadata: name: arango-all-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -181,7 +181,7 @@ metadata: name: arango-all-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -200,7 +200,7 @@ metadata: name: arango-all-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -219,7 +219,7 @@ metadata: name: arango-all-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -235,7 +235,7 @@ metadata: name: arango-all-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -251,7 +251,23 @@ metadata: name: arango-all-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +rules: + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: arango-all-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -267,7 +283,7 @@ metadata: name: arango-all-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -283,7 +299,7 @@ metadata: name: arango-all-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -311,7 +327,7 @@ metadata: name: arango-all-operator-rbac-analytics labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -331,7 +347,7 @@ metadata: name: arango-all-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -351,7 +367,7 @@ metadata: name: arango-all-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -371,7 +387,7 @@ metadata: name: arango-all-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -391,7 +407,7 @@ metadata: name: arango-all-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -411,7 +427,7 @@ metadata: name: arango-all-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -431,7 +447,7 @@ metadata: name: arango-all-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -451,7 +467,7 @@ metadata: name: arango-all-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -471,7 +487,7 @@ metadata: name: arango-all-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -484,6 +500,26 @@ subjects: name: arango-all-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: arango-all-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: arango-all-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-all-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -491,7 +527,7 @@ metadata: name: arango-all-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -511,7 +547,7 @@ metadata: name: arango-all-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -532,7 +568,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -570,7 +606,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -604,7 +640,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -621,7 +657,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -653,7 +689,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -670,7 +706,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -678,9 +714,6 @@ rules: - apiGroups: ["database.arangodb.com"] resources: ["arangodeployments", "arangodeployments/status", "arangomembers", "arangomembers/status"] verbs: ["*"] - - apiGroups: ["networking.arangodb.com"] - resources: ["arangoroutes", "arangoroutes/status"] - verbs: ["*"] - apiGroups: ["database.arangodb.com"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] verbs: ["*"] @@ -699,6 +732,9 @@ rules: - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["*"] + - apiGroups: ["platform.arangodb.com"] + resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + verbs: ["get", "list", "watch"] - apiGroups: ["backup.arangodb.com"] resources: ["arangobackuppolicies", "arangobackups"] verbs: ["get", "list", "watch"] @@ -714,7 +750,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -740,7 +776,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -769,7 +805,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -834,61 +870,37 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all rules: - - apiGroups: - - "ml.arangodb.com" - resources: - - "arangomlextensions" - - "arangomlextensions/status" - - "arangomlbatchjobs" - - "arangomlbatchjobs/status" - - "arangomlcronjobs" - - "arangomlcronjobs/status" - - "arangomlstorages" - - "arangomlstorages/status" - verbs: - - "*" - - apiGroups: - - "scheduler.arangodb.com" - resources: - - "arangoprofiles" - - "arangoprofiles/status" - verbs: - - "*" - - apiGroups: - - "database.arangodb.com" - resources: - - "arangodeployments" - verbs: - - "get" - - "list" - - "watch" - - apiGroups: - - "rbac.authorization.k8s.io" - resources: - - "roles" - - "rolebindings" - verbs: ["*"] - - apiGroups: - - "batch" - resources: - - "cronjobs" - - "jobs" - verbs: ["*"] - - apiGroups: ["apps"] - resources: - - "statefulsets" + - apiGroups: ["networking.arangodb.com"] + resources: ["arangoroutes", "arangoroutes/status"] verbs: ["*"] - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: arango-all-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +rules: + - apiGroups: ["platform.arangodb.com"] resources: - - "pods" - - "secrets" - - "services" - - "serviceaccounts" + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/status" verbs: ["*"] --- # Source: kube-arangodb/templates/scheduler-operator/role.yaml @@ -899,7 +911,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -959,7 +971,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -985,7 +997,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1006,7 +1018,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1026,7 +1038,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1047,7 +1059,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1068,7 +1080,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1089,7 +1101,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1110,7 +1122,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1131,7 +1143,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1152,7 +1164,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1173,7 +1185,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1186,6 +1198,27 @@ subjects: name: arango-all-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: arango-all-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: arango-all-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-all-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -1194,7 +1227,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1215,7 +1248,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1236,7 +1269,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1271,7 +1304,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1289,7 +1322,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1328,7 +1361,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --operator.deployment @@ -1341,6 +1374,7 @@ spec: - --operator.analytics - --operator.networking - --operator.scheduler + - --operator.platform - --operator.k2k-cluster-sync - --chaos.allowed=false env: @@ -1393,3 +1427,35 @@ spec: operator: "Exists" effect: "NoExecute" tolerationSeconds: 5 + +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/arango-apps.yaml b/manifests/arango-apps.yaml index 003fd70ce..b2f2be54b 100644 --- a/manifests/arango-apps.yaml +++ b/manifests/arango-apps.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -19,7 +19,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -31,7 +31,7 @@ metadata: name: arango-apps-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -47,7 +47,7 @@ metadata: name: arango-apps-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -66,7 +66,7 @@ metadata: name: arango-apps-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -86,7 +86,7 @@ metadata: name: arango-apps-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -107,7 +107,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -141,7 +141,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -158,7 +158,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -178,7 +178,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -199,7 +199,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -234,7 +234,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -252,7 +252,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -291,7 +291,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --mode.single @@ -380,6 +380,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -468,6 +484,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -484,6 +516,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -503,3 +539,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/arango-backup.yaml b/manifests/arango-backup.yaml index e2c4c0b7a..d5b08d631 100644 --- a/manifests/arango-backup.yaml +++ b/manifests/arango-backup.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -18,7 +18,7 @@ metadata: name: arango-backup-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -34,7 +34,7 @@ metadata: name: arango-backup-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -54,7 +54,7 @@ metadata: name: arango-backup-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -74,7 +74,7 @@ metadata: name: arango-backup-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -95,7 +95,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -127,7 +127,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -148,7 +148,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -183,7 +183,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -201,7 +201,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -240,7 +240,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --operator.backup @@ -331,6 +331,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -419,6 +435,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -435,6 +467,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -454,3 +490,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/arango-crd.yaml b/manifests/arango-crd.yaml index ca3d5948b..26e9d638d 100644 --- a/manifests/arango-crd.yaml +++ b/manifests/arango-crd.yaml @@ -89,50 +89,6 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.policyName - description: Policy name - name: Policy - type: string - - jsonPath: .spec.deployment.name - description: Deployment name - name: Deployment - type: string - - jsonPath: .status.backup.version - description: Backup Version - name: Version - type: string - - jsonPath: .status.backup.createdAt - description: Backup Creation Timestamp - name: Created - type: string - - jsonPath: .status.backup.sizeInBytes - description: Backup Size in Bytes - name: Size - type: integer - format: byte - - jsonPath: .status.backup.numberOfDBServers - description: Backup Number of the DB Servers - name: DBServers - type: integer - - jsonPath: .status.state - description: The actual state of the ArangoBackup - name: State - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackup object - name: Message - type: string - subresources: - status: {} --- # File: chart/kube-arangodb/crds/backups-backuppolicy.yaml apiVersion: apiextensions.k8s.io/v1 @@ -174,29 +130,6 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.schedule - description: Schedule - name: Schedule - type: string - - jsonPath: .status.scheduled - description: Scheduled - name: Scheduled - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackupPolicy object - name: Message - type: string - subresources: - status: {} --- # File: chart/kube-arangodb/crds/database-clustersynchronization.yaml apiVersion: apiextensions.k8s.io/v1 @@ -257,13 +190,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: @@ -330,13 +256,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: @@ -370,13 +289,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: @@ -581,6 +493,9 @@ spec: storage: true subresources: status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas --- # File: chart/kube-arangodb/crds/scheduler-batchjob.yaml apiVersion: apiextensions.k8s.io/v1 @@ -677,3 +592,54 @@ spec: storage: true subresources: status: {} +--- +# File: chart/kube-arangodb/crds/platform-storage.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformstorages.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformStorage + listKind: ArangoPlatformStorageList + plural: arangoplatformstorages + singular: arangoplatformstorage + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} +--- +# File: chart/kube-arangodb/crds/platform-chart.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformcharts.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformChart + listKind: ArangoPlatformChartList + plural: arangoplatformcharts + singular: arangoplatformchart + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas diff --git a/manifests/arango-deployment-replication.yaml b/manifests/arango-deployment-replication.yaml index ce18ff7bc..e632f8410 100644 --- a/manifests/arango-deployment-replication.yaml +++ b/manifests/arango-deployment-replication.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -18,7 +18,7 @@ metadata: name: arango-deployment-replication-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -37,7 +37,7 @@ metadata: name: arango-deployment-replication-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -56,7 +56,7 @@ metadata: name: arango-deployment-replication-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -76,7 +76,7 @@ metadata: name: arango-deployment-replication-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -97,7 +97,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -123,7 +123,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -144,7 +144,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -179,7 +179,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -197,7 +197,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -236,7 +236,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --operator.deployment-replication @@ -343,6 +343,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -415,6 +431,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -431,6 +463,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -450,3 +486,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/arango-deployment.yaml b/manifests/arango-deployment.yaml index 3ec56aea0..6f2a18ab8 100644 --- a/manifests/arango-deployment.yaml +++ b/manifests/arango-deployment.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -18,7 +18,7 @@ metadata: name: arango-deployment-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -56,7 +56,7 @@ metadata: name: arango-deployment-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -75,7 +75,23 @@ metadata: name: arango-deployment-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +rules: + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: arango-deployment-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -91,7 +107,7 @@ metadata: name: arango-deployment-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -107,7 +123,7 @@ metadata: name: arango-deployment-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -127,7 +143,7 @@ metadata: name: arango-deployment-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -147,7 +163,7 @@ metadata: name: arango-deployment-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -160,6 +176,26 @@ subjects: name: arango-deployment-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: arango-deployment-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: arango-deployment-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-deployment-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -167,7 +203,7 @@ metadata: name: arango-deployment-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -188,7 +224,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -205,7 +241,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -213,9 +249,6 @@ rules: - apiGroups: ["database.arangodb.com"] resources: ["arangodeployments", "arangodeployments/status", "arangomembers", "arangomembers/status"] verbs: ["*"] - - apiGroups: ["networking.arangodb.com"] - resources: ["arangoroutes", "arangoroutes/status"] - verbs: ["*"] - apiGroups: ["database.arangodb.com"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] verbs: ["*"] @@ -234,6 +267,9 @@ rules: - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["*"] + - apiGroups: ["platform.arangodb.com"] + resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + verbs: ["get", "list", "watch"] - apiGroups: ["backup.arangodb.com"] resources: ["arangobackuppolicies", "arangobackups"] verbs: ["get", "list", "watch"] @@ -249,61 +285,37 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment rules: - - apiGroups: - - "ml.arangodb.com" - resources: - - "arangomlextensions" - - "arangomlextensions/status" - - "arangomlbatchjobs" - - "arangomlbatchjobs/status" - - "arangomlcronjobs" - - "arangomlcronjobs/status" - - "arangomlstorages" - - "arangomlstorages/status" - verbs: - - "*" - - apiGroups: - - "scheduler.arangodb.com" - resources: - - "arangoprofiles" - - "arangoprofiles/status" - verbs: - - "*" - - apiGroups: - - "database.arangodb.com" - resources: - - "arangodeployments" - verbs: - - "get" - - "list" - - "watch" - - apiGroups: - - "rbac.authorization.k8s.io" - resources: - - "roles" - - "rolebindings" - verbs: ["*"] - - apiGroups: - - "batch" - resources: - - "cronjobs" - - "jobs" - verbs: ["*"] - - apiGroups: ["apps"] - resources: - - "statefulsets" + - apiGroups: ["networking.arangodb.com"] + resources: ["arangoroutes", "arangoroutes/status"] verbs: ["*"] - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: arango-deployment-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +rules: + - apiGroups: ["platform.arangodb.com"] resources: - - "pods" - - "secrets" - - "services" - - "serviceaccounts" + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/status" verbs: ["*"] --- # Source: kube-arangodb/templates/scheduler-operator/role.yaml @@ -314,7 +326,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -374,7 +386,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -395,7 +407,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -416,7 +428,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -429,6 +441,27 @@ subjects: name: arango-deployment-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: arango-deployment-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: arango-deployment-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-deployment-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -437,7 +470,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -458,7 +491,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -493,7 +526,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -511,7 +544,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -550,13 +583,14 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --operator.deployment - --mode.single - --operator.networking - --operator.scheduler + - --operator.platform - --chaos.allowed=false env: - name: MY_POD_NAMESPACE @@ -659,6 +693,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-replications-operator/cluster-role-binding.yaml --- @@ -707,6 +757,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -726,3 +780,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/arango-k2kclustersync.yaml b/manifests/arango-k2kclustersync.yaml index 110d0d168..cb50c61d5 100644 --- a/manifests/arango-k2kclustersync.yaml +++ b/manifests/arango-k2kclustersync.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -18,7 +18,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -31,7 +31,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -47,7 +47,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -67,7 +67,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -88,7 +88,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -117,7 +117,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -138,7 +138,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -173,7 +173,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -191,7 +191,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -230,7 +230,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --mode.single @@ -337,6 +337,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -409,6 +425,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -425,6 +457,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -444,3 +480,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/arango-ml.yaml b/manifests/arango-ml.yaml index 337bbbe06..3ab8a4284 100644 --- a/manifests/arango-ml.yaml +++ b/manifests/arango-ml.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -18,7 +18,7 @@ metadata: name: arango-ml-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -40,7 +40,7 @@ metadata: name: arango-ml-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -56,7 +56,7 @@ metadata: name: arango-ml-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -76,7 +76,7 @@ metadata: name: arango-ml-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -97,7 +97,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -162,7 +162,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -183,7 +183,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -218,7 +218,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -236,7 +236,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -275,7 +275,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --mode.single @@ -382,6 +382,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -454,6 +470,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -470,6 +502,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -489,3 +525,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/arango-storage.yaml b/manifests/arango-storage.yaml index 50872274b..247ae318a 100644 --- a/manifests/arango-storage.yaml +++ b/manifests/arango-storage.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -18,7 +18,7 @@ metadata: name: arangolocalstorages.storage.arangodb.com labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -48,7 +48,7 @@ metadata: name: arango-storage-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -61,7 +61,7 @@ metadata: name: arango-storage-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -89,7 +89,7 @@ metadata: name: arango-storage-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -109,7 +109,7 @@ metadata: name: arango-storage-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -130,7 +130,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -156,7 +156,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -177,7 +177,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -212,7 +212,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -230,7 +230,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -269,7 +269,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --operator.storage @@ -376,6 +376,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -464,6 +480,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -479,3 +511,19 @@ spec: # Source: kube-arangodb/templates/scheduler-operator/role.yaml --- + +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/enterprise-all.yaml b/manifests/enterprise-all.yaml index 84798b2e0..ccca8a537 100644 --- a/manifests/enterprise-all.yaml +++ b/manifests/enterprise-all.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -19,7 +19,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -31,7 +31,7 @@ metadata: name: arangolocalstorages.storage.arangodb.com labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -61,7 +61,7 @@ metadata: name: arango-all-operator-rbac-analytics labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -77,7 +77,7 @@ metadata: name: arango-all-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -93,7 +93,7 @@ metadata: name: arango-all-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -109,7 +109,7 @@ metadata: name: arango-all-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -181,7 +181,7 @@ metadata: name: arango-all-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -200,7 +200,7 @@ metadata: name: arango-all-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -219,7 +219,7 @@ metadata: name: arango-all-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -235,7 +235,7 @@ metadata: name: arango-all-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -251,7 +251,23 @@ metadata: name: arango-all-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +rules: + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: arango-all-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -267,7 +283,7 @@ metadata: name: arango-all-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -283,7 +299,7 @@ metadata: name: arango-all-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -311,7 +327,7 @@ metadata: name: arango-all-operator-rbac-analytics labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -331,7 +347,7 @@ metadata: name: arango-all-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -351,7 +367,7 @@ metadata: name: arango-all-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -371,7 +387,7 @@ metadata: name: arango-all-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -391,7 +407,7 @@ metadata: name: arango-all-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -411,7 +427,7 @@ metadata: name: arango-all-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -431,7 +447,7 @@ metadata: name: arango-all-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -451,7 +467,7 @@ metadata: name: arango-all-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -471,7 +487,7 @@ metadata: name: arango-all-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -484,6 +500,26 @@ subjects: name: arango-all-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: arango-all-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: arango-all-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-all-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -491,7 +527,7 @@ metadata: name: arango-all-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -511,7 +547,7 @@ metadata: name: arango-all-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -532,7 +568,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -570,7 +606,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -604,7 +640,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -621,7 +657,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -653,7 +689,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -670,7 +706,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -678,9 +714,6 @@ rules: - apiGroups: ["database.arangodb.com"] resources: ["arangodeployments", "arangodeployments/status", "arangomembers", "arangomembers/status"] verbs: ["*"] - - apiGroups: ["networking.arangodb.com"] - resources: ["arangoroutes", "arangoroutes/status"] - verbs: ["*"] - apiGroups: ["database.arangodb.com"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] verbs: ["*"] @@ -699,6 +732,9 @@ rules: - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["*"] + - apiGroups: ["platform.arangodb.com"] + resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + verbs: ["get", "list", "watch"] - apiGroups: ["backup.arangodb.com"] resources: ["arangobackuppolicies", "arangobackups"] verbs: ["get", "list", "watch"] @@ -714,7 +750,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -740,7 +776,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -769,7 +805,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -834,61 +870,37 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all rules: - - apiGroups: - - "ml.arangodb.com" - resources: - - "arangomlextensions" - - "arangomlextensions/status" - - "arangomlbatchjobs" - - "arangomlbatchjobs/status" - - "arangomlcronjobs" - - "arangomlcronjobs/status" - - "arangomlstorages" - - "arangomlstorages/status" - verbs: - - "*" - - apiGroups: - - "scheduler.arangodb.com" - resources: - - "arangoprofiles" - - "arangoprofiles/status" - verbs: - - "*" - - apiGroups: - - "database.arangodb.com" - resources: - - "arangodeployments" - verbs: - - "get" - - "list" - - "watch" - - apiGroups: - - "rbac.authorization.k8s.io" - resources: - - "roles" - - "rolebindings" - verbs: ["*"] - - apiGroups: - - "batch" - resources: - - "cronjobs" - - "jobs" - verbs: ["*"] - - apiGroups: ["apps"] - resources: - - "statefulsets" + - apiGroups: ["networking.arangodb.com"] + resources: ["arangoroutes", "arangoroutes/status"] verbs: ["*"] - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: arango-all-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +rules: + - apiGroups: ["platform.arangodb.com"] resources: - - "pods" - - "secrets" - - "services" - - "serviceaccounts" + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/status" verbs: ["*"] --- # Source: kube-arangodb/templates/scheduler-operator/role.yaml @@ -899,7 +911,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -959,7 +971,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -985,7 +997,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1006,7 +1018,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1026,7 +1038,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1047,7 +1059,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1068,7 +1080,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1089,7 +1101,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1110,7 +1122,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1131,7 +1143,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1152,7 +1164,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1173,7 +1185,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1186,6 +1198,27 @@ subjects: name: arango-all-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: arango-all-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: arango-all-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-all-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -1194,7 +1227,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1215,7 +1248,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1236,7 +1269,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1271,7 +1304,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1289,7 +1322,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1328,7 +1361,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --operator.deployment @@ -1341,6 +1374,7 @@ spec: - --operator.analytics - --operator.networking - --operator.scheduler + - --operator.platform - --operator.k2k-cluster-sync - --chaos.allowed=false env: @@ -1393,3 +1427,35 @@ spec: operator: "Exists" effect: "NoExecute" tolerationSeconds: 5 + +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/enterprise-apps.yaml b/manifests/enterprise-apps.yaml index 94c48a592..967ad3244 100644 --- a/manifests/enterprise-apps.yaml +++ b/manifests/enterprise-apps.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -19,7 +19,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -31,7 +31,7 @@ metadata: name: arango-apps-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -47,7 +47,7 @@ metadata: name: arango-apps-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -66,7 +66,7 @@ metadata: name: arango-apps-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -86,7 +86,7 @@ metadata: name: arango-apps-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -107,7 +107,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -141,7 +141,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -158,7 +158,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -178,7 +178,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -199,7 +199,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -234,7 +234,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -252,7 +252,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -291,7 +291,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --mode.single @@ -380,6 +380,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -468,6 +484,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -484,6 +516,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -503,3 +539,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/enterprise-backup.yaml b/manifests/enterprise-backup.yaml index 9f4390f94..02da10047 100644 --- a/manifests/enterprise-backup.yaml +++ b/manifests/enterprise-backup.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -18,7 +18,7 @@ metadata: name: arango-backup-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -34,7 +34,7 @@ metadata: name: arango-backup-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -54,7 +54,7 @@ metadata: name: arango-backup-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -74,7 +74,7 @@ metadata: name: arango-backup-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -95,7 +95,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -127,7 +127,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -148,7 +148,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -183,7 +183,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -201,7 +201,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -240,7 +240,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --operator.backup @@ -331,6 +331,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -419,6 +435,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -435,6 +467,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -454,3 +490,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/enterprise-crd.yaml b/manifests/enterprise-crd.yaml index ca3d5948b..26e9d638d 100644 --- a/manifests/enterprise-crd.yaml +++ b/manifests/enterprise-crd.yaml @@ -89,50 +89,6 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.policyName - description: Policy name - name: Policy - type: string - - jsonPath: .spec.deployment.name - description: Deployment name - name: Deployment - type: string - - jsonPath: .status.backup.version - description: Backup Version - name: Version - type: string - - jsonPath: .status.backup.createdAt - description: Backup Creation Timestamp - name: Created - type: string - - jsonPath: .status.backup.sizeInBytes - description: Backup Size in Bytes - name: Size - type: integer - format: byte - - jsonPath: .status.backup.numberOfDBServers - description: Backup Number of the DB Servers - name: DBServers - type: integer - - jsonPath: .status.state - description: The actual state of the ArangoBackup - name: State - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackup object - name: Message - type: string - subresources: - status: {} --- # File: chart/kube-arangodb/crds/backups-backuppolicy.yaml apiVersion: apiextensions.k8s.io/v1 @@ -174,29 +130,6 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.schedule - description: Schedule - name: Schedule - type: string - - jsonPath: .status.scheduled - description: Scheduled - name: Scheduled - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackupPolicy object - name: Message - type: string - subresources: - status: {} --- # File: chart/kube-arangodb/crds/database-clustersynchronization.yaml apiVersion: apiextensions.k8s.io/v1 @@ -257,13 +190,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: @@ -330,13 +256,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: @@ -370,13 +289,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: @@ -581,6 +493,9 @@ spec: storage: true subresources: status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas --- # File: chart/kube-arangodb/crds/scheduler-batchjob.yaml apiVersion: apiextensions.k8s.io/v1 @@ -677,3 +592,54 @@ spec: storage: true subresources: status: {} +--- +# File: chart/kube-arangodb/crds/platform-storage.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformstorages.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformStorage + listKind: ArangoPlatformStorageList + plural: arangoplatformstorages + singular: arangoplatformstorage + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} +--- +# File: chart/kube-arangodb/crds/platform-chart.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformcharts.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformChart + listKind: ArangoPlatformChartList + plural: arangoplatformcharts + singular: arangoplatformchart + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas diff --git a/manifests/enterprise-deployment-replication.yaml b/manifests/enterprise-deployment-replication.yaml index a372358a6..cfeffd5e7 100644 --- a/manifests/enterprise-deployment-replication.yaml +++ b/manifests/enterprise-deployment-replication.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -18,7 +18,7 @@ metadata: name: arango-deployment-replication-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -37,7 +37,7 @@ metadata: name: arango-deployment-replication-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -56,7 +56,7 @@ metadata: name: arango-deployment-replication-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -76,7 +76,7 @@ metadata: name: arango-deployment-replication-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -97,7 +97,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -123,7 +123,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -144,7 +144,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -179,7 +179,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -197,7 +197,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -236,7 +236,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --operator.deployment-replication @@ -343,6 +343,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -415,6 +431,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -431,6 +463,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -450,3 +486,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/enterprise-deployment.yaml b/manifests/enterprise-deployment.yaml index 5ae14a524..53fe6d43e 100644 --- a/manifests/enterprise-deployment.yaml +++ b/manifests/enterprise-deployment.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -18,7 +18,7 @@ metadata: name: arango-deployment-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -56,7 +56,7 @@ metadata: name: arango-deployment-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -75,7 +75,23 @@ metadata: name: arango-deployment-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +rules: + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: arango-deployment-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -91,7 +107,7 @@ metadata: name: arango-deployment-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -107,7 +123,7 @@ metadata: name: arango-deployment-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -127,7 +143,7 @@ metadata: name: arango-deployment-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -147,7 +163,7 @@ metadata: name: arango-deployment-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -160,6 +176,26 @@ subjects: name: arango-deployment-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: arango-deployment-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: arango-deployment-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-deployment-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -167,7 +203,7 @@ metadata: name: arango-deployment-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -188,7 +224,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -205,7 +241,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -213,9 +249,6 @@ rules: - apiGroups: ["database.arangodb.com"] resources: ["arangodeployments", "arangodeployments/status", "arangomembers", "arangomembers/status"] verbs: ["*"] - - apiGroups: ["networking.arangodb.com"] - resources: ["arangoroutes", "arangoroutes/status"] - verbs: ["*"] - apiGroups: ["database.arangodb.com"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] verbs: ["*"] @@ -234,6 +267,9 @@ rules: - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["*"] + - apiGroups: ["platform.arangodb.com"] + resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + verbs: ["get", "list", "watch"] - apiGroups: ["backup.arangodb.com"] resources: ["arangobackuppolicies", "arangobackups"] verbs: ["get", "list", "watch"] @@ -249,61 +285,37 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment rules: - - apiGroups: - - "ml.arangodb.com" - resources: - - "arangomlextensions" - - "arangomlextensions/status" - - "arangomlbatchjobs" - - "arangomlbatchjobs/status" - - "arangomlcronjobs" - - "arangomlcronjobs/status" - - "arangomlstorages" - - "arangomlstorages/status" - verbs: - - "*" - - apiGroups: - - "scheduler.arangodb.com" - resources: - - "arangoprofiles" - - "arangoprofiles/status" - verbs: - - "*" - - apiGroups: - - "database.arangodb.com" - resources: - - "arangodeployments" - verbs: - - "get" - - "list" - - "watch" - - apiGroups: - - "rbac.authorization.k8s.io" - resources: - - "roles" - - "rolebindings" - verbs: ["*"] - - apiGroups: - - "batch" - resources: - - "cronjobs" - - "jobs" - verbs: ["*"] - - apiGroups: ["apps"] - resources: - - "statefulsets" + - apiGroups: ["networking.arangodb.com"] + resources: ["arangoroutes", "arangoroutes/status"] verbs: ["*"] - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: arango-deployment-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +rules: + - apiGroups: ["platform.arangodb.com"] resources: - - "pods" - - "secrets" - - "services" - - "serviceaccounts" + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/status" verbs: ["*"] --- # Source: kube-arangodb/templates/scheduler-operator/role.yaml @@ -314,7 +326,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -374,7 +386,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -395,7 +407,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -416,7 +428,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -429,6 +441,27 @@ subjects: name: arango-deployment-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: arango-deployment-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: arango-deployment-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-deployment-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -437,7 +470,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -458,7 +491,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -493,7 +526,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -511,7 +544,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -550,13 +583,14 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --operator.deployment - --mode.single - --operator.networking - --operator.scheduler + - --operator.platform - --chaos.allowed=false env: - name: MY_POD_NAMESPACE @@ -659,6 +693,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-replications-operator/cluster-role-binding.yaml --- @@ -707,6 +757,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -726,3 +780,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/enterprise-k2kclustersync.yaml b/manifests/enterprise-k2kclustersync.yaml index 453f817b0..ec4593cef 100644 --- a/manifests/enterprise-k2kclustersync.yaml +++ b/manifests/enterprise-k2kclustersync.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -18,7 +18,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -31,7 +31,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -47,7 +47,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -67,7 +67,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -88,7 +88,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -117,7 +117,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -138,7 +138,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -173,7 +173,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -191,7 +191,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -230,7 +230,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --mode.single @@ -337,6 +337,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -409,6 +425,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -425,6 +457,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -444,3 +480,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/enterprise-ml.yaml b/manifests/enterprise-ml.yaml index 428c052e5..a09c80fef 100644 --- a/manifests/enterprise-ml.yaml +++ b/manifests/enterprise-ml.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -18,7 +18,7 @@ metadata: name: arango-ml-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -40,7 +40,7 @@ metadata: name: arango-ml-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -56,7 +56,7 @@ metadata: name: arango-ml-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -76,7 +76,7 @@ metadata: name: arango-ml-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -97,7 +97,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -162,7 +162,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -183,7 +183,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -218,7 +218,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -236,7 +236,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -275,7 +275,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --mode.single @@ -382,6 +382,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -454,6 +470,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -470,6 +502,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -489,3 +525,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/enterprise-storage.yaml b/manifests/enterprise-storage.yaml index 0f7e51199..dd82664a3 100644 --- a/manifests/enterprise-storage.yaml +++ b/manifests/enterprise-storage.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -18,7 +18,7 @@ metadata: name: arangolocalstorages.storage.arangodb.com labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -48,7 +48,7 @@ metadata: name: arango-storage-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -61,7 +61,7 @@ metadata: name: arango-storage-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -89,7 +89,7 @@ metadata: name: arango-storage-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -109,7 +109,7 @@ metadata: name: arango-storage-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -130,7 +130,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -156,7 +156,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -177,7 +177,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -212,7 +212,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -230,7 +230,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -269,7 +269,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --operator.storage @@ -376,6 +376,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -464,6 +480,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -479,3 +511,19 @@ spec: # Source: kube-arangodb/templates/scheduler-operator/role.yaml --- + +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize-enterprise/all/enterprise-all.yaml b/manifests/kustomize-enterprise/all/enterprise-all.yaml index 84798b2e0..ccca8a537 100644 --- a/manifests/kustomize-enterprise/all/enterprise-all.yaml +++ b/manifests/kustomize-enterprise/all/enterprise-all.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -19,7 +19,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -31,7 +31,7 @@ metadata: name: arangolocalstorages.storage.arangodb.com labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -61,7 +61,7 @@ metadata: name: arango-all-operator-rbac-analytics labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -77,7 +77,7 @@ metadata: name: arango-all-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -93,7 +93,7 @@ metadata: name: arango-all-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -109,7 +109,7 @@ metadata: name: arango-all-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -181,7 +181,7 @@ metadata: name: arango-all-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -200,7 +200,7 @@ metadata: name: arango-all-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -219,7 +219,7 @@ metadata: name: arango-all-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -235,7 +235,7 @@ metadata: name: arango-all-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -251,7 +251,23 @@ metadata: name: arango-all-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +rules: + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: arango-all-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -267,7 +283,7 @@ metadata: name: arango-all-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -283,7 +299,7 @@ metadata: name: arango-all-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -311,7 +327,7 @@ metadata: name: arango-all-operator-rbac-analytics labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -331,7 +347,7 @@ metadata: name: arango-all-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -351,7 +367,7 @@ metadata: name: arango-all-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -371,7 +387,7 @@ metadata: name: arango-all-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -391,7 +407,7 @@ metadata: name: arango-all-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -411,7 +427,7 @@ metadata: name: arango-all-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -431,7 +447,7 @@ metadata: name: arango-all-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -451,7 +467,7 @@ metadata: name: arango-all-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -471,7 +487,7 @@ metadata: name: arango-all-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -484,6 +500,26 @@ subjects: name: arango-all-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: arango-all-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: arango-all-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-all-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -491,7 +527,7 @@ metadata: name: arango-all-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -511,7 +547,7 @@ metadata: name: arango-all-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -532,7 +568,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -570,7 +606,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -604,7 +640,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -621,7 +657,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -653,7 +689,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -670,7 +706,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -678,9 +714,6 @@ rules: - apiGroups: ["database.arangodb.com"] resources: ["arangodeployments", "arangodeployments/status", "arangomembers", "arangomembers/status"] verbs: ["*"] - - apiGroups: ["networking.arangodb.com"] - resources: ["arangoroutes", "arangoroutes/status"] - verbs: ["*"] - apiGroups: ["database.arangodb.com"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] verbs: ["*"] @@ -699,6 +732,9 @@ rules: - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["*"] + - apiGroups: ["platform.arangodb.com"] + resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + verbs: ["get", "list", "watch"] - apiGroups: ["backup.arangodb.com"] resources: ["arangobackuppolicies", "arangobackups"] verbs: ["get", "list", "watch"] @@ -714,7 +750,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -740,7 +776,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -769,7 +805,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -834,61 +870,37 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all rules: - - apiGroups: - - "ml.arangodb.com" - resources: - - "arangomlextensions" - - "arangomlextensions/status" - - "arangomlbatchjobs" - - "arangomlbatchjobs/status" - - "arangomlcronjobs" - - "arangomlcronjobs/status" - - "arangomlstorages" - - "arangomlstorages/status" - verbs: - - "*" - - apiGroups: - - "scheduler.arangodb.com" - resources: - - "arangoprofiles" - - "arangoprofiles/status" - verbs: - - "*" - - apiGroups: - - "database.arangodb.com" - resources: - - "arangodeployments" - verbs: - - "get" - - "list" - - "watch" - - apiGroups: - - "rbac.authorization.k8s.io" - resources: - - "roles" - - "rolebindings" - verbs: ["*"] - - apiGroups: - - "batch" - resources: - - "cronjobs" - - "jobs" - verbs: ["*"] - - apiGroups: ["apps"] - resources: - - "statefulsets" + - apiGroups: ["networking.arangodb.com"] + resources: ["arangoroutes", "arangoroutes/status"] verbs: ["*"] - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: arango-all-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +rules: + - apiGroups: ["platform.arangodb.com"] resources: - - "pods" - - "secrets" - - "services" - - "serviceaccounts" + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/status" verbs: ["*"] --- # Source: kube-arangodb/templates/scheduler-operator/role.yaml @@ -899,7 +911,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -959,7 +971,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -985,7 +997,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1006,7 +1018,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1026,7 +1038,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1047,7 +1059,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1068,7 +1080,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1089,7 +1101,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1110,7 +1122,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1131,7 +1143,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1152,7 +1164,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1173,7 +1185,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1186,6 +1198,27 @@ subjects: name: arango-all-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: arango-all-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: arango-all-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-all-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -1194,7 +1227,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1215,7 +1248,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1236,7 +1269,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1271,7 +1304,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1289,7 +1322,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1328,7 +1361,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --operator.deployment @@ -1341,6 +1374,7 @@ spec: - --operator.analytics - --operator.networking - --operator.scheduler + - --operator.platform - --operator.k2k-cluster-sync - --chaos.allowed=false env: @@ -1393,3 +1427,35 @@ spec: operator: "Exists" effect: "NoExecute" tolerationSeconds: 5 + +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize-enterprise/apps/enterprise-apps.yaml b/manifests/kustomize-enterprise/apps/enterprise-apps.yaml index 94c48a592..967ad3244 100644 --- a/manifests/kustomize-enterprise/apps/enterprise-apps.yaml +++ b/manifests/kustomize-enterprise/apps/enterprise-apps.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -19,7 +19,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -31,7 +31,7 @@ metadata: name: arango-apps-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -47,7 +47,7 @@ metadata: name: arango-apps-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -66,7 +66,7 @@ metadata: name: arango-apps-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -86,7 +86,7 @@ metadata: name: arango-apps-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -107,7 +107,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -141,7 +141,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -158,7 +158,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -178,7 +178,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -199,7 +199,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -234,7 +234,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -252,7 +252,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -291,7 +291,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --mode.single @@ -380,6 +380,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -468,6 +484,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -484,6 +516,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -503,3 +539,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize-enterprise/backup/enterprise-backup.yaml b/manifests/kustomize-enterprise/backup/enterprise-backup.yaml index 9f4390f94..02da10047 100644 --- a/manifests/kustomize-enterprise/backup/enterprise-backup.yaml +++ b/manifests/kustomize-enterprise/backup/enterprise-backup.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -18,7 +18,7 @@ metadata: name: arango-backup-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -34,7 +34,7 @@ metadata: name: arango-backup-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -54,7 +54,7 @@ metadata: name: arango-backup-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -74,7 +74,7 @@ metadata: name: arango-backup-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -95,7 +95,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -127,7 +127,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -148,7 +148,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -183,7 +183,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -201,7 +201,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -240,7 +240,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --operator.backup @@ -331,6 +331,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -419,6 +435,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -435,6 +467,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -454,3 +490,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize-enterprise/crd/enterprise-crd.yaml b/manifests/kustomize-enterprise/crd/enterprise-crd.yaml index ca3d5948b..26e9d638d 100644 --- a/manifests/kustomize-enterprise/crd/enterprise-crd.yaml +++ b/manifests/kustomize-enterprise/crd/enterprise-crd.yaml @@ -89,50 +89,6 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.policyName - description: Policy name - name: Policy - type: string - - jsonPath: .spec.deployment.name - description: Deployment name - name: Deployment - type: string - - jsonPath: .status.backup.version - description: Backup Version - name: Version - type: string - - jsonPath: .status.backup.createdAt - description: Backup Creation Timestamp - name: Created - type: string - - jsonPath: .status.backup.sizeInBytes - description: Backup Size in Bytes - name: Size - type: integer - format: byte - - jsonPath: .status.backup.numberOfDBServers - description: Backup Number of the DB Servers - name: DBServers - type: integer - - jsonPath: .status.state - description: The actual state of the ArangoBackup - name: State - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackup object - name: Message - type: string - subresources: - status: {} --- # File: chart/kube-arangodb/crds/backups-backuppolicy.yaml apiVersion: apiextensions.k8s.io/v1 @@ -174,29 +130,6 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.schedule - description: Schedule - name: Schedule - type: string - - jsonPath: .status.scheduled - description: Scheduled - name: Scheduled - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackupPolicy object - name: Message - type: string - subresources: - status: {} --- # File: chart/kube-arangodb/crds/database-clustersynchronization.yaml apiVersion: apiextensions.k8s.io/v1 @@ -257,13 +190,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: @@ -330,13 +256,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: @@ -370,13 +289,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: @@ -581,6 +493,9 @@ spec: storage: true subresources: status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas --- # File: chart/kube-arangodb/crds/scheduler-batchjob.yaml apiVersion: apiextensions.k8s.io/v1 @@ -677,3 +592,54 @@ spec: storage: true subresources: status: {} +--- +# File: chart/kube-arangodb/crds/platform-storage.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformstorages.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformStorage + listKind: ArangoPlatformStorageList + plural: arangoplatformstorages + singular: arangoplatformstorage + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} +--- +# File: chart/kube-arangodb/crds/platform-chart.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformcharts.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformChart + listKind: ArangoPlatformChartList + plural: arangoplatformcharts + singular: arangoplatformchart + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas diff --git a/manifests/kustomize-enterprise/deployment-replication/enterprise-deployment-replication.yaml b/manifests/kustomize-enterprise/deployment-replication/enterprise-deployment-replication.yaml index a372358a6..cfeffd5e7 100644 --- a/manifests/kustomize-enterprise/deployment-replication/enterprise-deployment-replication.yaml +++ b/manifests/kustomize-enterprise/deployment-replication/enterprise-deployment-replication.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -18,7 +18,7 @@ metadata: name: arango-deployment-replication-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -37,7 +37,7 @@ metadata: name: arango-deployment-replication-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -56,7 +56,7 @@ metadata: name: arango-deployment-replication-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -76,7 +76,7 @@ metadata: name: arango-deployment-replication-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -97,7 +97,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -123,7 +123,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -144,7 +144,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -179,7 +179,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -197,7 +197,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -236,7 +236,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --operator.deployment-replication @@ -343,6 +343,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -415,6 +431,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -431,6 +463,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -450,3 +486,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize-enterprise/deployment/enterprise-deployment.yaml b/manifests/kustomize-enterprise/deployment/enterprise-deployment.yaml index 5ae14a524..53fe6d43e 100644 --- a/manifests/kustomize-enterprise/deployment/enterprise-deployment.yaml +++ b/manifests/kustomize-enterprise/deployment/enterprise-deployment.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -18,7 +18,7 @@ metadata: name: arango-deployment-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -56,7 +56,7 @@ metadata: name: arango-deployment-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -75,7 +75,23 @@ metadata: name: arango-deployment-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +rules: + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: arango-deployment-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -91,7 +107,7 @@ metadata: name: arango-deployment-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -107,7 +123,7 @@ metadata: name: arango-deployment-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -127,7 +143,7 @@ metadata: name: arango-deployment-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -147,7 +163,7 @@ metadata: name: arango-deployment-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -160,6 +176,26 @@ subjects: name: arango-deployment-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: arango-deployment-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: arango-deployment-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-deployment-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -167,7 +203,7 @@ metadata: name: arango-deployment-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -188,7 +224,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -205,7 +241,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -213,9 +249,6 @@ rules: - apiGroups: ["database.arangodb.com"] resources: ["arangodeployments", "arangodeployments/status", "arangomembers", "arangomembers/status"] verbs: ["*"] - - apiGroups: ["networking.arangodb.com"] - resources: ["arangoroutes", "arangoroutes/status"] - verbs: ["*"] - apiGroups: ["database.arangodb.com"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] verbs: ["*"] @@ -234,6 +267,9 @@ rules: - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["*"] + - apiGroups: ["platform.arangodb.com"] + resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + verbs: ["get", "list", "watch"] - apiGroups: ["backup.arangodb.com"] resources: ["arangobackuppolicies", "arangobackups"] verbs: ["get", "list", "watch"] @@ -249,61 +285,37 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment rules: - - apiGroups: - - "ml.arangodb.com" - resources: - - "arangomlextensions" - - "arangomlextensions/status" - - "arangomlbatchjobs" - - "arangomlbatchjobs/status" - - "arangomlcronjobs" - - "arangomlcronjobs/status" - - "arangomlstorages" - - "arangomlstorages/status" - verbs: - - "*" - - apiGroups: - - "scheduler.arangodb.com" - resources: - - "arangoprofiles" - - "arangoprofiles/status" - verbs: - - "*" - - apiGroups: - - "database.arangodb.com" - resources: - - "arangodeployments" - verbs: - - "get" - - "list" - - "watch" - - apiGroups: - - "rbac.authorization.k8s.io" - resources: - - "roles" - - "rolebindings" - verbs: ["*"] - - apiGroups: - - "batch" - resources: - - "cronjobs" - - "jobs" - verbs: ["*"] - - apiGroups: ["apps"] - resources: - - "statefulsets" + - apiGroups: ["networking.arangodb.com"] + resources: ["arangoroutes", "arangoroutes/status"] verbs: ["*"] - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: arango-deployment-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +rules: + - apiGroups: ["platform.arangodb.com"] resources: - - "pods" - - "secrets" - - "services" - - "serviceaccounts" + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/status" verbs: ["*"] --- # Source: kube-arangodb/templates/scheduler-operator/role.yaml @@ -314,7 +326,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -374,7 +386,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -395,7 +407,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -416,7 +428,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -429,6 +441,27 @@ subjects: name: arango-deployment-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: arango-deployment-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: arango-deployment-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-deployment-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -437,7 +470,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -458,7 +491,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -493,7 +526,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -511,7 +544,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -550,13 +583,14 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --operator.deployment - --mode.single - --operator.networking - --operator.scheduler + - --operator.platform - --chaos.allowed=false env: - name: MY_POD_NAMESPACE @@ -659,6 +693,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-replications-operator/cluster-role-binding.yaml --- @@ -707,6 +757,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -726,3 +780,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize-enterprise/k2kclustersync/enterprise-k2kclustersync.yaml b/manifests/kustomize-enterprise/k2kclustersync/enterprise-k2kclustersync.yaml index 453f817b0..ec4593cef 100644 --- a/manifests/kustomize-enterprise/k2kclustersync/enterprise-k2kclustersync.yaml +++ b/manifests/kustomize-enterprise/k2kclustersync/enterprise-k2kclustersync.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -18,7 +18,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -31,7 +31,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -47,7 +47,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -67,7 +67,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -88,7 +88,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -117,7 +117,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -138,7 +138,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -173,7 +173,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -191,7 +191,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -230,7 +230,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --mode.single @@ -337,6 +337,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -409,6 +425,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -425,6 +457,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -444,3 +480,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize-enterprise/storage/enterprise-storage.yaml b/manifests/kustomize-enterprise/storage/enterprise-storage.yaml index 0f7e51199..dd82664a3 100644 --- a/manifests/kustomize-enterprise/storage/enterprise-storage.yaml +++ b/manifests/kustomize-enterprise/storage/enterprise-storage.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -18,7 +18,7 @@ metadata: name: arangolocalstorages.storage.arangodb.com labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -48,7 +48,7 @@ metadata: name: arango-storage-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -61,7 +61,7 @@ metadata: name: arango-storage-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -89,7 +89,7 @@ metadata: name: arango-storage-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -109,7 +109,7 @@ metadata: name: arango-storage-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -130,7 +130,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -156,7 +156,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -177,7 +177,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -212,7 +212,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -230,7 +230,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -269,7 +269,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --operator.storage @@ -376,6 +376,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -464,6 +480,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -479,3 +511,19 @@ spec: # Source: kube-arangodb/templates/scheduler-operator/role.yaml --- + +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize/all/arango-all.yaml b/manifests/kustomize/all/arango-all.yaml index 0225b65c8..0a7a87c2b 100644 --- a/manifests/kustomize/all/arango-all.yaml +++ b/manifests/kustomize/all/arango-all.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -19,7 +19,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -31,7 +31,7 @@ metadata: name: arangolocalstorages.storage.arangodb.com labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -61,7 +61,7 @@ metadata: name: arango-all-operator-rbac-analytics labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -77,7 +77,7 @@ metadata: name: arango-all-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -93,7 +93,7 @@ metadata: name: arango-all-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -109,7 +109,7 @@ metadata: name: arango-all-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -181,7 +181,7 @@ metadata: name: arango-all-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -200,7 +200,7 @@ metadata: name: arango-all-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -219,7 +219,7 @@ metadata: name: arango-all-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -235,7 +235,7 @@ metadata: name: arango-all-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -251,7 +251,23 @@ metadata: name: arango-all-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +rules: + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: arango-all-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -267,7 +283,7 @@ metadata: name: arango-all-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -283,7 +299,7 @@ metadata: name: arango-all-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -311,7 +327,7 @@ metadata: name: arango-all-operator-rbac-analytics labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -331,7 +347,7 @@ metadata: name: arango-all-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -351,7 +367,7 @@ metadata: name: arango-all-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -371,7 +387,7 @@ metadata: name: arango-all-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -391,7 +407,7 @@ metadata: name: arango-all-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -411,7 +427,7 @@ metadata: name: arango-all-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -431,7 +447,7 @@ metadata: name: arango-all-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -451,7 +467,7 @@ metadata: name: arango-all-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -471,7 +487,7 @@ metadata: name: arango-all-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -484,6 +500,26 @@ subjects: name: arango-all-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: arango-all-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: arango-all-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-all-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -491,7 +527,7 @@ metadata: name: arango-all-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -511,7 +547,7 @@ metadata: name: arango-all-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -532,7 +568,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -570,7 +606,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -604,7 +640,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -621,7 +657,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -653,7 +689,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -670,7 +706,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -678,9 +714,6 @@ rules: - apiGroups: ["database.arangodb.com"] resources: ["arangodeployments", "arangodeployments/status", "arangomembers", "arangomembers/status"] verbs: ["*"] - - apiGroups: ["networking.arangodb.com"] - resources: ["arangoroutes", "arangoroutes/status"] - verbs: ["*"] - apiGroups: ["database.arangodb.com"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] verbs: ["*"] @@ -699,6 +732,9 @@ rules: - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["*"] + - apiGroups: ["platform.arangodb.com"] + resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + verbs: ["get", "list", "watch"] - apiGroups: ["backup.arangodb.com"] resources: ["arangobackuppolicies", "arangobackups"] verbs: ["get", "list", "watch"] @@ -714,7 +750,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -740,7 +776,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -769,7 +805,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -834,61 +870,37 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all rules: - - apiGroups: - - "ml.arangodb.com" - resources: - - "arangomlextensions" - - "arangomlextensions/status" - - "arangomlbatchjobs" - - "arangomlbatchjobs/status" - - "arangomlcronjobs" - - "arangomlcronjobs/status" - - "arangomlstorages" - - "arangomlstorages/status" - verbs: - - "*" - - apiGroups: - - "scheduler.arangodb.com" - resources: - - "arangoprofiles" - - "arangoprofiles/status" - verbs: - - "*" - - apiGroups: - - "database.arangodb.com" - resources: - - "arangodeployments" - verbs: - - "get" - - "list" - - "watch" - - apiGroups: - - "rbac.authorization.k8s.io" - resources: - - "roles" - - "rolebindings" - verbs: ["*"] - - apiGroups: - - "batch" - resources: - - "cronjobs" - - "jobs" - verbs: ["*"] - - apiGroups: ["apps"] - resources: - - "statefulsets" + - apiGroups: ["networking.arangodb.com"] + resources: ["arangoroutes", "arangoroutes/status"] verbs: ["*"] - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: arango-all-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +rules: + - apiGroups: ["platform.arangodb.com"] resources: - - "pods" - - "secrets" - - "services" - - "serviceaccounts" + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/status" verbs: ["*"] --- # Source: kube-arangodb/templates/scheduler-operator/role.yaml @@ -899,7 +911,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -959,7 +971,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -985,7 +997,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1006,7 +1018,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1026,7 +1038,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1047,7 +1059,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1068,7 +1080,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1089,7 +1101,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1110,7 +1122,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1131,7 +1143,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1152,7 +1164,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1173,7 +1185,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1186,6 +1198,27 @@ subjects: name: arango-all-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: arango-all-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: all + release: all +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: arango-all-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-all-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -1194,7 +1227,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1215,7 +1248,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1236,7 +1269,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1271,7 +1304,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1289,7 +1322,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: all release: all @@ -1328,7 +1361,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --operator.deployment @@ -1341,6 +1374,7 @@ spec: - --operator.analytics - --operator.networking - --operator.scheduler + - --operator.platform - --operator.k2k-cluster-sync - --chaos.allowed=false env: @@ -1393,3 +1427,35 @@ spec: operator: "Exists" effect: "NoExecute" tolerationSeconds: 5 + +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize/apps/arango-apps.yaml b/manifests/kustomize/apps/arango-apps.yaml index 003fd70ce..b2f2be54b 100644 --- a/manifests/kustomize/apps/arango-apps.yaml +++ b/manifests/kustomize/apps/arango-apps.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -19,7 +19,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -31,7 +31,7 @@ metadata: name: arango-apps-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -47,7 +47,7 @@ metadata: name: arango-apps-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -66,7 +66,7 @@ metadata: name: arango-apps-operator-rbac-apps labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -86,7 +86,7 @@ metadata: name: arango-apps-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -107,7 +107,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -141,7 +141,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -158,7 +158,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -178,7 +178,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -199,7 +199,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -234,7 +234,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -252,7 +252,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: apps release: apps @@ -291,7 +291,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --mode.single @@ -380,6 +380,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -468,6 +484,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -484,6 +516,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -503,3 +539,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize/apps/arango-ml.yaml b/manifests/kustomize/apps/arango-ml.yaml index 337bbbe06..3ab8a4284 100644 --- a/manifests/kustomize/apps/arango-ml.yaml +++ b/manifests/kustomize/apps/arango-ml.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -18,7 +18,7 @@ metadata: name: arango-ml-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -40,7 +40,7 @@ metadata: name: arango-ml-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -56,7 +56,7 @@ metadata: name: arango-ml-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -76,7 +76,7 @@ metadata: name: arango-ml-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -97,7 +97,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -162,7 +162,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -183,7 +183,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -218,7 +218,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -236,7 +236,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -275,7 +275,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --mode.single @@ -382,6 +382,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -454,6 +470,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -470,6 +502,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -489,3 +525,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize/apps/enterprise-ml.yaml b/manifests/kustomize/apps/enterprise-ml.yaml index 428c052e5..a09c80fef 100644 --- a/manifests/kustomize/apps/enterprise-ml.yaml +++ b/manifests/kustomize/apps/enterprise-ml.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -18,7 +18,7 @@ metadata: name: arango-ml-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -40,7 +40,7 @@ metadata: name: arango-ml-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -56,7 +56,7 @@ metadata: name: arango-ml-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -76,7 +76,7 @@ metadata: name: arango-ml-operator-rbac-ml labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -97,7 +97,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -162,7 +162,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -183,7 +183,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -218,7 +218,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -236,7 +236,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: ml release: ml @@ -275,7 +275,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb-enterprise:1.2.43 + image: arangodb/kube-arangodb-enterprise:1.2.44 args: - --scope=legacy - --mode.single @@ -382,6 +382,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -454,6 +470,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -470,6 +502,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -489,3 +525,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize/backup/arango-backup.yaml b/manifests/kustomize/backup/arango-backup.yaml index e2c4c0b7a..d5b08d631 100644 --- a/manifests/kustomize/backup/arango-backup.yaml +++ b/manifests/kustomize/backup/arango-backup.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -18,7 +18,7 @@ metadata: name: arango-backup-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -34,7 +34,7 @@ metadata: name: arango-backup-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -54,7 +54,7 @@ metadata: name: arango-backup-operator-rbac-backup labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -74,7 +74,7 @@ metadata: name: arango-backup-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -95,7 +95,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -127,7 +127,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -148,7 +148,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -183,7 +183,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -201,7 +201,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: backup release: backup @@ -240,7 +240,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --operator.backup @@ -331,6 +331,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -419,6 +435,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -435,6 +467,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -454,3 +490,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize/crd/arango-crd.yaml b/manifests/kustomize/crd/arango-crd.yaml index ca3d5948b..26e9d638d 100644 --- a/manifests/kustomize/crd/arango-crd.yaml +++ b/manifests/kustomize/crd/arango-crd.yaml @@ -89,50 +89,6 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.policyName - description: Policy name - name: Policy - type: string - - jsonPath: .spec.deployment.name - description: Deployment name - name: Deployment - type: string - - jsonPath: .status.backup.version - description: Backup Version - name: Version - type: string - - jsonPath: .status.backup.createdAt - description: Backup Creation Timestamp - name: Created - type: string - - jsonPath: .status.backup.sizeInBytes - description: Backup Size in Bytes - name: Size - type: integer - format: byte - - jsonPath: .status.backup.numberOfDBServers - description: Backup Number of the DB Servers - name: DBServers - type: integer - - jsonPath: .status.state - description: The actual state of the ArangoBackup - name: State - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackup object - name: Message - type: string - subresources: - status: {} --- # File: chart/kube-arangodb/crds/backups-backuppolicy.yaml apiVersion: apiextensions.k8s.io/v1 @@ -174,29 +130,6 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.schedule - description: Schedule - name: Schedule - type: string - - jsonPath: .status.scheduled - description: Scheduled - name: Scheduled - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackupPolicy object - name: Message - type: string - subresources: - status: {} --- # File: chart/kube-arangodb/crds/database-clustersynchronization.yaml apiVersion: apiextensions.k8s.io/v1 @@ -257,13 +190,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: @@ -330,13 +256,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: @@ -370,13 +289,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: @@ -581,6 +493,9 @@ spec: storage: true subresources: status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas --- # File: chart/kube-arangodb/crds/scheduler-batchjob.yaml apiVersion: apiextensions.k8s.io/v1 @@ -677,3 +592,54 @@ spec: storage: true subresources: status: {} +--- +# File: chart/kube-arangodb/crds/platform-storage.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformstorages.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformStorage + listKind: ArangoPlatformStorageList + plural: arangoplatformstorages + singular: arangoplatformstorage + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} +--- +# File: chart/kube-arangodb/crds/platform-chart.yaml +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformcharts.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformChart + listKind: ArangoPlatformChartList + plural: arangoplatformcharts + singular: arangoplatformchart + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas diff --git a/manifests/kustomize/deployment-replication/arango-deployment-replication.yaml b/manifests/kustomize/deployment-replication/arango-deployment-replication.yaml index ce18ff7bc..e632f8410 100644 --- a/manifests/kustomize/deployment-replication/arango-deployment-replication.yaml +++ b/manifests/kustomize/deployment-replication/arango-deployment-replication.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -18,7 +18,7 @@ metadata: name: arango-deployment-replication-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -37,7 +37,7 @@ metadata: name: arango-deployment-replication-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -56,7 +56,7 @@ metadata: name: arango-deployment-replication-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -76,7 +76,7 @@ metadata: name: arango-deployment-replication-operator-rbac-deployment-replication labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -97,7 +97,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -123,7 +123,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -144,7 +144,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -179,7 +179,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -197,7 +197,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment-replication release: deployment-replication @@ -236,7 +236,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --operator.deployment-replication @@ -343,6 +343,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -415,6 +431,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -431,6 +463,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -450,3 +486,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize/deployment/arango-deployment.yaml b/manifests/kustomize/deployment/arango-deployment.yaml index 3ec56aea0..6f2a18ab8 100644 --- a/manifests/kustomize/deployment/arango-deployment.yaml +++ b/manifests/kustomize/deployment/arango-deployment.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -18,7 +18,7 @@ metadata: name: arango-deployment-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -56,7 +56,7 @@ metadata: name: arango-deployment-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -75,7 +75,23 @@ metadata: name: arango-deployment-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +rules: + - apiGroups: ["apiextensions.k8s.io"] + resources: ["customresourcedefinitions"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: arango-deployment-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -91,7 +107,7 @@ metadata: name: arango-deployment-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -107,7 +123,7 @@ metadata: name: arango-deployment-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -127,7 +143,7 @@ metadata: name: arango-deployment-operator-rbac-deployment labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -147,7 +163,7 @@ metadata: name: arango-deployment-operator-rbac-networking labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -160,6 +176,26 @@ subjects: name: arango-deployment-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: arango-deployment-operator-rbac-platform + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: arango-deployment-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-deployment-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -167,7 +203,7 @@ metadata: name: arango-deployment-operator-rbac-scheduler labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -188,7 +224,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -205,7 +241,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -213,9 +249,6 @@ rules: - apiGroups: ["database.arangodb.com"] resources: ["arangodeployments", "arangodeployments/status", "arangomembers", "arangomembers/status"] verbs: ["*"] - - apiGroups: ["networking.arangodb.com"] - resources: ["arangoroutes", "arangoroutes/status"] - verbs: ["*"] - apiGroups: ["database.arangodb.com"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] verbs: ["*"] @@ -234,6 +267,9 @@ rules: - apiGroups: ["coordination.k8s.io"] resources: ["leases"] verbs: ["*"] + - apiGroups: ["platform.arangodb.com"] + resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + verbs: ["get", "list", "watch"] - apiGroups: ["backup.arangodb.com"] resources: ["arangobackuppolicies", "arangobackups"] verbs: ["get", "list", "watch"] @@ -249,61 +285,37 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment rules: - - apiGroups: - - "ml.arangodb.com" - resources: - - "arangomlextensions" - - "arangomlextensions/status" - - "arangomlbatchjobs" - - "arangomlbatchjobs/status" - - "arangomlcronjobs" - - "arangomlcronjobs/status" - - "arangomlstorages" - - "arangomlstorages/status" - verbs: - - "*" - - apiGroups: - - "scheduler.arangodb.com" - resources: - - "arangoprofiles" - - "arangoprofiles/status" - verbs: - - "*" - - apiGroups: - - "database.arangodb.com" - resources: - - "arangodeployments" - verbs: - - "get" - - "list" - - "watch" - - apiGroups: - - "rbac.authorization.k8s.io" - resources: - - "roles" - - "rolebindings" - verbs: ["*"] - - apiGroups: - - "batch" - resources: - - "cronjobs" - - "jobs" - verbs: ["*"] - - apiGroups: ["apps"] - resources: - - "statefulsets" + - apiGroups: ["networking.arangodb.com"] + resources: ["arangoroutes", "arangoroutes/status"] verbs: ["*"] - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] +--- +# Source: kube-arangodb/templates/platform-operator/role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: arango-deployment-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +rules: + - apiGroups: ["platform.arangodb.com"] resources: - - "pods" - - "secrets" - - "services" - - "serviceaccounts" + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/status" verbs: ["*"] --- # Source: kube-arangodb/templates/scheduler-operator/role.yaml @@ -314,7 +326,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -374,7 +386,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -395,7 +407,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -416,7 +428,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -429,6 +441,27 @@ subjects: name: arango-deployment-operator namespace: default --- +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: arango-deployment-operator-rbac-platform + namespace: default + labels: + app.kubernetes.io/name: kube-arangodb + helm.sh/chart: kube-arangodb-1.2.44 + app.kubernetes.io/managed-by: Tiller + app.kubernetes.io/instance: deployment + release: deployment +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: arango-deployment-operator-rbac-platform +subjects: + - kind: ServiceAccount + name: arango-deployment-operator + namespace: default +--- # Source: kube-arangodb/templates/scheduler-operator/role-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -437,7 +470,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -458,7 +491,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -493,7 +526,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -511,7 +544,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: deployment release: deployment @@ -550,13 +583,14 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --operator.deployment - --mode.single - --operator.networking - --operator.scheduler + - --operator.platform - --chaos.allowed=false env: - name: MY_POD_NAMESPACE @@ -659,6 +693,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-replications-operator/cluster-role-binding.yaml --- @@ -707,6 +757,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -726,3 +780,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize/k2kclustersync/arango-k2kclustersync.yaml b/manifests/kustomize/k2kclustersync/arango-k2kclustersync.yaml index 110d0d168..cb50c61d5 100644 --- a/manifests/kustomize/k2kclustersync/arango-k2kclustersync.yaml +++ b/manifests/kustomize/k2kclustersync/arango-k2kclustersync.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -18,7 +18,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -31,7 +31,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -47,7 +47,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -67,7 +67,7 @@ metadata: name: arango-k2kclustersync-operator-rbac-k2kclustersync labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -88,7 +88,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -117,7 +117,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -138,7 +138,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -173,7 +173,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -191,7 +191,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: k2kclustersync release: k2kclustersync @@ -230,7 +230,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --mode.single @@ -337,6 +337,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -409,6 +425,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -425,6 +457,10 @@ spec: --- +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + # Source: kube-arangodb/templates/storage-operator/cluster-role-binding.yaml --- @@ -444,3 +480,15 @@ spec: # Source: kube-arangodb/templates/storage-operator/role.yaml --- + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/manifests/kustomize/storage/arango-storage.yaml b/manifests/kustomize/storage/arango-storage.yaml index 50872274b..247ae318a 100644 --- a/manifests/kustomize/storage/arango-storage.yaml +++ b/manifests/kustomize/storage/arango-storage.yaml @@ -6,7 +6,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -18,7 +18,7 @@ metadata: name: arangolocalstorages.storage.arangodb.com labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -48,7 +48,7 @@ metadata: name: arango-storage-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -61,7 +61,7 @@ metadata: name: arango-storage-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -89,7 +89,7 @@ metadata: name: arango-storage-operator-rbac-crd labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -109,7 +109,7 @@ metadata: name: arango-storage-operator-rbac-storage labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -130,7 +130,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -156,7 +156,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -177,7 +177,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -212,7 +212,7 @@ metadata: namespace: default labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -230,7 +230,7 @@ spec: metadata: labels: app.kubernetes.io/name: kube-arangodb - helm.sh/chart: kube-arangodb-1.2.43 + helm.sh/chart: kube-arangodb-1.2.44 app.kubernetes.io/managed-by: Tiller app.kubernetes.io/instance: storage release: storage @@ -269,7 +269,7 @@ spec: containers: - name: operator imagePullPolicy: Always - image: arangodb/kube-arangodb:1.2.43 + image: arangodb/kube-arangodb:1.2.44 args: - --scope=legacy - --operator.storage @@ -376,6 +376,22 @@ spec: --- +# Source: kube-arangodb/templates/certificates/ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/certificate.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.ca.yaml +--- + + +# Source: kube-arangodb/templates/certificates/issuer.yaml +--- + + # Source: kube-arangodb/templates/deployment-operator/cluster-role-binding.yaml --- @@ -464,6 +480,22 @@ spec: --- +# Source: kube-arangodb/templates/platform-operator/cluster-role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/cluster-role.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role-binding.yaml +--- + + +# Source: kube-arangodb/templates/platform-operator/role.yaml +--- + + # Source: kube-arangodb/templates/scheduler-operator/cluster-role-binding.yaml --- @@ -479,3 +511,19 @@ spec: # Source: kube-arangodb/templates/scheduler-operator/role.yaml --- + +# Source: kube-arangodb/templates/service-webhooks.yaml +--- + + +# Source: kube-arangodb/templates/webhook/certificate.yaml +--- + + +# Source: kube-arangodb/templates/webhook/mutation.yaml +--- + + +# Source: kube-arangodb/templates/webhook/validation.yaml +--- + diff --git a/pkg/api/api.go b/pkg/api/api.go index 2d919e7b9..93962be9b 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ package api import ( + "context" "net" "net/http" "time" @@ -73,7 +74,7 @@ func NewServer(cli typedCore.CoreV1Interface, cfg ServerConfig) (*Server, error) return nil, err } - tlsConfig, err := prepareTLSConfig(cli, cfg) + tlsConfig, err := prepareTLSConfig(cli, cfg).Eval(context.Background()) if err != nil { return nil, err } diff --git a/pkg/api/jwt.go b/pkg/api/jwt.go index 4e6a99d08..8621da4e8 100644 --- a/pkg/api/jwt.go +++ b/pkg/api/jwt.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,13 +26,14 @@ import ( "time" jg "github.com/golang-jwt/jwt" + core "k8s.io/api/core/v1" typedCore "k8s.io/client-go/kubernetes/typed/core/v1" "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/globals" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" - secret "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" ) @@ -67,7 +68,7 @@ func ensureJWT(cli typedCore.CoreV1Interface, cfg ServerConfig) (string, error) // generateAndSaveJWT tries to generate new JWT using signing key retrieved from secret. // If it is not present, it creates a new key. // The resulting JWT is stored in secrets. -func generateAndSaveJWT(secrets secret.Interface, cfg ServerConfig) error { +func generateAndSaveJWT(secrets generic.InspectorInterface[*core.Secret], cfg ServerConfig) error { claims := jg.MapClaims{ "iss": fmt.Sprintf("kube-arangodb/%s", cfg.ServerName), "iat": time.Now().Unix(), @@ -79,7 +80,7 @@ func generateAndSaveJWT(secrets secret.Interface, cfg ServerConfig) error { return err } -func createSigningKey(secrets secret.ModInterface, keySecretName string) (string, error) { +func createSigningKey(secrets generic.ModClient[*core.Secret], keySecretName string) (string, error) { signingKey := make([]byte, 32) _, err := util.Rand().Read(signingKey) if err != nil { diff --git a/pkg/api/tls.go b/pkg/api/tls.go index fa45b37fd..ec986af1d 100644 --- a/pkg/api/tls.go +++ b/pkg/api/tls.go @@ -21,70 +21,15 @@ package api import ( - "context" - "crypto/tls" - "time" - - core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" typedCore "k8s.io/client-go/kubernetes/typed/core/v1" - "github.com/arangodb-helper/go-certificates" - - "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util" ) -func prepareTLSConfig(cli typedCore.CoreV1Interface, cfg ServerConfig) (*tls.Config, error) { - cert, key, err := loadOrSelfSignCertificate(cli, cfg) - if err != nil { - return nil, errors.WithStack(err) - } - tlsConfig, err := createTLSConfig(cert, key) - if err != nil { - return nil, errors.WithStack(err) - } - return tlsConfig, nil -} - -// loadOrSelfSignCertificate loads TLS certificate from secret or creates a new one -func loadOrSelfSignCertificate(cli typedCore.CoreV1Interface, cfg ServerConfig) (string, string, error) { +func prepareTLSConfig(cli typedCore.CoreV1Interface, cfg ServerConfig) util.TLSConfigFetcher { if cfg.TLSSecretName != "" { - // Load TLS certificate from secret - s, err := cli.Secrets(cfg.Namespace).Get(context.Background(), cfg.TLSSecretName, meta.GetOptions{}) - if err != nil { - return "", "", err - } - certBytes, found := s.Data[core.TLSCertKey] - if !found { - return "", "", errors.Errorf("No %s found in secret %s", core.TLSCertKey, cfg.TLSSecretName) - } - keyBytes, found := s.Data[core.TLSPrivateKeyKey] - if !found { - return "", "", errors.Errorf("No %s found in secret %s", core.TLSPrivateKeyKey, cfg.TLSSecretName) - } - return string(certBytes), string(keyBytes), nil - } - // Secret not specified, create our own TLS certificate - options := certificates.CreateCertificateOptions{ - CommonName: cfg.ServerName, - Hosts: append([]string{cfg.ServerName}, cfg.ServerAltNames...), - ValidFrom: time.Now(), - ValidFor: time.Hour * 24 * 365 * 10, - IsCA: false, - ECDSACurve: "P256", + return util.NewSecretTLSConfig(cli.Secrets(cfg.Namespace), cfg.TLSSecretName) } - return certificates.CreateCertificate(options, nil) -} -// createTLSConfig creates a TLS config based on given config -func createTLSConfig(cert, key string) (*tls.Config, error) { - var result *tls.Config - c, err := tls.X509KeyPair([]byte(cert), []byte(key)) - if err != nil { - return nil, errors.WithStack(err) - } - result = &tls.Config{ - Certificates: []tls.Certificate{c}, - } - return result, nil + return util.NewSelfSignedTLSConfig(cfg.ServerName, cfg.ServerAltNames...) } diff --git a/pkg/apis/analytics/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/analytics/v1alpha1/zz_generated.deepcopy.go index 80affc286..51ccfe360 100644 --- a/pkg/apis/analytics/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/analytics/v1alpha1/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/apps/v1/zz_generated.deepcopy.go b/pkg/apis/apps/v1/zz_generated.deepcopy.go index fea780283..70a92bda0 100644 --- a/pkg/apis/apps/v1/zz_generated.deepcopy.go +++ b/pkg/apis/apps/v1/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/backup/v1/zz_generated.deepcopy.go b/pkg/apis/backup/v1/zz_generated.deepcopy.go index b56162940..a25562746 100644 --- a/pkg/apis/backup/v1/zz_generated.deepcopy.go +++ b/pkg/apis/backup/v1/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/deployment/v1/compatibility_test.go b/pkg/apis/deployment/v1/compatibility_test.go new file mode 100644 index 000000000..090229555 --- /dev/null +++ b/pkg/apis/deployment/v1/compatibility_test.go @@ -0,0 +1,30 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1 + +import ( + "testing" +) + +func Test_ServerGroupSpecVolumeMount(t *testing.T) { + // TODO: Uncomment after upgrade to 1.31.1+ + // require.NoError(t, types.EnsureTypeForwardCompatibility(reflect.TypeOf(core.VolumeMount{}), reflect.TypeOf(ServerGroupSpecVolumeMount{}))) +} diff --git a/pkg/apis/deployment/v1/server_group_init_containers.go b/pkg/apis/deployment/v1/server_group_init_containers.go index 8cdf4542d..687dcaff7 100644 --- a/pkg/apis/deployment/v1/server_group_init_containers.go +++ b/pkg/apis/deployment/v1/server_group_init_containers.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -58,7 +58,7 @@ type ServerGroupInitContainerMode string func (s *ServerGroupInitContainerMode) Get() ServerGroupInitContainerMode { if s == nil { - return ServerGroupInitContainerUpdateMode // default + return ServerGroupInitContainerDefaultMode // default } return *s @@ -78,6 +78,8 @@ func (s *ServerGroupInitContainerMode) Validate() error { } const ( + // ServerGroupInitContainerDefaultMode default mode + ServerGroupInitContainerDefaultMode = ServerGroupInitContainerIgnoreMode // ServerGroupInitContainerIgnoreMode ignores init container changes in pod recreation flow ServerGroupInitContainerIgnoreMode ServerGroupInitContainerMode = "ignore" // ServerGroupInitContainerUpdateMode enforce update of pod if init container has been changed @@ -91,6 +93,8 @@ type ServerGroupInitContainers struct { Containers []core.Container `json:"containers,omitempty"` // Mode keep container replace mode + // +doc/enum: update|Enforce update of pod if init container has been changed + // +doc/enum: ignore|Ignores init container changes in pod recreation flow Mode *ServerGroupInitContainerMode `json:"mode,omitempty"` } diff --git a/pkg/apis/deployment/v1/server_group_volume_mount.go b/pkg/apis/deployment/v1/server_group_volume_mount.go index bb767f040..f693ff2e2 100644 --- a/pkg/apis/deployment/v1/server_group_volume_mount.go +++ b/pkg/apis/deployment/v1/server_group_volume_mount.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -55,10 +55,66 @@ func (s ServerGroupSpecVolumeMounts) Validate() error { return shared.WithErrors(validateErrors...) } -type ServerGroupSpecVolumeMount core.VolumeMount +type ServerGroupSpecVolumeMount struct { + // This must match the Name of a Volume. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + + // Mounted read-only if true, read-write otherwise (false or unspecified). + // Defaults to false. + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"` + + // RecursiveReadOnly specifies whether read-only mounts should be handled + // recursively. + // + // If ReadOnly is false, this field has no meaning and must be unspecified. + // + // If ReadOnly is true, and this field is set to Disabled, the mount is not made + // recursively read-only. If this field is set to IfPossible, the mount is made + // recursively read-only, if it is supported by the container runtime. If this + // field is set to Enabled, the mount is made recursively read-only if it is + // supported by the container runtime, otherwise the pod will not be started and + // an error will be generated to indicate the reason. + // + // If this field is set to IfPossible or Enabled, MountPropagation must be set to + // None (or be unspecified, which defaults to None). + // + // If this field is not specified, it is treated as an equivalent of Disabled. + // TODO: Uncomment after upgrade to 1.31.1+ + // RecursiveReadOnly *RecursiveReadOnlyMode `json:"recursiveReadOnly,omitempty" protobuf:"bytes,7,opt,name=recursiveReadOnly,casttype=RecursiveReadOnlyMode"` + + // Path within the container at which the volume should be mounted. Must + // not contain ':'. + MountPath string `json:"mountPath" protobuf:"bytes,3,opt,name=mountPath"` + + // Path within the volume from which the container's volume should be mounted. + // Defaults to "" (volume's root). + SubPath string `json:"subPath,omitempty" protobuf:"bytes,4,opt,name=subPath"` + + // mountPropagation determines how mounts are propagated from the host + // to container and the other way around. + // When not set, MountPropagationNone is used. + // This field is beta in 1.10. + // When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + // (which defaults to None). + MountPropagation *core.MountPropagationMode `json:"mountPropagation,omitempty" protobuf:"bytes,5,opt,name=mountPropagation,casttype=MountPropagationMode"` + + // Expanded path within the volume from which the container's volume should be mounted. + // Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + // Defaults to "" (volume's root). + // SubPathExpr and SubPath are mutually exclusive. + SubPathExpr string `json:"subPathExpr,omitempty" protobuf:"bytes,6,opt,name=subPathExpr"` +} func (s ServerGroupSpecVolumeMount) VolumeMount() core.VolumeMount { - return core.VolumeMount(s) + return core.VolumeMount{ + Name: s.Name, + ReadOnly: s.ReadOnly, + //RecursiveReadOnly: s.RecursiveReadOnly, TODO: Uncomment after upgrade to 1.31.1+ + MountPath: s.MountPath, + SubPath: s.SubPath, + MountPropagation: s.MountPropagation, + SubPathExpr: s.SubPathExpr, + } } func (s *ServerGroupSpecVolumeMount) Validate() error { diff --git a/pkg/apis/deployment/v1/tls_sni_spec.go b/pkg/apis/deployment/v1/tls_sni_spec.go index 4e8fc1a48..8d9fcdd4c 100644 --- a/pkg/apis/deployment/v1/tls_sni_spec.go +++ b/pkg/apis/deployment/v1/tls_sni_spec.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,6 +27,12 @@ import ( // TLSSNISpec holds TLS SNI additional certificates type TLSSNISpec struct { + // The mapping of the Server Name Indication options. + // +doc/type: map[string][]string + // +doc/example: mapping: + // +doc/example: secret: + // +doc/example: - domain.example.com + // +doc/link: Server Name Indication|https://docs.arangodb.com/stable/components/arangodb-server/options/#--sslserver-name-indication Mapping map[string][]string `json:"mapping,omitempty"` } diff --git a/pkg/apis/deployment/v1/zz_generated.deepcopy.go b/pkg/apis/deployment/v1/zz_generated.deepcopy.go index 86f9e84bf..c95b967ed 100644 --- a/pkg/apis/deployment/v1/zz_generated.deepcopy.go +++ b/pkg/apis/deployment/v1/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/deployment/v2alpha1/compatibility_test.go b/pkg/apis/deployment/v2alpha1/compatibility_test.go new file mode 100644 index 000000000..92ff8afe5 --- /dev/null +++ b/pkg/apis/deployment/v2alpha1/compatibility_test.go @@ -0,0 +1,30 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v2alpha1 + +import ( + "testing" +) + +func Test_ServerGroupSpecVolumeMount(t *testing.T) { + // TODO: Uncomment after upgrade to 1.31.1+ + // require.NoError(t, types.EnsureTypeForwardCompatibility(reflect.TypeOf(core.VolumeMount{}), reflect.TypeOf(ServerGroupSpecVolumeMount{}))) +} diff --git a/pkg/apis/deployment/v2alpha1/server_group_init_containers.go b/pkg/apis/deployment/v2alpha1/server_group_init_containers.go index fe6fbcacd..c9ffd83a4 100644 --- a/pkg/apis/deployment/v2alpha1/server_group_init_containers.go +++ b/pkg/apis/deployment/v2alpha1/server_group_init_containers.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -58,7 +58,7 @@ type ServerGroupInitContainerMode string func (s *ServerGroupInitContainerMode) Get() ServerGroupInitContainerMode { if s == nil { - return ServerGroupInitContainerUpdateMode // default + return ServerGroupInitContainerDefaultMode // default } return *s @@ -78,6 +78,8 @@ func (s *ServerGroupInitContainerMode) Validate() error { } const ( + // ServerGroupInitContainerDefaultMode default mode + ServerGroupInitContainerDefaultMode = ServerGroupInitContainerIgnoreMode // ServerGroupInitContainerIgnoreMode ignores init container changes in pod recreation flow ServerGroupInitContainerIgnoreMode ServerGroupInitContainerMode = "ignore" // ServerGroupInitContainerUpdateMode enforce update of pod if init container has been changed @@ -91,6 +93,8 @@ type ServerGroupInitContainers struct { Containers []core.Container `json:"containers,omitempty"` // Mode keep container replace mode + // +doc/enum: update|Enforce update of pod if init container has been changed + // +doc/enum: ignore|Ignores init container changes in pod recreation flow Mode *ServerGroupInitContainerMode `json:"mode,omitempty"` } diff --git a/pkg/apis/deployment/v2alpha1/server_group_volume_mount.go b/pkg/apis/deployment/v2alpha1/server_group_volume_mount.go index 2d0fddd66..37312b1f5 100644 --- a/pkg/apis/deployment/v2alpha1/server_group_volume_mount.go +++ b/pkg/apis/deployment/v2alpha1/server_group_volume_mount.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -55,10 +55,66 @@ func (s ServerGroupSpecVolumeMounts) Validate() error { return shared.WithErrors(validateErrors...) } -type ServerGroupSpecVolumeMount core.VolumeMount +type ServerGroupSpecVolumeMount struct { + // This must match the Name of a Volume. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + + // Mounted read-only if true, read-write otherwise (false or unspecified). + // Defaults to false. + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"` + + // RecursiveReadOnly specifies whether read-only mounts should be handled + // recursively. + // + // If ReadOnly is false, this field has no meaning and must be unspecified. + // + // If ReadOnly is true, and this field is set to Disabled, the mount is not made + // recursively read-only. If this field is set to IfPossible, the mount is made + // recursively read-only, if it is supported by the container runtime. If this + // field is set to Enabled, the mount is made recursively read-only if it is + // supported by the container runtime, otherwise the pod will not be started and + // an error will be generated to indicate the reason. + // + // If this field is set to IfPossible or Enabled, MountPropagation must be set to + // None (or be unspecified, which defaults to None). + // + // If this field is not specified, it is treated as an equivalent of Disabled. + // TODO: Uncomment after upgrade to 1.31.1+ + // RecursiveReadOnly *RecursiveReadOnlyMode `json:"recursiveReadOnly,omitempty" protobuf:"bytes,7,opt,name=recursiveReadOnly,casttype=RecursiveReadOnlyMode"` + + // Path within the container at which the volume should be mounted. Must + // not contain ':'. + MountPath string `json:"mountPath" protobuf:"bytes,3,opt,name=mountPath"` + + // Path within the volume from which the container's volume should be mounted. + // Defaults to "" (volume's root). + SubPath string `json:"subPath,omitempty" protobuf:"bytes,4,opt,name=subPath"` + + // mountPropagation determines how mounts are propagated from the host + // to container and the other way around. + // When not set, MountPropagationNone is used. + // This field is beta in 1.10. + // When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + // (which defaults to None). + MountPropagation *core.MountPropagationMode `json:"mountPropagation,omitempty" protobuf:"bytes,5,opt,name=mountPropagation,casttype=MountPropagationMode"` + + // Expanded path within the volume from which the container's volume should be mounted. + // Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + // Defaults to "" (volume's root). + // SubPathExpr and SubPath are mutually exclusive. + SubPathExpr string `json:"subPathExpr,omitempty" protobuf:"bytes,6,opt,name=subPathExpr"` +} func (s ServerGroupSpecVolumeMount) VolumeMount() core.VolumeMount { - return core.VolumeMount(s) + return core.VolumeMount{ + Name: s.Name, + ReadOnly: s.ReadOnly, + //RecursiveReadOnly: s.RecursiveReadOnly, TODO: Uncomment after upgrade to 1.31.1+ + MountPath: s.MountPath, + SubPath: s.SubPath, + MountPropagation: s.MountPropagation, + SubPathExpr: s.SubPathExpr, + } } func (s *ServerGroupSpecVolumeMount) Validate() error { diff --git a/pkg/apis/deployment/v2alpha1/tls_sni_spec.go b/pkg/apis/deployment/v2alpha1/tls_sni_spec.go index dc016a976..aa4bcdb0a 100644 --- a/pkg/apis/deployment/v2alpha1/tls_sni_spec.go +++ b/pkg/apis/deployment/v2alpha1/tls_sni_spec.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,6 +27,12 @@ import ( // TLSSNISpec holds TLS SNI additional certificates type TLSSNISpec struct { + // The mapping of the Server Name Indication options. + // +doc/type: map[string][]string + // +doc/example: mapping: + // +doc/example: secret: + // +doc/example: - domain.example.com + // +doc/link: Server Name Indication|https://docs.arangodb.com/stable/components/arangodb-server/options/#--sslserver-name-indication Mapping map[string][]string `json:"mapping,omitempty"` } diff --git a/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go b/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go index c57528ba7..a2f720ab5 100644 --- a/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/ml/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/ml/v1alpha1/zz_generated.deepcopy.go index fc298c3cf..fed2c5e31 100644 --- a/pkg/apis/ml/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/ml/v1alpha1/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/ml/v1beta1/extension_spec.go b/pkg/apis/ml/v1beta1/extension_spec.go index 0dccbea43..6cb745f3d 100644 --- a/pkg/apis/ml/v1beta1/extension_spec.go +++ b/pkg/apis/ml/v1beta1/extension_spec.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -31,7 +31,7 @@ type ArangoMLExtensionSpec struct { // +doc/immutable: This setting cannot be changed after the MetadataService has been created. MetadataService *ArangoMLExtensionSpecMetadataService `json:"metadataService,omitempty"` - // Storage specifies the ArangoMLStorage used within Extension + // Storage specifies the ArangoMLStorage used within Extension, if extension storage is used Storage *sharedApi.Object `json:"storage,omitempty"` // ArangoMLExtensionTemplate define Init job specification @@ -45,6 +45,11 @@ type ArangoMLExtensionSpec struct { // IntegrationSidecar define the integration sidecar spec IntegrationSidecar *schedulerIntegrationApi.Sidecar `json:"integrationSidecar,omitempty"` + + // ArangoMLExtensionSpecStorageType defines storage used for extension + // +doc/enum: extension|Uses AragoMLStorage + // +doc/enum: platform|Uses AragoPlatformStorage + StorageType *ArangoMLExtensionSpecStorageType `json:"storageType,omitempty"` } func (a *ArangoMLExtensionSpec) GetMetadataService() *ArangoMLExtensionSpecMetadataService { @@ -71,6 +76,14 @@ func (a *ArangoMLExtensionSpec) GetStorage() *sharedApi.Object { return a.Storage } +func (a *ArangoMLExtensionSpec) GetStorageType() ArangoMLExtensionSpecStorageType { + if a == nil { + return ArangoMLExtensionSpecStorageTypeDefault + } + + return a.StorageType.Get() +} + func (a *ArangoMLExtensionSpec) GetDeployment() *ArangoMLExtensionSpecDeployment { if a == nil || a.Deployment == nil { return nil @@ -99,10 +112,17 @@ func (a *ArangoMLExtensionSpec) Validate() error { return shared.WithErrors(shared.PrefixResourceErrors("spec", shared.PrefixResourceErrors("metadataService", a.GetMetadataService().Validate()), - shared.PrefixResourceErrors("storage", shared.ValidateRequired(a.GetStorage(), func(obj sharedApi.Object) error { return obj.Validate() })), + shared.PrefixResourceErrors("storage", func() error { + if a.GetStorageType() == ArangoMLExtensionSpecStorageTypeExtension { + return shared.ValidateRequiredInterface(a.Storage) + } + + return nil + }()), shared.PrefixResourceErrors("init", a.GetInit().Validate()), shared.PrefixResourceErrors("deployment", a.GetDeployment().Validate()), shared.PrefixResourceErrors("jobsTemplates", a.GetJobsTemplates().Validate()), shared.PrefixResourceErrors("integrationSidecar", a.GetIntegrationSidecar().Validate()), + shared.PrefixResourceErrors("storageType", shared.ValidateOptionalInterface(a.StorageType)), )) } diff --git a/pkg/apis/ml/v1beta1/extension_spec_storage_type.go b/pkg/apis/ml/v1beta1/extension_spec_storage_type.go new file mode 100644 index 000000000..6b7f411cf --- /dev/null +++ b/pkg/apis/ml/v1beta1/extension_spec_storage_type.go @@ -0,0 +1,48 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1beta1 + +import "github.com/arangodb/kube-arangodb/pkg/util/errors" + +type ArangoMLExtensionSpecStorageType string + +const ( + ArangoMLExtensionSpecStorageTypeDefault = ArangoMLExtensionSpecStorageTypeExtension + ArangoMLExtensionSpecStorageTypeExtension ArangoMLExtensionSpecStorageType = "extension" + ArangoMLExtensionSpecStorageTypePlatform ArangoMLExtensionSpecStorageType = "platform" +) + +func (a *ArangoMLExtensionSpecStorageType) Get() ArangoMLExtensionSpecStorageType { + if a == nil { + return ArangoMLExtensionSpecStorageTypeDefault + } + + return *a +} + +func (a *ArangoMLExtensionSpecStorageType) Validate() error { + switch t := a.Get(); t { + case ArangoMLExtensionSpecStorageTypeExtension, ArangoMLExtensionSpecStorageTypePlatform: + return nil + default: + return errors.Errorf("Invalid Storage Type: %s", t) + } +} diff --git a/pkg/apis/ml/v1beta1/zz_generated.deepcopy.go b/pkg/apis/ml/v1beta1/zz_generated.deepcopy.go index ee09100a2..3e590ea56 100644 --- a/pkg/apis/ml/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/ml/v1beta1/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -129,6 +129,11 @@ func (in *ArangoMLExtensionSpec) DeepCopyInto(out *ArangoMLExtensionSpec) { *out = new(integration.Sidecar) (*in).DeepCopyInto(*out) } + if in.StorageType != nil { + in, out := &in.StorageType, &out.StorageType + *out = new(ArangoMLExtensionSpecStorageType) + **out = **in + } return } diff --git a/pkg/apis/networking/v1alpha1/route_spec.go b/pkg/apis/networking/v1alpha1/route_spec.go index 6f4fc16e5..dfc945c7a 100644 --- a/pkg/apis/networking/v1alpha1/route_spec.go +++ b/pkg/apis/networking/v1alpha1/route_spec.go @@ -31,10 +31,13 @@ type ArangoRouteSpec struct { // Route defines the route spec Route *ArangoRouteSpecRoute `json:"route,omitempty"` + + // Options defines connection upgrade options + Options *ArangoRouteSpecOptions `json:"options,omitempty"` } func (s *ArangoRouteSpec) GetDeployment() string { - if s == nil || s.Destination == nil { + if s == nil || s.Deployment == nil { return "" } @@ -65,6 +68,7 @@ func (s *ArangoRouteSpec) Validate() error { shared.PrefixResourceErrors("deployment", shared.ValidateResourceNamePointer(s.Deployment)), shared.ValidateRequiredInterfacePath("destination", s.Destination), shared.ValidateOptionalInterfacePath("route", s.Route), + shared.ValidateOptionalInterfacePath("options", s.Options), )); err != nil { return err } diff --git a/pkg/apis/networking/v1alpha1/route_spec_destination.go b/pkg/apis/networking/v1alpha1/route_spec_destination.go index 1dfa0ab75..2366415d3 100644 --- a/pkg/apis/networking/v1alpha1/route_spec_destination.go +++ b/pkg/apis/networking/v1alpha1/route_spec_destination.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,7 +20,12 @@ package v1alpha1 -import shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" +import ( + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" + "github.com/arangodb/kube-arangodb/pkg/util/constants" +) type ArangoRouteSpecDestination struct { // Service defines service upstream reference @@ -30,8 +35,15 @@ type ArangoRouteSpecDestination struct { Endpoints *ArangoRouteSpecDestinationEndpoints `json:"endpoints,omitempty"` // Schema defines HTTP/S schema used for connection + // +doc/enum: http|HTTP Connection + // +doc/enum: https|HTTPS Connection (HTTP with TLS) Schema *ArangoRouteSpecDestinationSchema `json:"schema,omitempty"` + // Protocol defines http protocol used for the route + // +doc/enum: http1|HTTP 1.1 Protocol + // +doc/enum: http2|HTTP 2 Protocol + Protocol *ArangoRouteDestinationProtocol `json:"protocol,omitempty"` + // TLS defines TLS Configuration TLS *ArangoRouteSpecDestinationTLS `json:"tls,omitempty"` @@ -40,6 +52,9 @@ type ArangoRouteSpecDestination struct { // Authentication defines auth methods Authentication *ArangoRouteSpecDestinationAuthentication `json:"authentication,omitempty"` + + // Timeout specify the upstream request timeout + Timeout *meta.Duration `json:"timeout,omitempty"` } func (a *ArangoRouteSpecDestination) GetService() *ArangoRouteSpecDestinationService { @@ -58,6 +73,14 @@ func (a *ArangoRouteSpecDestination) GetEndpoints() *ArangoRouteSpecDestinationE return a.Endpoints } +func (a *ArangoRouteSpecDestination) GetProtocol() *ArangoRouteDestinationProtocol { + if a == nil || a.Protocol == nil { + return nil + } + + return a.Protocol +} + func (a *ArangoRouteSpecDestination) GetSchema() *ArangoRouteSpecDestinationSchema { if a == nil || a.Schema == nil { return nil @@ -74,6 +97,16 @@ func (a *ArangoRouteSpecDestination) GetPath() string { return *a.Path } +func (a *ArangoRouteSpecDestination) GetTimeout() meta.Duration { + if a == nil || a.Timeout == nil { + return meta.Duration{ + Duration: constants.DefaultEnvoyUpstreamTimeout, + } + } + + return *a.Timeout +} + func (a *ArangoRouteSpecDestination) GetTLS() *ArangoRouteSpecDestinationTLS { if a == nil || a.TLS == nil { return nil @@ -100,6 +133,7 @@ func (a *ArangoRouteSpecDestination) Validate() error { shared.ValidateOptionalInterfacePath("service", a.Service), shared.ValidateOptionalInterfacePath("endpoints", a.Endpoints), shared.ValidateOptionalInterfacePath("schema", a.Schema), + shared.ValidateOptionalInterfacePath("protocol", a.Protocol), shared.ValidateOptionalInterfacePath("tls", a.TLS), shared.ValidateOptionalInterfacePath("authentication", a.Authentication), shared.PrefixResourceError("path", shared.ValidateAPIPath(a.GetPath())), diff --git a/pkg/apis/networking/v1alpha1/route_spec_options.go b/pkg/apis/networking/v1alpha1/route_spec_options.go new file mode 100644 index 000000000..1e437f76e --- /dev/null +++ b/pkg/apis/networking/v1alpha1/route_spec_options.go @@ -0,0 +1,52 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" + +type ArangoRouteSpecOptions struct { + // Upgrade keeps the connection upgrade options + Upgrade ArangoRouteSpecOptionsUpgrade `json:"upgrade,omitempty"` +} + +func (a *ArangoRouteSpecOptions) AsStatus() *ArangoRouteStatusTargetOptions { + if a == nil { + return nil + } + + return &ArangoRouteStatusTargetOptions{ + Upgrade: a.Upgrade.asStatus(), + } +} + +func (a *ArangoRouteSpecOptions) Validate() error { + if a == nil { + a = &ArangoRouteSpecOptions{} + } + + if err := shared.WithErrors( + shared.ValidateOptionalInterfacePath("upgrade", a.Upgrade), + ); err != nil { + return err + } + + return nil +} diff --git a/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go b/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go new file mode 100644 index 000000000..fe4fe1f52 --- /dev/null +++ b/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go @@ -0,0 +1,68 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import ( + shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" + "github.com/arangodb/kube-arangodb/pkg/util" +) + +type ArangoRouteSpecOptionsUpgrade []ArangoRouteSpecOptionUpgrade + +func (a ArangoRouteSpecOptionsUpgrade) Validate() error { + return shared.ValidateInterfaceList(a) +} + +func (a ArangoRouteSpecOptionsUpgrade) asStatus() ArangoRouteStatusTargetOptionsUpgrade { + if len(a) == 0 { + return nil + } + + return util.FormatList(a, func(a ArangoRouteSpecOptionUpgrade) ArangoRouteStatusTargetOptionUpgrade { + return a.asStatus() + }) +} + +type ArangoRouteSpecOptionUpgrade struct { + // Type defines type of the Upgrade + // +doc/enum: websocket|HTTP WebSocket Upgrade type + Type ArangoRouteUpgradeOptionType `json:"type"` + + // Enabled defines if upgrade option is enabled + Enabled *bool `json:"enabled,omitempty"` +} + +func (a ArangoRouteSpecOptionUpgrade) asStatus() ArangoRouteStatusTargetOptionUpgrade { + return ArangoRouteStatusTargetOptionUpgrade{ + Type: a.Type, + Enabled: util.NewType(util.WithDefault(a.Enabled)), + } +} + +func (a ArangoRouteSpecOptionUpgrade) Validate() error { + if err := shared.WithErrors( + shared.ValidateRequiredInterfacePath("type", a.Type), + ); err != nil { + return err + } + + return nil +} diff --git a/pkg/apis/networking/v1alpha1/route_spec_protocol.go b/pkg/apis/networking/v1alpha1/route_spec_protocol.go new file mode 100644 index 000000000..d83fceac6 --- /dev/null +++ b/pkg/apis/networking/v1alpha1/route_spec_protocol.go @@ -0,0 +1,55 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import ( + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/strings" +) + +type ArangoRouteDestinationProtocol string + +const ( + ArangoRouteDestinationProtocolHTTP1 ArangoRouteDestinationProtocol = "http1" + ArangoRouteDestinationProtocolHTTP2 ArangoRouteDestinationProtocol = "http2" + ArangoRouteDestinationProtocolDefault = ArangoRouteDestinationProtocolHTTP1 +) + +func (a *ArangoRouteDestinationProtocol) Get() ArangoRouteDestinationProtocol { + if a == nil { + return ArangoRouteDestinationProtocolDefault + } + + return ArangoRouteDestinationProtocol(strings.ToLower(string(*a))) +} + +func (a *ArangoRouteDestinationProtocol) String() string { + return string(a.Get()) +} + +func (a *ArangoRouteDestinationProtocol) Validate() error { + switch x := a.Get(); x { + case ArangoRouteDestinationProtocolHTTP1, ArangoRouteDestinationProtocolHTTP2: + return nil + default: + return errors.Errorf("Invalid schema: %s", x.String()) + } +} diff --git a/pkg/apis/networking/v1alpha1/route_status_target.go b/pkg/apis/networking/v1alpha1/route_status_target.go index 8ec626b07..c166a0525 100644 --- a/pkg/apis/networking/v1alpha1/route_status_target.go +++ b/pkg/apis/networking/v1alpha1/route_status_target.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -23,6 +23,8 @@ package v1alpha1 import ( "fmt" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + "github.com/arangodb/kube-arangodb/pkg/util" ) @@ -34,13 +36,22 @@ type ArangoRouteStatusTarget struct { Type ArangoRouteStatusTargetType `json:"type,omitempty"` // TLS Keeps target TLS Settings (if not nil, TLS is enabled) - TLS *ArangoRouteStatusTargetTLS `json:"TLS,omitempty"` + TLS *ArangoRouteStatusTargetTLS `json:"tls,omitempty"` + + // Protocol defines http protocol used for the route + Protocol ArangoRouteDestinationProtocol `json:"protocol,omitempty"` // Authentication specifies the authentication details Authentication ArangoRouteStatusTargetAuthentication `json:"authentication,omitempty"` + // Options defines connection upgrade options + Options *ArangoRouteStatusTargetOptions `json:"options,omitempty"` + // Path specifies request path override Path string `json:"path,omitempty"` + + // Timeout specify the upstream request timeout + Timeout meta.Duration `json:"timeout,omitempty"` } func (a *ArangoRouteStatusTarget) RenderURLs() []string { @@ -67,5 +78,5 @@ func (a *ArangoRouteStatusTarget) Hash() string { if a == nil { return "" } - return util.SHA256FromStringArray(a.Destinations.Hash(), a.Type.Hash(), a.TLS.Hash(), a.Path, a.Authentication.Hash()) + return util.SHA256FromStringArray(a.Destinations.Hash(), a.Type.Hash(), a.TLS.Hash(), a.Protocol.String(), a.Path, a.Authentication.Hash(), a.Options.Hash(), a.Timeout.String()) } diff --git a/pkg/apis/networking/v1alpha1/route_status_target_options.go b/pkg/apis/networking/v1alpha1/route_status_target_options.go new file mode 100644 index 000000000..6d3816718 --- /dev/null +++ b/pkg/apis/networking/v1alpha1/route_status_target_options.go @@ -0,0 +1,36 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 Statusific language governing permissions and +// limitations under the License. +// +// Copyright holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import "github.com/arangodb/kube-arangodb/pkg/util" + +type ArangoRouteStatusTargetOptions struct { + // Upgrade keeps the connection upgrade options + Upgrade ArangoRouteStatusTargetOptionsUpgrade `json:"upgrade,omitempty"` +} + +func (a *ArangoRouteStatusTargetOptions) Hash() string { + if a == nil { + return "" + } + + return util.SHA256FromStringArray(a.Upgrade.Hash()) +} diff --git a/pkg/apis/networking/v1alpha1/route_status_target_options_upgrade.go b/pkg/apis/networking/v1alpha1/route_status_target_options_upgrade.go new file mode 100644 index 000000000..1463538c7 --- /dev/null +++ b/pkg/apis/networking/v1alpha1/route_status_target_options_upgrade.go @@ -0,0 +1,52 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 Statusific language governing permissions and +// limitations under the License. +// +// Copyright holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import "github.com/arangodb/kube-arangodb/pkg/util" + +type ArangoRouteStatusTargetOptionsUpgrade []ArangoRouteStatusTargetOptionUpgrade + +func (a ArangoRouteStatusTargetOptionsUpgrade) Hash() string { + if len(a) == 0 { + return "" + } + + return util.SHA256FromStringArray(util.FormatList(a, func(a ArangoRouteStatusTargetOptionUpgrade) string { + return a.Hash() + })...) +} + +type ArangoRouteStatusTargetOptionUpgrade struct { + // Type defines type of the Upgrade + // +doc/enum: websocket|HTTP WebSocket Upgrade type + Type ArangoRouteUpgradeOptionType `json:"type"` + + // Enabled defines if upgrade option is enabled + Enabled *bool `json:"enabled,omitempty"` +} + +func (a *ArangoRouteStatusTargetOptionUpgrade) Hash() string { + if a == nil { + return "" + } + + return util.SHA256FromStringArray(string(a.Type), util.BoolSwitch(util.WithDefault(a.Enabled), "true", "false")) +} diff --git a/pkg/apis/networking/v1alpha1/route_upgrade_type.go b/pkg/apis/networking/v1alpha1/route_upgrade_type.go new file mode 100644 index 000000000..8c0691246 --- /dev/null +++ b/pkg/apis/networking/v1alpha1/route_upgrade_type.go @@ -0,0 +1,38 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import "github.com/arangodb/kube-arangodb/pkg/util/errors" + +type ArangoRouteUpgradeOptionType string + +const ( + ArangoRouteUpgradeOptionWebsocket ArangoRouteUpgradeOptionType = "websocket" +) + +func (a ArangoRouteUpgradeOptionType) Validate() error { + switch a { + case ArangoRouteUpgradeOptionWebsocket: + return nil + default: + return errors.Errorf("Invalid UpgradeOptionType: %s", a) + } +} diff --git a/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go index fa67283f8..c6698d399 100644 --- a/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,7 +27,8 @@ package v1alpha1 import ( deploymentv1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - v1 "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1" + sharedv1 "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" runtime "k8s.io/apimachinery/pkg/runtime" intstr "k8s.io/apimachinery/pkg/util/intstr" ) @@ -111,6 +112,11 @@ func (in *ArangoRouteSpec) DeepCopyInto(out *ArangoRouteSpec) { *out = new(ArangoRouteSpecRoute) (*in).DeepCopyInto(*out) } + if in.Options != nil { + in, out := &in.Options, &out.Options + *out = new(ArangoRouteSpecOptions) + (*in).DeepCopyInto(*out) + } return } @@ -142,6 +148,11 @@ func (in *ArangoRouteSpecDestination) DeepCopyInto(out *ArangoRouteSpecDestinati *out = new(ArangoRouteSpecDestinationSchema) **out = **in } + if in.Protocol != nil { + in, out := &in.Protocol, &out.Protocol + *out = new(ArangoRouteDestinationProtocol) + **out = **in + } if in.TLS != nil { in, out := &in.TLS, &out.TLS *out = new(ArangoRouteSpecDestinationTLS) @@ -157,6 +168,11 @@ func (in *ArangoRouteSpecDestination) DeepCopyInto(out *ArangoRouteSpecDestinati *out = new(ArangoRouteSpecDestinationAuthentication) (*in).DeepCopyInto(*out) } + if in.Timeout != nil { + in, out := &in.Timeout, &out.Timeout + *out = new(v1.Duration) + **out = **in + } return } @@ -201,7 +217,7 @@ func (in *ArangoRouteSpecDestinationEndpoints) DeepCopyInto(out *ArangoRouteSpec *out = *in if in.Object != nil { in, out := &in.Object, &out.Object - *out = new(v1.Object) + *out = new(sharedv1.Object) (*in).DeepCopyInto(*out) } if in.Port != nil { @@ -227,7 +243,7 @@ func (in *ArangoRouteSpecDestinationService) DeepCopyInto(out *ArangoRouteSpecDe *out = *in if in.Object != nil { in, out := &in.Object, &out.Object - *out = new(v1.Object) + *out = new(sharedv1.Object) (*in).DeepCopyInto(*out) } if in.Port != nil { @@ -269,6 +285,72 @@ func (in *ArangoRouteSpecDestinationTLS) DeepCopy() *ArangoRouteSpecDestinationT return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoRouteSpecOptionUpgrade) DeepCopyInto(out *ArangoRouteSpecOptionUpgrade) { + *out = *in + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoRouteSpecOptionUpgrade. +func (in *ArangoRouteSpecOptionUpgrade) DeepCopy() *ArangoRouteSpecOptionUpgrade { + if in == nil { + return nil + } + out := new(ArangoRouteSpecOptionUpgrade) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoRouteSpecOptions) DeepCopyInto(out *ArangoRouteSpecOptions) { + *out = *in + if in.Upgrade != nil { + in, out := &in.Upgrade, &out.Upgrade + *out = make(ArangoRouteSpecOptionsUpgrade, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoRouteSpecOptions. +func (in *ArangoRouteSpecOptions) DeepCopy() *ArangoRouteSpecOptions { + if in == nil { + return nil + } + out := new(ArangoRouteSpecOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in ArangoRouteSpecOptionsUpgrade) DeepCopyInto(out *ArangoRouteSpecOptionsUpgrade) { + { + in := &in + *out = make(ArangoRouteSpecOptionsUpgrade, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoRouteSpecOptionsUpgrade. +func (in ArangoRouteSpecOptionsUpgrade) DeepCopy() ArangoRouteSpecOptionsUpgrade { + if in == nil { + return nil + } + out := new(ArangoRouteSpecOptionsUpgrade) + in.DeepCopyInto(out) + return *out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ArangoRouteSpecRoute) DeepCopyInto(out *ArangoRouteSpecRoute) { *out = *in @@ -302,7 +384,7 @@ func (in *ArangoRouteStatus) DeepCopyInto(out *ArangoRouteStatus) { } if in.Deployment != nil { in, out := &in.Deployment, &out.Deployment - *out = new(v1.Object) + *out = new(sharedv1.Object) (*in).DeepCopyInto(*out) } if in.Target != nil { @@ -337,6 +419,12 @@ func (in *ArangoRouteStatusTarget) DeepCopyInto(out *ArangoRouteStatusTarget) { (*in).DeepCopyInto(*out) } out.Authentication = in.Authentication + if in.Options != nil { + in, out := &in.Options, &out.Options + *out = new(ArangoRouteStatusTargetOptions) + (*in).DeepCopyInto(*out) + } + out.Timeout = in.Timeout return } @@ -402,6 +490,72 @@ func (in ArangoRouteStatusTargetDestinations) DeepCopy() ArangoRouteStatusTarget return *out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoRouteStatusTargetOptionUpgrade) DeepCopyInto(out *ArangoRouteStatusTargetOptionUpgrade) { + *out = *in + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoRouteStatusTargetOptionUpgrade. +func (in *ArangoRouteStatusTargetOptionUpgrade) DeepCopy() *ArangoRouteStatusTargetOptionUpgrade { + if in == nil { + return nil + } + out := new(ArangoRouteStatusTargetOptionUpgrade) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoRouteStatusTargetOptions) DeepCopyInto(out *ArangoRouteStatusTargetOptions) { + *out = *in + if in.Upgrade != nil { + in, out := &in.Upgrade, &out.Upgrade + *out = make(ArangoRouteStatusTargetOptionsUpgrade, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoRouteStatusTargetOptions. +func (in *ArangoRouteStatusTargetOptions) DeepCopy() *ArangoRouteStatusTargetOptions { + if in == nil { + return nil + } + out := new(ArangoRouteStatusTargetOptions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in ArangoRouteStatusTargetOptionsUpgrade) DeepCopyInto(out *ArangoRouteStatusTargetOptionsUpgrade) { + { + in := &in + *out = make(ArangoRouteStatusTargetOptionsUpgrade, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoRouteStatusTargetOptionsUpgrade. +func (in ArangoRouteStatusTargetOptionsUpgrade) DeepCopy() ArangoRouteStatusTargetOptionsUpgrade { + if in == nil { + return nil + } + out := new(ArangoRouteStatusTargetOptionsUpgrade) + in.DeepCopyInto(out) + return *out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ArangoRouteStatusTargetTLS) DeepCopyInto(out *ArangoRouteStatusTargetTLS) { *out = *in diff --git a/pkg/apis/platform/definitions.go b/pkg/apis/platform/definitions.go new file mode 100644 index 000000000..aca71e0df --- /dev/null +++ b/pkg/apis/platform/definitions.go @@ -0,0 +1,33 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package platform + +const ( + ArangoPlatformStorageCRDName = ArangoPlatformStorageResourcePlural + "." + ArangoPlatformGroupName + ArangoPlatformStorageResourceKind = "ArangoPlatformStorage" + ArangoPlatformStorageResourcePlural = "arangoplatformstorages" + + ArangoPlatformChartCRDName = ArangoPlatformChartResourcePlural + "." + ArangoPlatformGroupName + ArangoPlatformChartResourceKind = "ArangoPlatformChart" + ArangoPlatformChartResourcePlural = "arangoplatformcharts" + + ArangoPlatformGroupName = "platform.arangodb.com" +) diff --git a/pkg/apis/platform/v1alpha1/chart.go b/pkg/apis/platform/v1alpha1/chart.go new file mode 100644 index 000000000..81dd673c5 --- /dev/null +++ b/pkg/apis/platform/v1alpha1/chart.go @@ -0,0 +1,69 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import ( + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/arangodb/kube-arangodb/pkg/apis/platform" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ArangoPlatformChartList is a list of ArangoPlatform Chart. +type ArangoPlatformChartList struct { + meta.TypeMeta `json:",inline"` + meta.ListMeta `json:"metadata,omitempty"` + + Items []ArangoPlatformChart `json:"items"` +} + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ArangoPlatformChart contains definition and status of the ArangoPlatform Chart. +type ArangoPlatformChart struct { + meta.TypeMeta `json:",inline"` + meta.ObjectMeta `json:"metadata,omitempty"` + + Spec ArangoPlatformChartSpec `json:"spec"` + Status ArangoPlatformChartStatus `json:"status"` +} + +// AsOwner creates an OwnerReference for the given Extension +func (a *ArangoPlatformChart) AsOwner() meta.OwnerReference { + trueVar := true + return meta.OwnerReference{ + APIVersion: SchemeGroupVersion.String(), + Kind: platform.ArangoPlatformChartResourceKind, + Name: a.Name, + UID: a.UID, + Controller: &trueVar, + } +} + +func (a *ArangoPlatformChart) GetStatus() ArangoPlatformChartStatus { + return a.Status +} + +func (a *ArangoPlatformChart) SetStatus(status ArangoPlatformChartStatus) { + a.Status = status +} diff --git a/pkg/apis/platform/v1alpha1/chart_details.go b/pkg/apis/platform/v1alpha1/chart_details.go new file mode 100644 index 000000000..0be1f3edf --- /dev/null +++ b/pkg/apis/platform/v1alpha1/chart_details.go @@ -0,0 +1,51 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +type ChartDetails struct { + Name string `json:"name,omitempty"` + Version string `json:"version,omitempty"` + Platform *ChartDetailsPlatform `json:"platform,omitempty"` +} + +func (c *ChartDetails) GetPlatform() *ChartDetailsPlatform { + if c == nil { + return nil + } + + return c.Platform +} + +func (c *ChartDetails) GetName() string { + if c == nil { + return "" + } + + return c.Name +} + +func (c *ChartDetails) GetVersion() string { + if c == nil { + return "" + } + + return c.Version +} diff --git a/pkg/apis/platform/v1alpha1/chart_details_platform.go b/pkg/apis/platform/v1alpha1/chart_details_platform.go new file mode 100644 index 000000000..ca7ffe4aa --- /dev/null +++ b/pkg/apis/platform/v1alpha1/chart_details_platform.go @@ -0,0 +1,33 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +type ChartDetailsPlatform struct { + Requirements ChartDetailsPlatformRequirements `json:"requirements,omitempty"` +} + +func (c *ChartDetailsPlatform) GetRequirements() ChartDetailsPlatformRequirements { + if c == nil { + return nil + } + + return c.Requirements +} diff --git a/pkg/apis/platform/v1alpha1/chart_details_platform_version.go b/pkg/apis/platform/v1alpha1/chart_details_platform_version.go new file mode 100644 index 000000000..2e261b254 --- /dev/null +++ b/pkg/apis/platform/v1alpha1/chart_details_platform_version.go @@ -0,0 +1,37 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import ( + "github.com/arangodb/kube-arangodb/pkg/util" +) + +type ChartDetailsPlatformRequirements map[string]ChartDetailsPlatformVersionConstrain + +type ChartDetailsPlatformVersionConstrain string + +func (c *ChartDetailsPlatformVersionConstrain) AsSemverConstrain() (util.VersionConstrain, error) { + if c == nil { + return nil, nil + } + + return util.NewVersionConstrain(string(*c)) +} diff --git a/pkg/apis/platform/v1alpha1/chart_spec.go b/pkg/apis/platform/v1alpha1/chart_spec.go new file mode 100644 index 000000000..3ba88a369 --- /dev/null +++ b/pkg/apis/platform/v1alpha1/chart_spec.go @@ -0,0 +1,43 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import ( + shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" + sharedApi "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1" + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +type ArangoPlatformChartSpec struct { + Definition sharedApi.Data `json:"definition,omitempty"` +} + +func (c *ArangoPlatformChartSpec) Validate() error { + if c == nil { + return errors.Errorf("Nil spec not allowed") + } + + if len(c.Definition) == 0 { + return shared.PrefixResourceError("definition", errors.Errorf("Chart definition cannot be empty")) + } + + return nil +} diff --git a/pkg/apis/platform/v1alpha1/chart_status.go b/pkg/apis/platform/v1alpha1/chart_status.go new file mode 100644 index 000000000..ac339703b --- /dev/null +++ b/pkg/apis/platform/v1alpha1/chart_status.go @@ -0,0 +1,33 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import ( + api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" +) + +type ArangoPlatformChartStatus struct { + Info *ChartStatusInfo `json:"info,omitempty"` + + // Conditions specific to the entire storage + // +doc/type: api.Conditions + Conditions api.ConditionList `json:"conditions,omitempty"` +} diff --git a/pkg/apis/platform/v1alpha1/chart_status_info.go b/pkg/apis/platform/v1alpha1/chart_status_info.go new file mode 100644 index 000000000..2ba370c15 --- /dev/null +++ b/pkg/apis/platform/v1alpha1/chart_status_info.go @@ -0,0 +1,33 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import sharedApi "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1" + +type ChartStatusInfo struct { + Definition sharedApi.Data `json:"definition,omitempty"` + Checksum string `json:"checksum,omitempty"` + + Valid bool `json:"valid,omitempty"` + Message string `json:"message,omitempty"` + + Details *ChartDetails `json:"details,omitempty"` +} diff --git a/pkg/apis/platform/v1alpha1/conditions.go b/pkg/apis/platform/v1alpha1/conditions.go new file mode 100644 index 000000000..39581c2a5 --- /dev/null +++ b/pkg/apis/platform/v1alpha1/conditions.go @@ -0,0 +1,29 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + +const ( + DeploymentFoundCondition api.ConditionType = "DeploymentFound" + SpecValidCondition api.ConditionType = "SpecValid" + ReadyCondition api.ConditionType = "Ready" +) diff --git a/pkg/apis/platform/v1alpha1/doc.go b/pkg/apis/platform/v1alpha1/doc.go new file mode 100644 index 000000000..fcb260c4d --- /dev/null +++ b/pkg/apis/platform/v1alpha1/doc.go @@ -0,0 +1,23 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// +k8s:deepcopy-gen=package +// +groupName=platform.arangodb.com +package v1alpha1 diff --git a/pkg/apis/platform/v1alpha1/register.go b/pkg/apis/platform/v1alpha1/register.go new file mode 100644 index 000000000..d4fe51782 --- /dev/null +++ b/pkg/apis/platform/v1alpha1/register.go @@ -0,0 +1,57 @@ +// +// DISCLAIMER +// +// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import ( + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + + "github.com/arangodb/kube-arangodb/pkg/apis/platform" +) + +const ( + ArangoPlatformVersion = "v1alpha1" +) + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme + + SchemeGroupVersion = schema.GroupVersion{Group: platform.ArangoPlatformGroupName, Version: ArangoPlatformVersion} +) + +// Resource gets an ArangoCluster GroupResource for a specified resource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +// addKnownTypes adds the set of types defined in this package to the supplied scheme. +func addKnownTypes(s *runtime.Scheme) error { + s.AddKnownTypes(SchemeGroupVersion, + &ArangoPlatformStorage{}, + &ArangoPlatformStorageList{}, + &ArangoPlatformChart{}, + &ArangoPlatformChartList{}, + ) + meta.AddToGroupVersion(s, SchemeGroupVersion) + return nil +} diff --git a/pkg/apis/platform/v1alpha1/storage.go b/pkg/apis/platform/v1alpha1/storage.go new file mode 100644 index 000000000..eed2b2450 --- /dev/null +++ b/pkg/apis/platform/v1alpha1/storage.go @@ -0,0 +1,69 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import ( + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/arangodb/kube-arangodb/pkg/apis/platform" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ArangoPlatformStorageList is a list of ArangoPlatform Storage. +type ArangoPlatformStorageList struct { + meta.TypeMeta `json:",inline"` + meta.ListMeta `json:"metadata,omitempty"` + + Items []ArangoPlatformStorage `json:"items"` +} + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ArangoPlatformStorage contains definition and status of the ArangoPlatform Storage. +type ArangoPlatformStorage struct { + meta.TypeMeta `json:",inline"` + meta.ObjectMeta `json:"metadata,omitempty"` + + Spec ArangoPlatformStorageSpec `json:"spec"` + Status ArangoPlatformStorageStatus `json:"status"` +} + +// AsOwner creates an OwnerReference for the given Extension +func (a *ArangoPlatformStorage) AsOwner() meta.OwnerReference { + trueVar := true + return meta.OwnerReference{ + APIVersion: SchemeGroupVersion.String(), + Kind: platform.ArangoPlatformStorageResourceKind, + Name: a.Name, + UID: a.UID, + Controller: &trueVar, + } +} + +func (a *ArangoPlatformStorage) GetStatus() ArangoPlatformStorageStatus { + return a.Status +} + +func (a *ArangoPlatformStorage) SetStatus(status ArangoPlatformStorageStatus) { + a.Status = status +} diff --git a/pkg/apis/platform/v1alpha1/storage_spec.go b/pkg/apis/platform/v1alpha1/storage_spec.go new file mode 100644 index 000000000..dfc22d46e --- /dev/null +++ b/pkg/apis/platform/v1alpha1/storage_spec.go @@ -0,0 +1,51 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import ( + shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" +) + +type ArangoPlatformStorageSpec struct { + // Backend defines how storage is implemented + Backend *ArangoPlatformStorageSpecBackend `json:"backend,omitempty"` +} + +func (s *ArangoPlatformStorageSpec) GetBackend() *ArangoPlatformStorageSpecBackend { + if s == nil || s.Backend == nil { + return nil + } + return s.Backend +} + +func (s *ArangoPlatformStorageSpec) Validate() error { + if s == nil { + s = &ArangoPlatformStorageSpec{} + } + + if err := shared.WithErrors(shared.PrefixResourceErrors("spec", + shared.PrefixResourceError("backend", s.Backend.Validate()), + )); err != nil { + return err + } + + return nil +} diff --git a/pkg/apis/platform/v1alpha1/storage_spec_backend.go b/pkg/apis/platform/v1alpha1/storage_spec_backend.go new file mode 100644 index 000000000..0ccaefa43 --- /dev/null +++ b/pkg/apis/platform/v1alpha1/storage_spec_backend.go @@ -0,0 +1,50 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import ( + shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +type ArangoPlatformStorageSpecBackend struct { + // S3 backend implements storage as a proxy to the provided S3 API endpoint + S3 *ArangoPlatformStorageSpecBackendS3 `json:"s3,omitempty"` +} + +func (s *ArangoPlatformStorageSpecBackend) GetS3() *ArangoPlatformStorageSpecBackendS3 { + if s == nil || s.S3 == nil { + return nil + } + return s.S3 +} + +func (s *ArangoPlatformStorageSpecBackend) Validate() error { + if s == nil { + return errors.Errorf("Backend is not specified") + } + + if s.S3 == nil { + return errors.Errorf("At least one backend needs to be defined") + } + + return shared.WithErrors(shared.PrefixResourceError("s3", s.S3.Validate())) +} diff --git a/pkg/apis/platform/v1alpha1/storage_spec_backend_s3.go b/pkg/apis/platform/v1alpha1/storage_spec_backend_s3.go new file mode 100644 index 000000000..daf16ea0a --- /dev/null +++ b/pkg/apis/platform/v1alpha1/storage_spec_backend_s3.go @@ -0,0 +1,132 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import ( + "net/url" + + shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" + sharedApi "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1" + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +type ArangoPlatformStorageSpecBackendS3 struct { + // BucketName specifies the name of the bucket + // Required + BucketName *string `json:"bucketName,omitempty"` + // BucketPath specifies the Prefix within the bucket + // +doc/default: + BucketPrefix *string `json:"bucketPath,omitempty"` + // Endpoint specifies the S3 API-compatible endpoint which implements storage + // Required + Endpoint *string `json:"endpoint"` + // CredentialsSecret specifies the Kubernetes Secret containing AccessKey and SecretKey for S3 API authorization + // Required + CredentialsSecret *sharedApi.Object `json:"credentialsSecret"` + // AllowInsecure if set to true, the Endpoint certificates won't be checked + // +doc/default: false + AllowInsecure *bool `json:"allowInsecure,omitempty"` + // CASecret if not empty, the given Kubernetes Secret will be used to check the authenticity of Endpoint + // The specified Secret, must contain the following data fields: + // - `ca.crt` PEM encoded public key of the CA certificate + // - `ca.key` PEM encoded private key of the CA certificate + // +doc/default: nil + CASecret *sharedApi.Object `json:"caSecret,omitempty"` + // Region defines the availability zone name. + // +doc/default: "" + Region *string `json:"region,omitempty"` +} + +func (s *ArangoPlatformStorageSpecBackendS3) Validate() error { + if s == nil { + s = &ArangoPlatformStorageSpecBackendS3{} + } + + var errs []error + + if s.GetEndpoint() == "" { + errs = append(errs, shared.PrefixResourceErrors("endpoint", errors.New("must be not empty"))) + } + + if _, err := url.Parse(s.GetEndpoint()); err != nil { + errs = append(errs, shared.PrefixResourceErrors("endpoint", errors.Errorf("invalid URL: %s", err.Error()))) + } + + errs = append(errs, + shared.PrefixResourceErrors("credentialsSecret", s.GetCredentialsSecret().Validate()), + shared.PrefixResourceError("bucket", shared.ValidateRequired(s.BucketName, shared.ValidateResourceName)), + ) + + if caSecret := s.GetCASecret(); !caSecret.IsEmpty() { + errs = append(errs, shared.PrefixResourceErrors("caSecret", caSecret.Validate())) + } + + return shared.WithErrors(errs...) +} + +func (s *ArangoPlatformStorageSpecBackendS3) GetBucketName() string { + if s == nil || s.BucketName == nil { + return "" + } + return *s.BucketName +} + +func (s *ArangoPlatformStorageSpecBackendS3) GetBucketPrefix() string { + if s == nil || s.BucketPrefix == nil { + return "" + } + return *s.BucketPrefix +} + +func (s *ArangoPlatformStorageSpecBackendS3) GetEndpoint() string { + if s == nil || s.Endpoint == nil { + return "" + } + return *s.Endpoint +} + +func (s *ArangoPlatformStorageSpecBackendS3) GetCredentialsSecret() *sharedApi.Object { + if s == nil || s.CredentialsSecret == nil { + return &sharedApi.Object{} + } + return s.CredentialsSecret +} + +func (s *ArangoPlatformStorageSpecBackendS3) GetAllowInsecure() bool { + if s == nil || s.AllowInsecure == nil { + return false + } + return *s.AllowInsecure +} + +func (s *ArangoPlatformStorageSpecBackendS3) GetCASecret() *sharedApi.Object { + if s == nil || s.CASecret == nil { + return &sharedApi.Object{} + } + return s.CASecret +} + +func (s *ArangoPlatformStorageSpecBackendS3) GetRegion() string { + if s == nil || s.Region == nil { + return "" + } + return *s.Region +} diff --git a/pkg/apis/platform/v1alpha1/storage_spec_mode.go b/pkg/apis/platform/v1alpha1/storage_spec_mode.go new file mode 100644 index 000000000..745af355f --- /dev/null +++ b/pkg/apis/platform/v1alpha1/storage_spec_mode.go @@ -0,0 +1,60 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import ( + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +type ArangoPlatformStorageSpecModeType int + +const ( + ArangoPlatformStorageSpecModeTypeUnknown ArangoPlatformStorageSpecModeType = iota + ArangoPlatformStorageSpecModeTypeSidecar +) + +type ArangoPlatformStorageSpecMode struct { + // Sidecar mode runs the storage implementation as a sidecar + Sidecar *ArangoPlatformStorageSpecModeSidecar `json:"sidecar,omitempty"` +} + +func (s *ArangoPlatformStorageSpecMode) GetSidecar() *ArangoPlatformStorageSpecModeSidecar { + if s == nil || s.Sidecar == nil { + return nil + } + return s.Sidecar +} + +func (s *ArangoPlatformStorageSpecMode) GetType() ArangoPlatformStorageSpecModeType { + return ArangoPlatformStorageSpecModeTypeSidecar +} + +func (s *ArangoPlatformStorageSpecMode) Validate() error { + if s == nil { + s = &ArangoPlatformStorageSpecMode{} + } + + if s.GetType() == ArangoPlatformStorageSpecModeTypeUnknown { + return errors.Errorf("Unknown mode type") + } + + return nil +} diff --git a/pkg/apis/platform/v1alpha1/storage_spec_mode_sidecar.go b/pkg/apis/platform/v1alpha1/storage_spec_mode_sidecar.go new file mode 100644 index 000000000..2b4dbf91f --- /dev/null +++ b/pkg/apis/platform/v1alpha1/storage_spec_mode_sidecar.go @@ -0,0 +1,24 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +type ArangoPlatformStorageSpecModeSidecar struct { +} diff --git a/pkg/apis/platform/v1alpha1/storage_spec_test.go b/pkg/apis/platform/v1alpha1/storage_spec_test.go new file mode 100644 index 000000000..514448356 --- /dev/null +++ b/pkg/apis/platform/v1alpha1/storage_spec_test.go @@ -0,0 +1,51 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1alpha1 + +import ( + "testing" + + "github.com/stretchr/testify/require" + + sharedApi "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1" + "github.com/arangodb/kube-arangodb/pkg/util" +) + +func Test_ArangoPlatformStorageSpec(t *testing.T) { + s := ArangoPlatformStorageSpec{} + require.Nil(t, s.GetBackend()) + require.Error(t, s.Validate()) + + s.Backend = &ArangoPlatformStorageSpecBackend{} + require.Nil(t, s.Backend.GetS3()) + require.Error(t, s.Validate()) + + require.Error(t, s.Backend.S3.Validate()) + s.Backend.S3 = &ArangoPlatformStorageSpecBackendS3{ + Endpoint: util.NewType("http://test.s3.example.com"), + CredentialsSecret: &sharedApi.Object{ + Name: "a-secret", + Namespace: nil, + }, + BucketName: util.NewType("bucket"), + } + require.NoError(t, s.Validate()) +} diff --git a/pkg/util/k8sutil/inspector/arangomember/v1/filters.go b/pkg/apis/platform/v1alpha1/storage_status.go similarity index 72% rename from pkg/util/k8sutil/inspector/arangomember/v1/filters.go rename to pkg/apis/platform/v1alpha1/storage_status.go index 13510eda5..b505edb54 100644 --- a/pkg/util/k8sutil/inspector/arangomember/v1/filters.go +++ b/pkg/apis/platform/v1alpha1/storage_status.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,16 +18,14 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package v1alpha1 import ( - "k8s.io/apimachinery/pkg/types" - api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" ) -func FilterByDeploymentUID(uid types.UID) Filter { - return func(pod *api.ArangoMember) bool { - return pod.Spec.DeploymentUID == "" || pod.Spec.DeploymentUID == uid - } +type ArangoPlatformStorageStatus struct { + // Conditions specific to the entire storage + // +doc/type: api.Conditions + Conditions api.ConditionList `json:"conditions,omitempty"` } diff --git a/pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 000000000..a325e8aa6 --- /dev/null +++ b/pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,448 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + deploymentv1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + v1 "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoPlatformChart) DeepCopyInto(out *ArangoPlatformChart) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformChart. +func (in *ArangoPlatformChart) DeepCopy() *ArangoPlatformChart { + if in == nil { + return nil + } + out := new(ArangoPlatformChart) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ArangoPlatformChart) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoPlatformChartList) DeepCopyInto(out *ArangoPlatformChartList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ArangoPlatformChart, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformChartList. +func (in *ArangoPlatformChartList) DeepCopy() *ArangoPlatformChartList { + if in == nil { + return nil + } + out := new(ArangoPlatformChartList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ArangoPlatformChartList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoPlatformChartSpec) DeepCopyInto(out *ArangoPlatformChartSpec) { + *out = *in + if in.Definition != nil { + in, out := &in.Definition, &out.Definition + *out = make(v1.Data, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformChartSpec. +func (in *ArangoPlatformChartSpec) DeepCopy() *ArangoPlatformChartSpec { + if in == nil { + return nil + } + out := new(ArangoPlatformChartSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoPlatformChartStatus) DeepCopyInto(out *ArangoPlatformChartStatus) { + *out = *in + if in.Info != nil { + in, out := &in.Info, &out.Info + *out = new(ChartStatusInfo) + (*in).DeepCopyInto(*out) + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make(deploymentv1.ConditionList, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformChartStatus. +func (in *ArangoPlatformChartStatus) DeepCopy() *ArangoPlatformChartStatus { + if in == nil { + return nil + } + out := new(ArangoPlatformChartStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoPlatformStorage) DeepCopyInto(out *ArangoPlatformStorage) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformStorage. +func (in *ArangoPlatformStorage) DeepCopy() *ArangoPlatformStorage { + if in == nil { + return nil + } + out := new(ArangoPlatformStorage) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ArangoPlatformStorage) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoPlatformStorageList) DeepCopyInto(out *ArangoPlatformStorageList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ArangoPlatformStorage, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformStorageList. +func (in *ArangoPlatformStorageList) DeepCopy() *ArangoPlatformStorageList { + if in == nil { + return nil + } + out := new(ArangoPlatformStorageList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ArangoPlatformStorageList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoPlatformStorageSpec) DeepCopyInto(out *ArangoPlatformStorageSpec) { + *out = *in + if in.Backend != nil { + in, out := &in.Backend, &out.Backend + *out = new(ArangoPlatformStorageSpecBackend) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformStorageSpec. +func (in *ArangoPlatformStorageSpec) DeepCopy() *ArangoPlatformStorageSpec { + if in == nil { + return nil + } + out := new(ArangoPlatformStorageSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoPlatformStorageSpecBackend) DeepCopyInto(out *ArangoPlatformStorageSpecBackend) { + *out = *in + if in.S3 != nil { + in, out := &in.S3, &out.S3 + *out = new(ArangoPlatformStorageSpecBackendS3) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformStorageSpecBackend. +func (in *ArangoPlatformStorageSpecBackend) DeepCopy() *ArangoPlatformStorageSpecBackend { + if in == nil { + return nil + } + out := new(ArangoPlatformStorageSpecBackend) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoPlatformStorageSpecBackendS3) DeepCopyInto(out *ArangoPlatformStorageSpecBackendS3) { + *out = *in + if in.BucketName != nil { + in, out := &in.BucketName, &out.BucketName + *out = new(string) + **out = **in + } + if in.BucketPrefix != nil { + in, out := &in.BucketPrefix, &out.BucketPrefix + *out = new(string) + **out = **in + } + if in.Endpoint != nil { + in, out := &in.Endpoint, &out.Endpoint + *out = new(string) + **out = **in + } + if in.CredentialsSecret != nil { + in, out := &in.CredentialsSecret, &out.CredentialsSecret + *out = new(v1.Object) + (*in).DeepCopyInto(*out) + } + if in.AllowInsecure != nil { + in, out := &in.AllowInsecure, &out.AllowInsecure + *out = new(bool) + **out = **in + } + if in.CASecret != nil { + in, out := &in.CASecret, &out.CASecret + *out = new(v1.Object) + (*in).DeepCopyInto(*out) + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformStorageSpecBackendS3. +func (in *ArangoPlatformStorageSpecBackendS3) DeepCopy() *ArangoPlatformStorageSpecBackendS3 { + if in == nil { + return nil + } + out := new(ArangoPlatformStorageSpecBackendS3) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoPlatformStorageSpecMode) DeepCopyInto(out *ArangoPlatformStorageSpecMode) { + *out = *in + if in.Sidecar != nil { + in, out := &in.Sidecar, &out.Sidecar + *out = new(ArangoPlatformStorageSpecModeSidecar) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformStorageSpecMode. +func (in *ArangoPlatformStorageSpecMode) DeepCopy() *ArangoPlatformStorageSpecMode { + if in == nil { + return nil + } + out := new(ArangoPlatformStorageSpecMode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoPlatformStorageSpecModeSidecar) DeepCopyInto(out *ArangoPlatformStorageSpecModeSidecar) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformStorageSpecModeSidecar. +func (in *ArangoPlatformStorageSpecModeSidecar) DeepCopy() *ArangoPlatformStorageSpecModeSidecar { + if in == nil { + return nil + } + out := new(ArangoPlatformStorageSpecModeSidecar) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ArangoPlatformStorageStatus) DeepCopyInto(out *ArangoPlatformStorageStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make(deploymentv1.ConditionList, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformStorageStatus. +func (in *ArangoPlatformStorageStatus) DeepCopy() *ArangoPlatformStorageStatus { + if in == nil { + return nil + } + out := new(ArangoPlatformStorageStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartDetails) DeepCopyInto(out *ChartDetails) { + *out = *in + if in.Platform != nil { + in, out := &in.Platform, &out.Platform + *out = new(ChartDetailsPlatform) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartDetails. +func (in *ChartDetails) DeepCopy() *ChartDetails { + if in == nil { + return nil + } + out := new(ChartDetails) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartDetailsPlatform) DeepCopyInto(out *ChartDetailsPlatform) { + *out = *in + if in.Requirements != nil { + in, out := &in.Requirements, &out.Requirements + *out = make(ChartDetailsPlatformRequirements, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartDetailsPlatform. +func (in *ChartDetailsPlatform) DeepCopy() *ChartDetailsPlatform { + if in == nil { + return nil + } + out := new(ChartDetailsPlatform) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in ChartDetailsPlatformRequirements) DeepCopyInto(out *ChartDetailsPlatformRequirements) { + { + in := &in + *out = make(ChartDetailsPlatformRequirements, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartDetailsPlatformRequirements. +func (in ChartDetailsPlatformRequirements) DeepCopy() ChartDetailsPlatformRequirements { + if in == nil { + return nil + } + out := new(ChartDetailsPlatformRequirements) + in.DeepCopyInto(out) + return *out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ChartStatusInfo) DeepCopyInto(out *ChartStatusInfo) { + *out = *in + if in.Definition != nil { + in, out := &in.Definition, &out.Definition + *out = make(v1.Data, len(*in)) + copy(*out, *in) + } + if in.Details != nil { + in, out := &in.Details, &out.Details + *out = new(ChartDetails) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartStatusInfo. +func (in *ChartStatusInfo) DeepCopy() *ChartStatusInfo { + if in == nil { + return nil + } + out := new(ChartStatusInfo) + in.DeepCopyInto(out) + return out +} diff --git a/pkg/apis/replication/v1/zz_generated.deepcopy.go b/pkg/apis/replication/v1/zz_generated.deepcopy.go index 043945506..8add038f7 100644 --- a/pkg/apis/replication/v1/zz_generated.deepcopy.go +++ b/pkg/apis/replication/v1/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/replication/v2alpha1/zz_generated.deepcopy.go b/pkg/apis/replication/v2alpha1/zz_generated.deepcopy.go index b6fe27dcf..36f694bdd 100644 --- a/pkg/apis/replication/v2alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/replication/v2alpha1/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/scheduler/v1alpha1/container/resources/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1alpha1/container/resources/zz_generated.deepcopy.go index 1a201856b..07b9cc92a 100644 --- a/pkg/apis/scheduler/v1alpha1/container/resources/zz_generated.deepcopy.go +++ b/pkg/apis/scheduler/v1alpha1/container/resources/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/scheduler/v1alpha1/container/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1alpha1/container/zz_generated.deepcopy.go index 3d2ef582c..d7ff2e784 100644 --- a/pkg/apis/scheduler/v1alpha1/container/zz_generated.deepcopy.go +++ b/pkg/apis/scheduler/v1alpha1/container/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/scheduler/v1alpha1/pod/resources/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1alpha1/pod/resources/zz_generated.deepcopy.go index b35c27c24..1ce4ac447 100644 --- a/pkg/apis/scheduler/v1alpha1/pod/resources/zz_generated.deepcopy.go +++ b/pkg/apis/scheduler/v1alpha1/pod/resources/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/scheduler/v1alpha1/pod/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1alpha1/pod/zz_generated.deepcopy.go index 5274a706e..75bac775b 100644 --- a/pkg/apis/scheduler/v1alpha1/pod/zz_generated.deepcopy.go +++ b/pkg/apis/scheduler/v1alpha1/pod/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/scheduler/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1alpha1/zz_generated.deepcopy.go index 19ef99b6f..9636afee9 100644 --- a/pkg/apis/scheduler/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/scheduler/v1alpha1/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/scheduler/v1beta1/container/resources/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1beta1/container/resources/zz_generated.deepcopy.go index a73ccbc03..ff0d9cd5c 100644 --- a/pkg/apis/scheduler/v1beta1/container/resources/zz_generated.deepcopy.go +++ b/pkg/apis/scheduler/v1beta1/container/resources/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/scheduler/v1beta1/container/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1beta1/container/zz_generated.deepcopy.go index 49e97e42a..1e95a0448 100644 --- a/pkg/apis/scheduler/v1beta1/container/zz_generated.deepcopy.go +++ b/pkg/apis/scheduler/v1beta1/container/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/scheduler/v1beta1/integration/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1beta1/integration/zz_generated.deepcopy.go index 43fad9d96..7d9ee1e90 100644 --- a/pkg/apis/scheduler/v1beta1/integration/zz_generated.deepcopy.go +++ b/pkg/apis/scheduler/v1beta1/integration/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/scheduler/v1beta1/pod/resources/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1beta1/pod/resources/zz_generated.deepcopy.go index b35c27c24..1ce4ac447 100644 --- a/pkg/apis/scheduler/v1beta1/pod/resources/zz_generated.deepcopy.go +++ b/pkg/apis/scheduler/v1beta1/pod/resources/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/scheduler/v1beta1/pod/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1beta1/pod/zz_generated.deepcopy.go index d6707e5e8..dc4de1962 100644 --- a/pkg/apis/scheduler/v1beta1/pod/zz_generated.deepcopy.go +++ b/pkg/apis/scheduler/v1beta1/pod/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/scheduler/v1beta1/policy/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1beta1/policy/zz_generated.deepcopy.go index f6e8848b3..d0945ea2a 100644 --- a/pkg/apis/scheduler/v1beta1/policy/zz_generated.deepcopy.go +++ b/pkg/apis/scheduler/v1beta1/policy/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/scheduler/v1beta1/profile_container_template.go b/pkg/apis/scheduler/v1beta1/profile_container_template.go index 37634dad4..9c5f27233 100644 --- a/pkg/apis/scheduler/v1beta1/profile_container_template.go +++ b/pkg/apis/scheduler/v1beta1/profile_container_template.go @@ -28,8 +28,10 @@ import ( ) type ProfileContainerTemplate struct { + // Containers applies values per container Containers schedulerContainerApi.Containers `json:"containers,omitempty"` + // All applies generic values to all Containers All *schedulerContainerApi.Generic `json:"all,omitempty"` } diff --git a/pkg/apis/scheduler/v1beta1/profile_template.go b/pkg/apis/scheduler/v1beta1/profile_template.go index 7efd7cc1f..f85c818c4 100644 --- a/pkg/apis/scheduler/v1beta1/profile_template.go +++ b/pkg/apis/scheduler/v1beta1/profile_template.go @@ -29,10 +29,14 @@ import ( ) type ProfileTemplate struct { + // Priority defines Priority of the Profile. Higher value means Profile will get applied first. + // If Priority across Profiles is same, Profiles are also sorted by name. Priority *int `json:"priority,omitempty"` + // Pod Template Pod *schedulerPodApi.Pod `json:"pod,omitempty"` + // Container Template Container *ProfileContainerTemplate `json:"container,omitempty"` } diff --git a/pkg/apis/scheduler/v1beta1/types_deployment.go b/pkg/apis/scheduler/v1beta1/types_deployment.go index ea5ffb6c7..35d1470d7 100644 --- a/pkg/apis/scheduler/v1beta1/types_deployment.go +++ b/pkg/apis/scheduler/v1beta1/types_deployment.go @@ -38,6 +38,8 @@ type ArangoSchedulerDeploymentList struct { } // +genclient +// +genclient:method=GetScale,verb=get,subresource=scale,result=k8s.io/api/autoscaling/v1.Scale +// +genclient:method=UpdateScale,verb=update,subresource=scale,input=k8s.io/api/autoscaling/v1.Scale,result=k8s.io/api/autoscaling/v1.Scale // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // ArangoSchedulerDeployment wraps apps. ArangoSchedulerDeployment with profile details diff --git a/pkg/apis/scheduler/v1beta1/zz_generated.deepcopy.go b/pkg/apis/scheduler/v1beta1/zz_generated.deepcopy.go index 798dac8e1..4339c3a37 100644 --- a/pkg/apis/scheduler/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/scheduler/v1beta1/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/apis/shared/errors.go b/pkg/apis/shared/errors.go index 9e15af9da..6887b53c4 100644 --- a/pkg/apis/shared/errors.go +++ b/pkg/apis/shared/errors.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -53,6 +53,11 @@ func (p *ResourceError) Format(s fmt.State, verb rune) { } } +// PrefixResourceErrorFunc creates new prefixed error from func output. If error is already prefixed then current key is appended +func PrefixResourceErrorFunc(prefix string, f func() error) error { + return PrefixResourceError(prefix, f()) +} + // PrefixResourceError creates new prefixed error. If error is already prefixed then current key is appended func PrefixResourceError(prefix string, err error) error { if err == nil { diff --git a/pkg/apis/shared/v1/data.go b/pkg/apis/shared/v1/data.go new file mode 100644 index 000000000..11d9c83b7 --- /dev/null +++ b/pkg/apis/shared/v1/data.go @@ -0,0 +1,65 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1 + +import ( + "encoding/base64" + "encoding/json" + + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +var _ json.Marshaler = &Data{} +var _ json.Unmarshaler = &Data{} + +type Data []byte + +func (d Data) MarshalJSON() ([]byte, error) { + s := base64.StdEncoding.EncodeToString(d) + + return json.Marshal(s) +} + +func (d Data) SHA256() string { + return util.SHA256(d) +} + +func (d *Data) UnmarshalJSON(bytes []byte) error { + if d == nil { + return errors.Errorf("nil object provided") + } + + var s string + + if err := json.Unmarshal(bytes, &s); err != nil { + return err + } + + ret, err := base64.StdEncoding.DecodeString(s) + if err != nil { + return err + } + + *d = ret + + return nil +} diff --git a/pkg/apis/shared/v1/data_test.go b/pkg/apis/shared/v1/data_test.go new file mode 100644 index 000000000..39af26a66 --- /dev/null +++ b/pkg/apis/shared/v1/data_test.go @@ -0,0 +1,37 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package v1 + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/arangodb/kube-arangodb/pkg/util" +) + +func Test_Data(t *testing.T) { + var d Data = make([]byte, 1024) + + z, err := util.JSONRemarshal[Data, Data](d) + require.NoError(t, err) + require.EqualValues(t, d, z) +} diff --git a/pkg/apis/shared/v1/zz_generated.deepcopy.go b/pkg/apis/shared/v1/zz_generated.deepcopy.go index dc3842836..6b603efc3 100644 --- a/pkg/apis/shared/v1/zz_generated.deepcopy.go +++ b/pkg/apis/shared/v1/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -29,6 +29,26 @@ import ( types "k8s.io/apimachinery/pkg/types" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in Data) DeepCopyInto(out *Data) { + { + in := &in + *out = make(Data, len(*in)) + copy(*out, *in) + return + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Data. +func (in Data) DeepCopy() Data { + if in == nil { + return nil + } + out := new(Data) + in.DeepCopyInto(out) + return *out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in HashList) DeepCopyInto(out *HashList) { { diff --git a/pkg/apis/shared/validate.go b/pkg/apis/shared/validate.go index b9da30205..6063b251a 100644 --- a/pkg/apis/shared/validate.go +++ b/pkg/apis/shared/validate.go @@ -36,7 +36,7 @@ import ( var ( resourceNameRE = regexp.MustCompile(`^([0-9\-\.a-z])+$`) - apiPathRE = regexp.MustCompile(`^/([_A-Za-z0-9\-]+/)*$`) + apiPathRE = regexp.MustCompile(`^(/[_A-Za-z0-9\-]+)*/?$`) ) const ( @@ -181,6 +181,17 @@ func ValidateRequiredInterfacePath[T ValidateInterface](path string, in T) error return PrefixResourceErrors(path, ValidateRequiredInterface(in)) } +// ValidateInterfaceList Validates object if is not nil with path +func ValidateInterfaceList[T ValidateInterface](in []T) error { + errors := make([]error, len(in)) + + for id := range in { + errors[id] = PrefixResourceError(fmt.Sprintf("[%d]", id), in[id].Validate()) + } + + return WithErrors(errors...) +} + // ValidateList validates all elements on the list func ValidateList[T any](in []T, validator func(T) error, checks ...func(in []T) error) error { errors := make([]error, len(in)+len(checks)) @@ -196,6 +207,19 @@ func ValidateList[T any](in []T, validator func(T) error, checks ...func(in []T) return WithErrors(errors...) } +// ValidateInterfaceMap Validates object if is not nil with path +func ValidateInterfaceMap[T ValidateInterface](in map[string]T) error { + errors := make([]error, 0, len(in)) + + for id := range in { + if err := PrefixResourceError(id, in[id].Validate()); err != nil { + errors = append(errors, err) + } + } + + return WithErrors(errors...) +} + // ValidateMap validates all elements on the list func ValidateMap[T any](in map[string]T, validator func(string, T) error, checks ...func(in map[string]T) error) error { errors := make([]error, 0, len(in)+len(checks)) diff --git a/pkg/apis/shared/validate_test.go b/pkg/apis/shared/validate_test.go index 4a0dc4e93..263e7032b 100644 --- a/pkg/apis/shared/validate_test.go +++ b/pkg/apis/shared/validate_test.go @@ -36,7 +36,7 @@ func Test_ValidateAPIPath(t *testing.T) { require.NoError(t, ValidateAPIPath("")) require.NoError(t, ValidateAPIPath("/")) require.Error(t, ValidateAPIPath("//")) - require.Error(t, ValidateAPIPath("/api/zz")) + require.NoError(t, ValidateAPIPath("/api/zz")) require.NoError(t, ValidateAPIPath("/api/")) require.NoError(t, ValidateAPIPath("/api/test/qw/")) require.NoError(t, ValidateAPIPath("/api/test/2/")) diff --git a/pkg/apis/storage/v1alpha/zz_generated.deepcopy.go b/pkg/apis/storage/v1alpha/zz_generated.deepcopy.go index 581e2216e..21d5e36d6 100644 --- a/pkg/apis/storage/v1alpha/zz_generated.deepcopy.go +++ b/pkg/apis/storage/v1alpha/zz_generated.deepcopy.go @@ -4,7 +4,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/crd/crds/analytics-graphanalyticsengine.schema.generated.yaml b/pkg/crd/crds/analytics-graphanalyticsengine.schema.generated.yaml index 2c3f7244f..e12545e28 100644 --- a/pkg/crd/crds/analytics-graphanalyticsengine.schema.generated.yaml +++ b/pkg/crd/crds/analytics-graphanalyticsengine.schema.generated.yaml @@ -382,6 +382,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -619,6 +620,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -655,6 +663,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -769,15 +779,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -786,6 +800,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -962,6 +983,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1107,6 +1130,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1119,6 +1143,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -1231,10 +1256,12 @@ v1alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -1348,6 +1375,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -1494,6 +1528,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1699,6 +1734,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1991,21 +2027,32 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object securityContext: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2137,6 +2184,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: diff --git a/pkg/crd/crds/apps-job.schema.generated.yaml b/pkg/crd/crds/apps-job.schema.generated.yaml index c89c53c1f..0a20f50e7 100644 --- a/pkg/crd/crds/apps-job.schema.generated.yaml +++ b/pkg/crd/crds/apps-job.schema.generated.yaml @@ -23,6 +23,8 @@ v1: completions: format: int32 type: integer + managedBy: + type: string manualSelector: type: boolean maxFailedIndexes: @@ -84,6 +86,19 @@ v1: type: string type: object type: object + successPolicy: + properties: + rules: + items: + properties: + succeededCount: + format: int32 + type: integer + succeededIndexes: + type: string + type: object + type: array + type: object suspend: type: boolean template: @@ -544,6 +559,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -842,15 +858,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -859,6 +879,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1009,6 +1036,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1085,6 +1114,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1383,15 +1413,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1400,6 +1434,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1552,6 +1593,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1632,6 +1675,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1930,15 +1974,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1947,6 +1995,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2097,6 +2152,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2121,6 +2178,7 @@ v1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2141,13 +2199,10 @@ v1: properties: name: type: string - source: - properties: - resourceClaimName: - type: string - resourceClaimTemplateName: - type: string - type: object + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string type: object type: array restartPolicy: @@ -2165,6 +2220,13 @@ v1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2201,6 +2263,8 @@ v1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2433,6 +2497,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2445,6 +2510,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2557,10 +2623,12 @@ v1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -2674,6 +2742,13 @@ v1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -2820,6 +2895,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object diff --git a/pkg/crd/crds/backups-backup.schema.generated.yaml b/pkg/crd/crds/backups-backup.schema.generated.yaml index 20d2ed022..127eb16c1 100644 --- a/pkg/crd/crds/backups-backup.schema.generated.yaml +++ b/pkg/crd/crds/backups-backup.schema.generated.yaml @@ -91,96 +91,3 @@ v1: type: object x-kubernetes-preserve-unknown-fields: true type: object -v1alpha: - openAPIV3Schema: - properties: - spec: - properties: - backoff: - properties: - iterations: - description: Iterations defines number of iterations before reaching MaxDelay. Default to 5 - format: int32 - type: integer - max_delay: - description: MaxDelay defines maximum delay in seconds. Default to 600 - format: int32 - type: integer - max_iterations: - description: MaxIterations defines maximum number of iterations after backoff will be disabled. Default to nil (no limit) - format: int32 - type: integer - min_delay: - description: MinDelay defines minimum delay in seconds. Default to 30 - format: int32 - type: integer - type: object - deployment: - description: Deployment describes the deployment which should have a backup - properties: - name: - description: Name of the ArangoDeployment Custom Resource within same namespace as ArangoBackup Custom Resource. - type: string - type: object - download: - description: Download Backup download settings - properties: - autoDelete: - description: AutoDelete removes the ArangoBackup resource (which removes the backup from the cluster) after successful upload - type: boolean - credentialsSecretName: - description: CredentialsSecretName is the name of the secret used while accessing repository - type: string - id: - description: ID of the ArangoBackup to be downloaded - type: string - repositoryURL: - description: |- - RepositoryURL is the URL path for file storage - Same repositoryURL needs to be defined in `credentialsSecretName` if protocol is other than local. - Format: `:/` - type: string - type: object - lifetime: - description: 'Lifetime is the time after which the backup will be deleted. Format: "1.5h" or "2h45m".' - type: string - options: - description: Options specifies backup options - properties: - allowInconsistent: - description: |- - AllowInconsistent flag for Backup creation request. - If this value is set to true, backup is taken even if we are not able to acquire lock. - type: boolean - timeout: - description: Timeout for Backup creation request in seconds. Works only when AsyncBackupCreation feature is set to false. - format: float - type: number - type: object - policyName: - description: PolicyName name of the ArangoBackupPolicy which created this Custom Resource - type: string - upload: - description: |- - Upload Backup upload settings. - This field can be removed and created again with different values. This operation will trigger upload again. - properties: - autoDelete: - description: AutoDelete removes the ArangoBackup resource (which removes the backup from the cluster) after successful upload - type: boolean - credentialsSecretName: - description: CredentialsSecretName is the name of the secret used while accessing repository - type: string - repositoryURL: - description: |- - RepositoryURL is the URL path for file storage - Same repositoryURL needs to be defined in `credentialsSecretName` if protocol is other than local. - Format: `:/` - type: string - type: object - type: object - status: - description: Object with preserved fields for backward compatibility - type: object - x-kubernetes-preserve-unknown-fields: true - type: object diff --git a/pkg/crd/crds/backups-backup.yaml b/pkg/crd/crds/backups-backup.yaml index 577574362..16625a363 100644 --- a/pkg/crd/crds/backups-backup.yaml +++ b/pkg/crd/crds/backups-backup.yaml @@ -57,47 +57,3 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.policyName - description: Policy name - name: Policy - type: string - - jsonPath: .spec.deployment.name - description: Deployment name - name: Deployment - type: string - - jsonPath: .status.backup.version - description: Backup Version - name: Version - type: string - - jsonPath: .status.backup.createdAt - description: Backup Creation Timestamp - name: Created - type: string - - jsonPath: .status.backup.sizeInBytes - description: Backup Size in Bytes - name: Size - type: integer - format: byte - - jsonPath: .status.backup.numberOfDBServers - description: Backup Number of the DB Servers - name: DBServers - type: integer - - jsonPath: .status.state - description: The actual state of the ArangoBackup - name: State - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackup object - name: Message - type: string - subresources: - status: {} diff --git a/pkg/crd/crds/backups-backuppolicy.schema.generated.yaml b/pkg/crd/crds/backups-backuppolicy.schema.generated.yaml index ee14fb976..6fc76ab02 100644 --- a/pkg/crd/crds/backups-backuppolicy.schema.generated.yaml +++ b/pkg/crd/crds/backups-backuppolicy.schema.generated.yaml @@ -97,102 +97,3 @@ v1: type: object x-kubernetes-preserve-unknown-fields: true type: object -v1alpha: - openAPIV3Schema: - properties: - spec: - properties: - allowConcurrent: - description: AllowConcurrent if false, ArangoBackup will not be created when previous Backups are not finished - type: boolean - maxBackups: - description: |- - MaxBackups defines how many backups should be kept in history (per deployment). Oldest healthy Backups will be deleted. - If not specified or 0 then no limit is applied - format: int32 - type: integer - schedule: - description: |- - Schedule is cron-compatible specification of backup schedule - Parsed by https://godoc.org/github.com/robfig/cron - type: string - selector: - description: DeploymentSelector Selector definition for selecting matching ArangoBackup Custom Resources. - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - template: - description: ArangoBackupTemplate specifies additional options for newly created ArangoBackup - properties: - backoff: - properties: - iterations: - description: Iterations defines number of iterations before reaching MaxDelay. Default to 5 - format: int32 - type: integer - max_delay: - description: MaxDelay defines maximum delay in seconds. Default to 600 - format: int32 - type: integer - max_iterations: - description: MaxIterations defines maximum number of iterations after backoff will be disabled. Default to nil (no limit) - format: int32 - type: integer - min_delay: - description: MinDelay defines minimum delay in seconds. Default to 30 - format: int32 - type: integer - type: object - lifetime: - description: 'Lifetime is the time after which the backup will be deleted. Format: "1.5h" or "2h45m".' - type: string - options: - properties: - allowInconsistent: - description: |- - AllowInconsistent flag for Backup creation request. - If this value is set to true, backup is taken even if we are not able to acquire lock. - type: boolean - timeout: - description: Timeout for Backup creation request in seconds. Works only when AsyncBackupCreation feature is set to false. - format: float - type: number - type: object - upload: - properties: - autoDelete: - description: AutoDelete removes the ArangoBackup resource (which removes the backup from the cluster) after successful upload - type: boolean - credentialsSecretName: - description: CredentialsSecretName is the name of the secret used while accessing repository - type: string - repositoryURL: - description: |- - RepositoryURL is the URL path for file storage - Same repositoryURL needs to be defined in `credentialsSecretName` if protocol is other than local. - Format: `:/` - type: string - type: object - type: object - type: object - status: - description: Object with preserved fields for backward compatibility - type: object - x-kubernetes-preserve-unknown-fields: true - type: object diff --git a/pkg/crd/crds/backups-backuppolicy.yaml b/pkg/crd/crds/backups-backuppolicy.yaml index e0ca6c623..c0d759199 100644 --- a/pkg/crd/crds/backups-backuppolicy.yaml +++ b/pkg/crd/crds/backups-backuppolicy.yaml @@ -37,26 +37,3 @@ spec: type: string subresources: status: {} - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - additionalPrinterColumns: - - jsonPath: .spec.schedule - description: Schedule - name: Schedule - type: string - - jsonPath: .status.scheduled - description: Scheduled - name: Scheduled - type: string - - jsonPath: .status.message - priority: 1 - description: Message of the ArangoBackupPolicy object - name: Message - type: string - subresources: - status: {} diff --git a/pkg/crd/crds/crds.go b/pkg/crd/crds/crds.go index 7bc20920b..036c3f686 100644 --- a/pkg/crd/crds/crds.go +++ b/pkg/crd/crds/crds.go @@ -97,6 +97,10 @@ func AllDefinitions() []Definition { // Networking NetworkingRouteDefinitionWithOptions(), + + // Platform + PlatformStorageDefinitionWithOptions(), + PlatformChartDefinitionWithOptions(), } } diff --git a/pkg/crd/crds/crds_test.go b/pkg/crd/crds/crds_test.go index e5d4f425f..336749c50 100644 --- a/pkg/crd/crds/crds_test.go +++ b/pkg/crd/crds/crds_test.go @@ -31,6 +31,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/apis/backup" "github.com/arangodb/kube-arangodb/pkg/apis/deployment" "github.com/arangodb/kube-arangodb/pkg/apis/ml" + "github.com/arangodb/kube-arangodb/pkg/apis/platform" "github.com/arangodb/kube-arangodb/pkg/apis/replication" "github.com/arangodb/kube-arangodb/pkg/apis/scheduler" "github.com/arangodb/kube-arangodb/pkg/apis/storage" @@ -96,6 +97,8 @@ func Test_CRD(t *testing.T) { {scheduler.DeploymentCRDName, SchedulerDeploymentDefinitionWithOptions}, {scheduler.BatchJobCRDName, SchedulerBatchJobDefinitionWithOptions}, {scheduler.CronJobCRDName, SchedulerCronJobDefinitionWithOptions}, + {platform.ArangoPlatformStorageCRDName, PlatformStorageDefinitionWithOptions}, + {platform.ArangoPlatformChartCRDName, PlatformChartDefinitionWithOptions}, } for _, tc := range testCases { @@ -153,6 +156,8 @@ func Test_CRDGetters(t *testing.T) { SchedulerCronJobWithOptions, AnalyticsGAEWithOptions, NetworkingRouteWithOptions, + PlatformStorageWithOptions, + PlatformChartWithOptions, } require.Equal(t, len(AllDefinitions()), len(getters)) diff --git a/pkg/crd/crds/database-deployment.schema.generated.yaml b/pkg/crd/crds/database-deployment.schema.generated.yaml index 76649f8de..1ce3e16ce 100644 --- a/pkg/crd/crds/database-deployment.schema.generated.yaml +++ b/pkg/crd/crds/database-deployment.schema.generated.yaml @@ -326,6 +326,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object temp: description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. @@ -333,6 +334,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -397,6 +399,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -695,15 +698,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -712,6 +719,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -862,6 +876,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -874,6 +890,9 @@ v1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -1168,15 +1187,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -1327,6 +1350,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1625,15 +1649,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1642,6 +1670,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1792,6 +1827,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1955,10 +1992,12 @@ v1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -2003,10 +2042,12 @@ v1: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -2045,16 +2086,38 @@ v1: items: properties: mountPath: + description: |- + Path within the container at which the volume should be mounted. Must + not contain ':'. type: string mountPropagation: + description: |- + mountPropagation determines how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is used. + This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: + description: This must match the Name of a Volume. type: string readOnly: + description: |- + Mounted read-only if true, read-write otherwise (false or unspecified). + Defaults to false. type: boolean subPath: + description: |- + Path within the volume from which the container's volume should be mounted. + Defaults to "" (volume's root). type: string subPathExpr: + description: |- + Expanded path within the volume from which the container's volume should be mounted. + Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + Defaults to "" (volume's root). + SubPathExpr and SubPath are mutually exclusive. type: string type: object type: array @@ -2092,6 +2155,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -2545,6 +2609,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object temp: description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. @@ -2552,6 +2617,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -2616,6 +2682,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2914,15 +2981,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -2931,6 +3002,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -3081,6 +3159,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -3093,6 +3173,9 @@ v1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -3387,15 +3470,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -3546,6 +3633,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -3844,15 +3932,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -3861,6 +3953,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -4011,6 +4110,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -4174,10 +4275,12 @@ v1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -4222,10 +4325,12 @@ v1: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -4264,16 +4369,38 @@ v1: items: properties: mountPath: + description: |- + Path within the container at which the volume should be mounted. Must + not contain ':'. type: string mountPropagation: + description: |- + mountPropagation determines how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is used. + This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: + description: This must match the Name of a Volume. type: string readOnly: + description: |- + Mounted read-only if true, read-write otherwise (false or unspecified). + Defaults to false. type: boolean subPath: + description: |- + Path within the volume from which the container's volume should be mounted. + Defaults to "" (volume's root). type: string subPathExpr: + description: |- + Expanded path within the volume from which the container's volume should be mounted. + Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + Defaults to "" (volume's root). + SubPathExpr and SubPath are mutually exclusive. type: string type: object type: array @@ -4311,6 +4438,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -4682,6 +4810,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object temp: description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. @@ -4689,6 +4818,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -4753,6 +4883,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -5051,15 +5182,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -5068,6 +5203,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -5218,6 +5360,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -5230,6 +5374,9 @@ v1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -5524,15 +5671,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -5683,6 +5834,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -5981,15 +6133,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -5998,6 +6154,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -6148,6 +6311,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -6311,10 +6476,12 @@ v1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -6359,10 +6526,12 @@ v1: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -6401,16 +6570,38 @@ v1: items: properties: mountPath: + description: |- + Path within the container at which the volume should be mounted. Must + not contain ':'. type: string mountPropagation: + description: |- + mountPropagation determines how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is used. + This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: + description: This must match the Name of a Volume. type: string readOnly: + description: |- + Mounted read-only if true, read-write otherwise (false or unspecified). + Defaults to false. type: boolean subPath: + description: |- + Path within the volume from which the container's volume should be mounted. + Defaults to "" (volume's root). type: string subPathExpr: + description: |- + Expanded path within the volume from which the container's volume should be mounted. + Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + Defaults to "" (volume's root). + SubPathExpr and SubPath are mutually exclusive. type: string type: object type: array @@ -6448,6 +6639,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -6901,6 +7093,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object temp: description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. @@ -6908,6 +7101,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -6972,6 +7166,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -7270,15 +7465,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -7287,6 +7486,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -7437,6 +7643,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -7449,6 +7657,9 @@ v1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -7743,15 +7954,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -7902,6 +8117,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -8200,15 +8416,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -8217,6 +8437,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -8367,6 +8594,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -8530,10 +8759,12 @@ v1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -8578,10 +8809,12 @@ v1: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -8620,16 +8853,38 @@ v1: items: properties: mountPath: + description: |- + Path within the container at which the volume should be mounted. Must + not contain ':'. type: string mountPropagation: + description: |- + mountPropagation determines how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is used. + This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: + description: This must match the Name of a Volume. type: string readOnly: + description: |- + Mounted read-only if true, read-write otherwise (false or unspecified). + Defaults to false. type: boolean subPath: + description: |- + Path within the volume from which the container's volume should be mounted. + Defaults to "" (volume's root). type: string subPathExpr: + description: |- + Expanded path within the volume from which the container's volume should be mounted. + Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + Defaults to "" (volume's root). + SubPathExpr and SubPath are mutually exclusive. type: string type: object type: array @@ -8667,6 +8922,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -9071,15 +9327,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object securityContext: @@ -9251,6 +9511,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -9543,21 +9804,32 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object securityContext: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -9689,6 +9961,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -9737,15 +10011,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object type: object @@ -9798,15 +10076,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object serviceMonitor: @@ -10214,6 +10496,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object temp: description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. @@ -10221,6 +10504,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -10285,6 +10569,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -10583,15 +10868,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -10600,6 +10889,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -10750,6 +11046,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -10762,6 +11060,9 @@ v1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -11056,15 +11357,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -11215,6 +11520,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -11513,15 +11819,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -11530,6 +11840,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -11680,6 +11997,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -11843,10 +12162,12 @@ v1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -11891,10 +12212,12 @@ v1: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -11933,16 +12256,38 @@ v1: items: properties: mountPath: + description: |- + Path within the container at which the volume should be mounted. Must + not contain ':'. type: string mountPropagation: + description: |- + mountPropagation determines how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is used. + This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: + description: This must match the Name of a Volume. type: string readOnly: + description: |- + Mounted read-only if true, read-write otherwise (false or unspecified). + Defaults to false. type: boolean subPath: + description: |- + Path within the volume from which the container's volume should be mounted. + Defaults to "" (volume's root). type: string subPathExpr: + description: |- + Expanded path within the volume from which the container's volume should be mounted. + Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + Defaults to "" (volume's root). + SubPathExpr and SubPath are mutually exclusive. type: string type: object type: array @@ -11980,6 +12325,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -12164,6 +12510,7 @@ v1: items: type: string type: array + description: The mapping of the Server Name Indication options. type: object type: object ttl: @@ -12494,6 +12841,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object temp: description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. @@ -12501,6 +12849,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -12565,6 +12914,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -12863,15 +13213,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -12880,6 +13234,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -13030,6 +13391,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -13042,6 +13405,9 @@ v1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -13336,15 +13702,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -13495,6 +13865,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -13793,15 +14164,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -13810,6 +14185,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -13960,6 +14342,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -14123,10 +14507,12 @@ v1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -14171,10 +14557,12 @@ v1: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -14213,16 +14601,38 @@ v1: items: properties: mountPath: + description: |- + Path within the container at which the volume should be mounted. Must + not contain ':'. type: string mountPropagation: + description: |- + mountPropagation determines how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is used. + This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: + description: This must match the Name of a Volume. type: string readOnly: + description: |- + Mounted read-only if true, read-write otherwise (false or unspecified). + Defaults to false. type: boolean subPath: + description: |- + Path within the volume from which the container's volume should be mounted. + Defaults to "" (volume's root). type: string subPathExpr: + description: |- + Expanded path within the volume from which the container's volume should be mounted. + Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + Defaults to "" (volume's root). + SubPathExpr and SubPath are mutually exclusive. type: string type: object type: array @@ -14260,6 +14670,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -14624,6 +15035,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object temp: description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. @@ -14631,6 +15043,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -14695,6 +15108,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -14993,15 +15407,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -15010,6 +15428,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -15160,6 +15585,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -15172,6 +15599,9 @@ v1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -15466,15 +15896,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -15625,6 +16059,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -15923,15 +16358,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -15940,6 +16379,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -16090,6 +16536,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -16253,10 +16701,12 @@ v1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -16301,10 +16751,12 @@ v1: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -16343,16 +16795,38 @@ v1: items: properties: mountPath: + description: |- + Path within the container at which the volume should be mounted. Must + not contain ':'. type: string mountPropagation: + description: |- + mountPropagation determines how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is used. + This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: + description: This must match the Name of a Volume. type: string readOnly: + description: |- + Mounted read-only if true, read-write otherwise (false or unspecified). + Defaults to false. type: boolean subPath: + description: |- + Path within the volume from which the container's volume should be mounted. + Defaults to "" (volume's root). type: string subPathExpr: + description: |- + Expanded path within the volume from which the container's volume should be mounted. + Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + Defaults to "" (volume's root). + SubPathExpr and SubPath are mutually exclusive. type: string type: object type: array @@ -16390,6 +16864,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -16486,6 +16961,7 @@ v1: items: type: string type: array + description: The mapping of the Server Name Indication options. type: object type: object ttl: @@ -16526,7 +17002,7 @@ v1: type: object x-kubernetes-preserve-unknown-fields: true type: object -v1alpha: +v2alpha1: openAPIV3Schema: properties: spec: @@ -16854,6 +17330,7 @@ v1alpha: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object temp: description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. @@ -16861,6 +17338,7 @@ v1alpha: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -16925,6 +17403,7 @@ v1alpha: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -17223,15 +17702,19 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -17240,6 +17723,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -17390,6 +17880,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -17402,6 +17894,9 @@ v1alpha: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -17696,15 +18191,19 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -17855,6 +18354,7 @@ v1alpha: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -18153,15 +18653,19 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -18170,6 +18674,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -18320,6 +18831,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -18483,10 +18996,12 @@ v1alpha: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -18531,10 +19046,12 @@ v1alpha: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -18573,16 +19090,38 @@ v1alpha: items: properties: mountPath: + description: |- + Path within the container at which the volume should be mounted. Must + not contain ':'. type: string mountPropagation: + description: |- + mountPropagation determines how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is used. + This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: + description: This must match the Name of a Volume. type: string readOnly: + description: |- + Mounted read-only if true, read-write otherwise (false or unspecified). + Defaults to false. type: boolean subPath: + description: |- + Path within the volume from which the container's volume should be mounted. + Defaults to "" (volume's root). type: string subPathExpr: + description: |- + Expanded path within the volume from which the container's volume should be mounted. + Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + Defaults to "" (volume's root). + SubPathExpr and SubPath are mutually exclusive. type: string type: object type: array @@ -18620,6 +19159,7 @@ v1alpha: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -19073,6 +19613,7 @@ v1alpha: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object temp: description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. @@ -19080,6 +19621,7 @@ v1alpha: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -19144,6 +19686,7 @@ v1alpha: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -19442,15 +19985,19 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -19459,6 +20006,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -19609,6 +20163,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -19621,6 +20177,9 @@ v1alpha: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -19915,15 +20474,19 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -20074,6 +20637,7 @@ v1alpha: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -20372,15 +20936,19 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -20389,6 +20957,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -20539,6 +21114,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -20702,10 +21279,12 @@ v1alpha: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -20750,10 +21329,12 @@ v1alpha: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -20792,16 +21373,38 @@ v1alpha: items: properties: mountPath: + description: |- + Path within the container at which the volume should be mounted. Must + not contain ':'. type: string mountPropagation: + description: |- + mountPropagation determines how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is used. + This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: + description: This must match the Name of a Volume. type: string readOnly: + description: |- + Mounted read-only if true, read-write otherwise (false or unspecified). + Defaults to false. type: boolean subPath: + description: |- + Path within the volume from which the container's volume should be mounted. + Defaults to "" (volume's root). type: string subPathExpr: + description: |- + Expanded path within the volume from which the container's volume should be mounted. + Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + Defaults to "" (volume's root). + SubPathExpr and SubPath are mutually exclusive. type: string type: object type: array @@ -20839,6 +21442,7 @@ v1alpha: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -21210,6 +21814,7 @@ v1alpha: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object temp: description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. @@ -21217,6 +21822,7 @@ v1alpha: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -21281,6 +21887,7 @@ v1alpha: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -21579,15 +22186,19 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -21596,6 +22207,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -21746,16534 +22364,8 @@ v1alpha: type: string readOnly: type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - mode: - description: Mode keep container replace mode - type: string - type: object - internalPort: - description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - format: int32 - type: integer - internalPortProtocol: - description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - type: string - labels: - additionalProperties: - type: string - description: Labels specified the labels added to Pods in this group. - type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored - items: - type: string - type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels - type: string - maxCount: - description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. - format: int32 - type: integer - memoryReservation: - description: |- - MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. - If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. - Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. - format: int64 - type: integer - minCount: - description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. - format: int32 - type: integer - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. - type: object - numactl: - description: Numactl define Numactl options passed to the process - properties: - args: - description: Args define list of the numactl process - items: - type: string - type: array - enabled: - description: Enabled define if numactl should be enabled - type: boolean - path: - description: Path define numactl path within the container - type: string - type: object - overrideDetectedNumberOfCores: - description: |- - OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. - If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. - type: boolean - overrideDetectedTotalMemory: - description: |- - OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. - If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. - type: boolean - podModes: - description: PodModes define additional modes enabled on the Pod level - properties: - network: - type: string - pid: - type: string - type: object - port: - description: Port define Port used by member - format: int32 - type: integer - priorityClassName: - description: |- - PriorityClassName specifies a priority class name - Will be forwarded to the pod spec. - type: string - probes: - description: Probes specifies additional behaviour for probes - properties: - ReadinessProbeDisabled: - description: OldReadinessProbeDisabled if true readinessProbes are disabled - type: boolean - livenessProbeDisabled: - description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group - type: boolean - livenessProbeSpec: - description: LivenessProbeSpec override liveness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - readinessProbeDisabled: - description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility - type: boolean - readinessProbeSpec: - description: ReadinessProbeSpec override readiness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - startupProbeDisabled: - description: StartupProbeDisabled if true startupProbes are disabled - type: boolean - startupProbeSpec: - description: StartupProbeSpec override startup probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - type: object - pvcResizeMode: - description: VolumeResizeMode specified resize mode for PVCs and PVs - enum: - - runtime - - rotate - type: string - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - schedulerName: - description: SchedulerName define scheduler name used for group - type: string - securityContext: - description: |- - SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. - This is similar (but not fully compatible) to k8s SecurityContext definition. - properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: - type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. - properties: - localhostProfile: - type: string - type: - type: string - type: object - supplementalGroups: - description: |- - SupplementalGroups is 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. - items: - format: int64 - type: integer - type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object - type: object - serviceAccountName: - description: |- - ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created - for each server of this group. If empty, it defaults to using the - `default` service account. - Using an alternative `ServiceAccount` is typically used to separate access rights. - The ArangoDB deployments need some very minimal access rights. With the - deployment of the operator, we grant the rights to 'get' all 'pod' resources. - If you are using a different service account, please grant these rights - to that service account. - type: string - shutdownDelay: - description: ShutdownDelay define how long operator should delay finalizer removal after shutdown - format: int32 - type: integer - shutdownMethod: - description: ShutdownMethod describe procedure of member shutdown taken by Operator - type: string - sidecarCoreNames: - description: |- - SidecarCoreNames is a list of sidecar containers which must run in the pod. - Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. - items: - type: string - type: array - sidecars: - description: Sidecars specifies a list of additional containers to be started - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - storageClassName: - description: StorageClassName specifies the classname for storage of the servers. - type: string - terminationGracePeriodSeconds: - description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation - format: int64 - type: integer - tolerations: - description: |- - Tolerations specifies the tolerations added to Pods in this group. - By default, suitable tolerations are set for the following keys with the `NoExecute` effect: - - `node.kubernetes.io/not-ready` - - `node.kubernetes.io/unreachable` - - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) - For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumeAllowShrink: - description: VolumeAllowShrink allows shrinking of the volume - type: boolean - volumeClaimTemplate: - description: |- - VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. - This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. - The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. - If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim - with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` - and `iops` is not forwarded to the pods resource requirements. - properties: - apiVersion: - type: string - kind: - type: string - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - creationTimestamp: - format: date-time - type: string - deletionGracePeriodSeconds: - format: int64 - type: integer - deletionTimestamp: - format: date-time - type: string - finalizers: - items: - type: string - type: array - generateName: - type: string - generation: - format: int64 - type: integer - labels: - additionalProperties: - type: string - type: object - managedFields: - items: - properties: - apiVersion: - type: string - fieldsType: - type: string - fieldsV1: - type: object - manager: - type: string - operation: - type: string - subresource: - type: string - time: - format: date-time - type: string - type: object - type: array - name: - type: string - namespace: - type: string - ownerReferences: - items: - properties: - apiVersion: - type: string - blockOwnerDeletion: - type: boolean - controller: - type: boolean - kind: - type: string - name: - type: string - uid: - type: string - type: object - type: array - resourceVersion: - type: string - selfLink: - type: string - uid: - type: string - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - type: object - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - type: object - resources: - properties: - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: - type: string - type: array - allocatedResourceStatuses: - additionalProperties: - type: string - type: object - allocatedResources: - additionalProperties: - type: string - type: object - capacity: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - type: object - type: array - currentVolumeAttributesClassName: - type: string - modifyVolumeStatus: - properties: - status: - type: string - targetVolumeAttributesClassName: - type: string - type: object - phase: - type: string - type: object - type: object - volumeMounts: - description: VolumeMounts define list of volume mounts mounted into server container - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - volumes: - description: Volumes define list of volumes mounted to pod - items: - properties: - configMap: - description: ConfigMap which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - emptyDir: - description: EmptyDir - properties: - medium: - type: string - sizeLimit: - type: string - type: object - hostPath: - description: HostPath - properties: - path: - type: string - type: - type: string - type: object - name: - description: Name of volume - type: string - persistentVolumeClaim: - description: PersistentVolumeClaim - properties: - claimName: - type: string - readOnly: - type: boolean - type: object - secret: - description: Secret which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - type: object - type: array - type: object - disableIPv6: - description: |- - DisableIPv6 setting prevents the use of IPv6 addresses by ArangoDB servers. - This setting cannot be changed after the deployment has been created. - type: boolean - downtimeAllowed: - description: |- - DowntimeAllowed setting is used to allow automatic reconciliation actions that yield some downtime of the ArangoDB deployment. - When this setting is set to false, no automatic action that may result in downtime is allowed. - If the need for such an action is detected, an event is added to the ArangoDeployment. - Once this setting is set to true, the automatic action is executed. - Operations that may result in downtime are: - - Rotating TLS CA certificate - Note: It is still possible that there is some downtime when the Kubernetes cluster is down, or in a bad state, irrespective of the value of this setting. - type: boolean - environment: - description: Environment setting specifies the type of environment in which the deployment is created. - enum: - - Development - - Production - type: string - externalAccess: - description: ExternalAccess holds configuration for the external access provided for the deployment. - properties: - advertisedEndpoint: - description: AdvertisedEndpoint is passed to the coordinators/single servers for advertising a specific endpoint - type: string - loadBalancerIP: - description: |- - LoadBalancerIP define optional IP used to configure a load-balancer on, in case of Auto or LoadBalancer type. - If you do not specify this setting, an IP will be chosen automatically by the load-balancer provisioner. - type: string - loadBalancerSourceRanges: - description: |- - LoadBalancerSourceRanges define LoadBalancerSourceRanges used for LoadBalancer Service type - If specified and supported by the platform, this will restrict traffic through the cloud-provider - load-balancer will be restricted to the specified client IPs. This field will be ignored if the - cloud-provider does not support the feature. - items: - type: string - type: array - managedServiceNames: - description: |- - ManagedServiceNames keeps names of services which are not managed by KubeArangoDB. - It is only relevant when type of service is `managed`. - items: - type: string - type: array - nodePort: - description: |- - NodePort define optional port used in case of Auto or NodePort type. - This setting is used when `spec.externalAccess.type` is set to `NodePort` or `Auto`. - If you do not specify this setting, a random port will be chosen automatically. - format: int32 - type: integer - type: - description: Type specifies the type of Service that will be created to provide access to the ArangoDB deployment from outside the Kubernetes cluster. - enum: - - Auto - - None - - LoadBalancer - - NodePort - type: string - type: object - features: - description: Features allows to configure feature flags - properties: - foxx.queues: - type: boolean - type: object - gateway: - description: Gateway defined main Gateway configuration. - properties: - dynamic: - description: |- - Dynamic setting enables/disables support dynamic configuration of the gateway in the cluster. - When enabled, gateway config will be reloaded by ConfigMap live updates. - type: boolean - enabled: - description: |- - Enabled setting enables/disables support for gateway in the cluster. - When enabled, the cluster will contain a number of `gateway` servers. - type: boolean - image: - description: |- - Image is the image to use for the gateway. - By default, the image is determined by the operator. - type: string - type: object - gateways: - description: Gateways contain specification for Gateway pods running in deployment mode `Single` or `Cluster`. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - allowMemberRecreation: - description: |- - AllowMemberRecreation allows to recreate member. - This setting changes the member recreation logic based on group: - - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) - - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. - type: boolean - annotations: - additionalProperties: - type: string - description: |- - Annotations specified the annotations added to Pods in this group. - Annotations are merged with `spec.annotations`. - type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode Define annotations mode which should be use while overriding annotations - type: string - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - count: - description: |- - Count setting specifies the number of servers to start for the given group. - For the Agent group, this value must be a positive, odd number. - The default value is `3` for all groups except `single` (there the default is `1` - for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). - For the `syncworkers` group, it is highly recommended to use the same number - as for the `dbservers` group. - format: int32 - type: integer - entrypoint: - description: Entrypoint overrides container executable - type: string - envs: - description: Envs allow to specify additional envs in this group. - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - ephemeralVolumes: - description: EphemeralVolumes keeps information about ephemeral volumes. - properties: - apps: - description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - temp: - description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - type: object - exporterPort: - description: ExporterPort define Port used by exporter - format: int32 - type: integer - extendedRotationCheck: - description: ExtendedRotationCheck extend checks for rotation - type: boolean - externalPortEnabled: - description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members - type: boolean - indexMethod: - description: IndexMethod define group Indexing method - enum: - - random - - ordered - type: string - initContainers: - description: InitContainers Init containers specification - properties: - containers: - description: Containers contains list of containers - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - mode: - description: Mode keep container replace mode - type: string - type: object - internalPort: - description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - format: int32 - type: integer - internalPortProtocol: - description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - type: string - labels: - additionalProperties: - type: string - description: Labels specified the labels added to Pods in this group. - type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored - items: - type: string - type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels - type: string - maxCount: - description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. - format: int32 - type: integer - memoryReservation: - description: |- - MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. - If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. - Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. - format: int64 - type: integer - minCount: - description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. - format: int32 - type: integer - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. - type: object - numactl: - description: Numactl define Numactl options passed to the process - properties: - args: - description: Args define list of the numactl process - items: - type: string - type: array - enabled: - description: Enabled define if numactl should be enabled - type: boolean - path: - description: Path define numactl path within the container - type: string - type: object - overrideDetectedNumberOfCores: - description: |- - OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. - If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. - type: boolean - overrideDetectedTotalMemory: - description: |- - OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. - If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. - type: boolean - podModes: - description: PodModes define additional modes enabled on the Pod level - properties: - network: - type: string - pid: - type: string - type: object - port: - description: Port define Port used by member - format: int32 - type: integer - priorityClassName: - description: |- - PriorityClassName specifies a priority class name - Will be forwarded to the pod spec. - type: string - probes: - description: Probes specifies additional behaviour for probes - properties: - ReadinessProbeDisabled: - description: OldReadinessProbeDisabled if true readinessProbes are disabled - type: boolean - livenessProbeDisabled: - description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group - type: boolean - livenessProbeSpec: - description: LivenessProbeSpec override liveness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - readinessProbeDisabled: - description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility - type: boolean - readinessProbeSpec: - description: ReadinessProbeSpec override readiness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - startupProbeDisabled: - description: StartupProbeDisabled if true startupProbes are disabled - type: boolean - startupProbeSpec: - description: StartupProbeSpec override startup probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - type: object - pvcResizeMode: - description: VolumeResizeMode specified resize mode for PVCs and PVs - enum: - - runtime - - rotate - type: string - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - schedulerName: - description: SchedulerName define scheduler name used for group - type: string - securityContext: - description: |- - SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. - This is similar (but not fully compatible) to k8s SecurityContext definition. - properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: - type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. - properties: - localhostProfile: - type: string - type: - type: string - type: object - supplementalGroups: - description: |- - SupplementalGroups is 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. - items: - format: int64 - type: integer - type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object - type: object - serviceAccountName: - description: |- - ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created - for each server of this group. If empty, it defaults to using the - `default` service account. - Using an alternative `ServiceAccount` is typically used to separate access rights. - The ArangoDB deployments need some very minimal access rights. With the - deployment of the operator, we grant the rights to 'get' all 'pod' resources. - If you are using a different service account, please grant these rights - to that service account. - type: string - shutdownDelay: - description: ShutdownDelay define how long operator should delay finalizer removal after shutdown - format: int32 - type: integer - shutdownMethod: - description: ShutdownMethod describe procedure of member shutdown taken by Operator - type: string - sidecarCoreNames: - description: |- - SidecarCoreNames is a list of sidecar containers which must run in the pod. - Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. - items: - type: string - type: array - sidecars: - description: Sidecars specifies a list of additional containers to be started - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - storageClassName: - description: StorageClassName specifies the classname for storage of the servers. - type: string - terminationGracePeriodSeconds: - description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation - format: int64 - type: integer - tolerations: - description: |- - Tolerations specifies the tolerations added to Pods in this group. - By default, suitable tolerations are set for the following keys with the `NoExecute` effect: - - `node.kubernetes.io/not-ready` - - `node.kubernetes.io/unreachable` - - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) - For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumeAllowShrink: - description: VolumeAllowShrink allows shrinking of the volume - type: boolean - volumeClaimTemplate: - description: |- - VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. - This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. - The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. - If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim - with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` - and `iops` is not forwarded to the pods resource requirements. - properties: - apiVersion: - type: string - kind: - type: string - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - creationTimestamp: - format: date-time - type: string - deletionGracePeriodSeconds: - format: int64 - type: integer - deletionTimestamp: - format: date-time - type: string - finalizers: - items: - type: string - type: array - generateName: - type: string - generation: - format: int64 - type: integer - labels: - additionalProperties: - type: string - type: object - managedFields: - items: - properties: - apiVersion: - type: string - fieldsType: - type: string - fieldsV1: - type: object - manager: - type: string - operation: - type: string - subresource: - type: string - time: - format: date-time - type: string - type: object - type: array - name: - type: string - namespace: - type: string - ownerReferences: - items: - properties: - apiVersion: - type: string - blockOwnerDeletion: - type: boolean - controller: - type: boolean - kind: - type: string - name: - type: string - uid: - type: string - type: object - type: array - resourceVersion: - type: string - selfLink: - type: string - uid: - type: string - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - type: object - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - type: object - resources: - properties: - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: - type: string - type: array - allocatedResourceStatuses: - additionalProperties: - type: string - type: object - allocatedResources: - additionalProperties: - type: string - type: object - capacity: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - type: object - type: array - currentVolumeAttributesClassName: - type: string - modifyVolumeStatus: - properties: - status: - type: string - targetVolumeAttributesClassName: - type: string - type: object - phase: - type: string - type: object - type: object - volumeMounts: - description: VolumeMounts define list of volume mounts mounted into server container - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - volumes: - description: Volumes define list of volumes mounted to pod - items: - properties: - configMap: - description: ConfigMap which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - emptyDir: - description: EmptyDir - properties: - medium: - type: string - sizeLimit: - type: string - type: object - hostPath: - description: HostPath - properties: - path: - type: string - type: - type: string - type: object - name: - description: Name of volume - type: string - persistentVolumeClaim: - description: PersistentVolumeClaim - properties: - claimName: - type: string - readOnly: - type: boolean - type: object - secret: - description: Secret which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - type: object - type: array - type: object - id: - description: ServerIDGroupSpec contains the specification for Image Discovery image. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - entrypoint: - description: Entrypoint overrides container executable - type: string - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector specifies a set of selectors for nodes - type: object - priorityClassName: - description: PriorityClassName specifies a priority class name - type: string - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - securityContext: - description: SecurityContext specifies security context for group - properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: - type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. - properties: - localhostProfile: - type: string - type: - type: string - type: object - supplementalGroups: - description: |- - SupplementalGroups is 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. - items: - format: int64 - type: integer - type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object - type: object - serviceAccountName: - description: ServiceAccountName specifies the name of the service account used for Pods in this group. - type: string - tolerations: - description: Tolerations specifies the tolerations added to Pods in this group. - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - type: object - image: - description: |- - Image specifies the docker image to use for all ArangoDB servers. - In a development environment this setting defaults to arangodb/arangodb:latest. - For production environments this is a required setting without a default value. - It is highly recommend to use explicit version (not latest) for production environments. - type: string - imageDiscoveryMode: - description: ImageDiscoveryMode specifies the image discovery mode. - enum: - - kubelet - - direct - type: string - imagePullPolicy: - description: ImagePullPolicy specifies the pull policy for the docker image to use for all ArangoDB servers. - enum: - - Always - - Never - - IfNotPresent - type: string - imagePullSecrets: - description: ImagePullSecrets specifies the list of image pull secrets for the docker image to use for all ArangoDB servers. - items: - type: string - type: array - integration: - description: Integration defined main Integration configuration. - properties: - sidecar: - description: Sidecar define the integration sidecar spec - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - controllerListenPort: - format: int32 - type: integer - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - listenPort: - format: int32 - type: integer - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - method: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: object - labels: - additionalProperties: - type: string - description: Labels specifies the labels added to Pods in this group. - type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored - items: - type: string - type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels - enum: - - disabled - - append - - replace - type: string - license: - description: License holds license settings - properties: - secretName: - description: |- - SecretName setting specifies the name of a kubernetes `Secret` that contains - the license key token used for enterprise images. This value is not used for - the Community Edition. - type: string - type: object - lifecycle: - description: Lifecycle holds lifecycle configuration settings - properties: - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - type: object - memberPropagationMode: - description: |- - MemberPropagationMode defines how changes to pod spec should be propogated. - Changes to a pod’s configuration require a restart of that pod in almost all cases. - Pods are restarted eagerly by default, which can cause more restarts than desired, especially when updating arangod as well as the operator. - The propagation of the configuration changes can be deferred to the next restart, either triggered manually by the user or by another operation like an upgrade. - This reduces the number of restarts for upgrading both the server and the operator from two to one. - enum: - - always - - on-restart - type: string - metrics: - description: Metrics holds metrics configuration settings - properties: - authentication: - properties: - jwtTokenSecretName: - description: JWTTokenSecretName contains the name of the JWT kubernetes secret used for authentication - type: string - type: object - enabled: - description: |- - Enabled if this is set to `true`, the operator runs a sidecar container for - every Agent, DB-Server, Coordinator and Single server. - type: boolean - extensions: - description: Extensions keeps the information about Metrics Extensions - properties: - usageMetrics: - description: UsageMetrics enables ArangoDB Usage metrics scrape. Affects only DBServers in the Cluster mode. - type: boolean - type: object - image: - description: Image used for the Metrics Sidecar - type: string - mode: - description: Mode define metrics exported mode - type: string - port: - format: int32 - type: integer - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - serviceMonitor: - properties: - enabled: - type: boolean - labels: - additionalProperties: - type: string - type: object - type: object - tls: - description: |- - TLS defines if TLS should be enabled on Metrics exporter endpoint. - This option will enable TLS only if TLS is enabled on ArangoDeployment, - otherwise `true` value will not take any effect. - type: boolean - type: object - mode: - description: Mode specifies the type of ArangoDB deployment to create. - enum: - - Cluster - - ActiveFailover - - Single - type: string - networkAttachedVolumes: - description: |- - NetworkAttachedVolumes - If set to `true`, a ResignLeadership operation will be triggered when a DB-Server pod is evicted (rather than a CleanOutServer operation). - Furthermore, the pod will simply be redeployed on a different node, rather than cleaned and retired and replaced by a new member. - You must only set this option to true if your persistent volumes are “movable” in the sense that they can be mounted from a different k8s node, like in the case of network attached volumes. - If your persistent volumes are tied to a specific pod, you must leave this option on false. - type: boolean - rebalancer: - description: Rebalancer defines the rebalancer specification - properties: - enabled: - type: boolean - optimizers: - properties: - leader: - type: boolean - type: object - parallelMoves: - format: int32 - type: integer - readers: - properties: - count: - description: Count Enable Shard Count machanism - type: boolean - type: object - type: object - recovery: - description: Recovery specifies configuration related to cluster recovery. - properties: - autoRecover: - type: boolean - type: object - restoreEncryptionSecret: - description: RestoreEncryptionSecret specifies optional name of secret which contains encryption key used for restore - type: string - restoreFrom: - description: |- - RestoreFrom setting specifies a `ArangoBackup` resource name the cluster should be restored from. - After a restore or failure to do so, the status of the deployment contains information about the restore operation in the restore key. - It will contain some of the following fields: - - `requestedFrom`: name of the ArangoBackup used to restore from. - - `message`: optional message explaining why the restore failed. - - `state`: state indicating if the restore was successful or not. Possible values: Restoring, Restored, RestoreFailed - If the restoreFrom key is removed from the spec, the restore key is deleted as well. - A new restore attempt is made if and only if either in the status restore is not set or if spec.restoreFrom and status.requestedFrom are different. - type: string - rocksdb: - description: RocksDB holds rocksdb-specific configuration settings - properties: - encryption: - properties: - keySecretName: - description: |- - KeySecretName setting specifies the name of a Kubernetes `Secret` that contains an encryption key used for encrypting all data stored by ArangoDB servers. - When an encryption key is used, encryption of the data in the cluster is enabled, without it encryption is disabled. - The default value is empty. - This requires the Enterprise Edition. - The encryption key cannot be changed after the cluster has been created. - The secret specified by this setting, must have a data field named 'key' containing an encryption key that is exactly 32 bytes long. - type: string - type: object - type: object - single: - description: Single contains specification for servers running in deployment mode `Single` or `ActiveFailover`. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - allowMemberRecreation: - description: |- - AllowMemberRecreation allows to recreate member. - This setting changes the member recreation logic based on group: - - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) - - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. - type: boolean - annotations: - additionalProperties: - type: string - description: |- - Annotations specified the annotations added to Pods in this group. - Annotations are merged with `spec.annotations`. - type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode Define annotations mode which should be use while overriding annotations - type: string - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - count: - description: |- - Count setting specifies the number of servers to start for the given group. - For the Agent group, this value must be a positive, odd number. - The default value is `3` for all groups except `single` (there the default is `1` - for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). - For the `syncworkers` group, it is highly recommended to use the same number - as for the `dbservers` group. - format: int32 - type: integer - entrypoint: - description: Entrypoint overrides container executable - type: string - envs: - description: Envs allow to specify additional envs in this group. - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - ephemeralVolumes: - description: EphemeralVolumes keeps information about ephemeral volumes. - properties: - apps: - description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - temp: - description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - type: object - exporterPort: - description: ExporterPort define Port used by exporter - format: int32 - type: integer - extendedRotationCheck: - description: ExtendedRotationCheck extend checks for rotation - type: boolean - externalPortEnabled: - description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members - type: boolean - indexMethod: - description: IndexMethod define group Indexing method - enum: - - random - - ordered - type: string - initContainers: - description: InitContainers Init containers specification - properties: - containers: - description: Containers contains list of containers - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - mode: - description: Mode keep container replace mode - type: string - type: object - internalPort: - description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - format: int32 - type: integer - internalPortProtocol: - description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - type: string - labels: - additionalProperties: - type: string - description: Labels specified the labels added to Pods in this group. - type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored - items: - type: string - type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels - type: string - maxCount: - description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. - format: int32 - type: integer - memoryReservation: - description: |- - MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. - If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. - Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. - format: int64 - type: integer - minCount: - description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. - format: int32 - type: integer - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. - type: object - numactl: - description: Numactl define Numactl options passed to the process - properties: - args: - description: Args define list of the numactl process - items: - type: string - type: array - enabled: - description: Enabled define if numactl should be enabled - type: boolean - path: - description: Path define numactl path within the container - type: string - type: object - overrideDetectedNumberOfCores: - description: |- - OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. - If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. - type: boolean - overrideDetectedTotalMemory: - description: |- - OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. - If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. - type: boolean - podModes: - description: PodModes define additional modes enabled on the Pod level - properties: - network: - type: string - pid: - type: string - type: object - port: - description: Port define Port used by member - format: int32 - type: integer - priorityClassName: - description: |- - PriorityClassName specifies a priority class name - Will be forwarded to the pod spec. - type: string - probes: - description: Probes specifies additional behaviour for probes - properties: - ReadinessProbeDisabled: - description: OldReadinessProbeDisabled if true readinessProbes are disabled - type: boolean - livenessProbeDisabled: - description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group - type: boolean - livenessProbeSpec: - description: LivenessProbeSpec override liveness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - readinessProbeDisabled: - description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility - type: boolean - readinessProbeSpec: - description: ReadinessProbeSpec override readiness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - startupProbeDisabled: - description: StartupProbeDisabled if true startupProbes are disabled - type: boolean - startupProbeSpec: - description: StartupProbeSpec override startup probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - type: object - pvcResizeMode: - description: VolumeResizeMode specified resize mode for PVCs and PVs - enum: - - runtime - - rotate - type: string - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - schedulerName: - description: SchedulerName define scheduler name used for group - type: string - securityContext: - description: |- - SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. - This is similar (but not fully compatible) to k8s SecurityContext definition. - properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: - type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. - properties: - localhostProfile: - type: string - type: - type: string - type: object - supplementalGroups: - description: |- - SupplementalGroups is 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. - items: - format: int64 - type: integer - type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object - type: object - serviceAccountName: - description: |- - ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created - for each server of this group. If empty, it defaults to using the - `default` service account. - Using an alternative `ServiceAccount` is typically used to separate access rights. - The ArangoDB deployments need some very minimal access rights. With the - deployment of the operator, we grant the rights to 'get' all 'pod' resources. - If you are using a different service account, please grant these rights - to that service account. - type: string - shutdownDelay: - description: ShutdownDelay define how long operator should delay finalizer removal after shutdown - format: int32 - type: integer - shutdownMethod: - description: ShutdownMethod describe procedure of member shutdown taken by Operator - type: string - sidecarCoreNames: - description: |- - SidecarCoreNames is a list of sidecar containers which must run in the pod. - Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. - items: - type: string - type: array - sidecars: - description: Sidecars specifies a list of additional containers to be started - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - storageClassName: - description: StorageClassName specifies the classname for storage of the servers. - type: string - terminationGracePeriodSeconds: - description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation - format: int64 - type: integer - tolerations: - description: |- - Tolerations specifies the tolerations added to Pods in this group. - By default, suitable tolerations are set for the following keys with the `NoExecute` effect: - - `node.kubernetes.io/not-ready` - - `node.kubernetes.io/unreachable` - - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) - For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumeAllowShrink: - description: VolumeAllowShrink allows shrinking of the volume - type: boolean - volumeClaimTemplate: - description: |- - VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. - This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. - The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. - If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim - with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` - and `iops` is not forwarded to the pods resource requirements. - properties: - apiVersion: - type: string - kind: - type: string - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - creationTimestamp: - format: date-time - type: string - deletionGracePeriodSeconds: - format: int64 - type: integer - deletionTimestamp: - format: date-time - type: string - finalizers: - items: - type: string - type: array - generateName: - type: string - generation: - format: int64 - type: integer - labels: - additionalProperties: - type: string - type: object - managedFields: - items: - properties: - apiVersion: - type: string - fieldsType: - type: string - fieldsV1: - type: object - manager: - type: string - operation: - type: string - subresource: - type: string - time: - format: date-time - type: string - type: object - type: array - name: - type: string - namespace: - type: string - ownerReferences: - items: - properties: - apiVersion: - type: string - blockOwnerDeletion: - type: boolean - controller: - type: boolean - kind: - type: string - name: - type: string - uid: - type: string - type: object - type: array - resourceVersion: - type: string - selfLink: - type: string - uid: - type: string - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - type: object - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - type: object - resources: - properties: - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: - type: string - type: array - allocatedResourceStatuses: - additionalProperties: - type: string - type: object - allocatedResources: - additionalProperties: - type: string - type: object - capacity: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - type: object - type: array - currentVolumeAttributesClassName: - type: string - modifyVolumeStatus: - properties: - status: - type: string - targetVolumeAttributesClassName: - type: string - type: object - phase: - type: string - type: object - type: object - volumeMounts: - description: VolumeMounts define list of volume mounts mounted into server container - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - volumes: - description: Volumes define list of volumes mounted to pod - items: - properties: - configMap: - description: ConfigMap which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - emptyDir: - description: EmptyDir - properties: - medium: - type: string - sizeLimit: - type: string - type: object - hostPath: - description: HostPath - properties: - path: - type: string - type: - type: string - type: object - name: - description: Name of volume - type: string - persistentVolumeClaim: - description: PersistentVolumeClaim - properties: - claimName: - type: string - readOnly: - type: boolean - type: object - secret: - description: Secret which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - type: object - type: array - type: object - storageEngine: - description: StorageEngine specifies the type of storage engine used for all servers in the cluster. - enum: - - RocksDB - - MMFiles - type: string - sync: - description: Sync holds Deployment-to-Deployment synchronization configuration settings - properties: - auth: - properties: - clientCASecretName: - description: |- - ClientCASecretName setting specifies the name of a kubernetes `Secret` that contains - a PEM encoded CA certificate used for client certificate verification - in all ArangoSync master servers. - This is a required setting when `spec.sync.enabled` is `true`. - type: string - jwtSecretName: - description: |- - JWTSecretName setting specifies the name of a kubernetes `Secret` that contains - the JWT token used for accessing all ArangoSync master servers. - When not specified, the `spec.auth.jwtSecretName` value is used. - If you specify a name of a `Secret` that does not exist, a random token is created - and stored in a `Secret` with given name. - type: string - type: object - enabled: - description: |- - Enabled setting enables/disables support for data center 2 data center - replication in the cluster. When enabled, the cluster will contain - a number of `syncmaster` & `syncworker` servers. - type: boolean - externalAccess: - properties: - accessPackageSecretNames: - description: |- - AccessPackageSecretNames setting specifies the names of zero of more `Secrets` that will be created by the deployment - operator containing "access packages". An access package contains those `Secrets` that are needed - to access the SyncMasters of this `ArangoDeployment`. - By removing a name from this setting, the corresponding `Secret` is also deleted. - Note that to remove all access packages, leave an empty array in place (`[]`). - Completely removing the setting results in not modifying the list. - items: - type: string - type: array - advertisedEndpoint: - description: AdvertisedEndpoint is passed to the coordinators/single servers for advertising a specific endpoint - type: string - loadBalancerIP: - description: |- - LoadBalancerIP define optional IP used to configure a load-balancer on, in case of Auto or LoadBalancer type. - If you do not specify this setting, an IP will be chosen automatically by the load-balancer provisioner. - type: string - loadBalancerSourceRanges: - description: |- - LoadBalancerSourceRanges define LoadBalancerSourceRanges used for LoadBalancer Service type - If specified and supported by the platform, this will restrict traffic through the cloud-provider - load-balancer will be restricted to the specified client IPs. This field will be ignored if the - cloud-provider does not support the feature. - items: - type: string - type: array - managedServiceNames: - description: |- - ManagedServiceNames keeps names of services which are not managed by KubeArangoDB. - It is only relevant when type of service is `managed`. - items: - type: string - type: array - masterEndpoint: - description: |- - MasterEndpoint setting specifies the master endpoint(s) advertised by the ArangoSync SyncMasters. - If not set, this setting defaults to: - - If `spec.sync.externalAccess.loadBalancerIP` is set, it defaults to `https://:<8629>`. - - Otherwise it defaults to `https://:<8629>`. - items: - type: string - type: array - nodePort: - description: |- - NodePort define optional port used in case of Auto or NodePort type. - This setting is used when `spec.externalAccess.type` is set to `NodePort` or `Auto`. - If you do not specify this setting, a random port will be chosen automatically. - format: int32 - type: integer - type: - description: Type specifies the type of Service that will be created to provide access to the ArangoDB deployment from outside the Kubernetes cluster. - enum: - - Auto - - None - - LoadBalancer - - NodePort - type: string - type: object - image: - type: string - monitoring: - properties: - tokenSecretName: - description: |- - TokenSecretName setting specifies the name of a kubernetes `Secret` that contains - the bearer token used for accessing all monitoring endpoints of all arangod/arangosync servers. - When not specified, no monitoring token is used. - type: string - type: object - tls: - properties: - altNames: - description: |- - AltNames setting specifies a list of alternate names that will be added to all generated - certificates. These names can be DNS names or email addresses. - The default value is empty. - items: - type: string - type: array - caSecretName: - description: |- - CASecretName setting specifies the name of a kubernetes `Secret` that contains - a standard CA certificate + private key used to sign certificates for individual - ArangoDB servers. - When no name is specified, it defaults to `-ca`. - To disable authentication, set this value to `None`. - If you specify a name of a `Secret` that does not exist, a self-signed CA certificate + key is created - and stored in a `Secret` with given name. - The specified `Secret`, must contain the following data fields: - - `ca.crt` PEM encoded public key of the CA certificate - - `ca.key` PEM encoded private key of the CA certificate - type: string - mode: - type: string - sni: - properties: - mapping: - additionalProperties: - items: - type: string - type: array - type: object - type: object - ttl: - description: |- - TTL setting specifies the time to live of all generated server certificates. - When the server certificate is about to expire, it will be automatically replaced - by a new one and the affected server will be restarted. - Note: The time to live of the CA certificate (when created automatically) - will be set to 10 years. - type: string - type: object - type: object - syncmasters: - description: SyncMasters contains specification for Syncmaster pods running in deployment mode `Cluster`. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - allowMemberRecreation: - description: |- - AllowMemberRecreation allows to recreate member. - This setting changes the member recreation logic based on group: - - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) - - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. - type: boolean - annotations: - additionalProperties: - type: string - description: |- - Annotations specified the annotations added to Pods in this group. - Annotations are merged with `spec.annotations`. - type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode Define annotations mode which should be use while overriding annotations - type: string - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - count: - description: |- - Count setting specifies the number of servers to start for the given group. - For the Agent group, this value must be a positive, odd number. - The default value is `3` for all groups except `single` (there the default is `1` - for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). - For the `syncworkers` group, it is highly recommended to use the same number - as for the `dbservers` group. - format: int32 - type: integer - entrypoint: - description: Entrypoint overrides container executable - type: string - envs: - description: Envs allow to specify additional envs in this group. - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - ephemeralVolumes: - description: EphemeralVolumes keeps information about ephemeral volumes. - properties: - apps: - description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - temp: - description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - type: object - exporterPort: - description: ExporterPort define Port used by exporter - format: int32 - type: integer - extendedRotationCheck: - description: ExtendedRotationCheck extend checks for rotation - type: boolean - externalPortEnabled: - description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members - type: boolean - indexMethod: - description: IndexMethod define group Indexing method - enum: - - random - - ordered - type: string - initContainers: - description: InitContainers Init containers specification - properties: - containers: - description: Containers contains list of containers - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - mode: - description: Mode keep container replace mode - type: string - type: object - internalPort: - description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - format: int32 - type: integer - internalPortProtocol: - description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - type: string - labels: - additionalProperties: - type: string - description: Labels specified the labels added to Pods in this group. - type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored - items: - type: string - type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels - type: string - maxCount: - description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. - format: int32 - type: integer - memoryReservation: - description: |- - MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. - If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. - Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. - format: int64 - type: integer - minCount: - description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. - format: int32 - type: integer - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. - type: object - numactl: - description: Numactl define Numactl options passed to the process - properties: - args: - description: Args define list of the numactl process - items: - type: string - type: array - enabled: - description: Enabled define if numactl should be enabled - type: boolean - path: - description: Path define numactl path within the container - type: string - type: object - overrideDetectedNumberOfCores: - description: |- - OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. - If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. - type: boolean - overrideDetectedTotalMemory: - description: |- - OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. - If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. - type: boolean - podModes: - description: PodModes define additional modes enabled on the Pod level - properties: - network: - type: string - pid: - type: string - type: object - port: - description: Port define Port used by member - format: int32 - type: integer - priorityClassName: - description: |- - PriorityClassName specifies a priority class name - Will be forwarded to the pod spec. - type: string - probes: - description: Probes specifies additional behaviour for probes - properties: - ReadinessProbeDisabled: - description: OldReadinessProbeDisabled if true readinessProbes are disabled - type: boolean - livenessProbeDisabled: - description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group - type: boolean - livenessProbeSpec: - description: LivenessProbeSpec override liveness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - readinessProbeDisabled: - description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility - type: boolean - readinessProbeSpec: - description: ReadinessProbeSpec override readiness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - startupProbeDisabled: - description: StartupProbeDisabled if true startupProbes are disabled - type: boolean - startupProbeSpec: - description: StartupProbeSpec override startup probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - type: object - pvcResizeMode: - description: VolumeResizeMode specified resize mode for PVCs and PVs - enum: - - runtime - - rotate - type: string - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - schedulerName: - description: SchedulerName define scheduler name used for group - type: string - securityContext: - description: |- - SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. - This is similar (but not fully compatible) to k8s SecurityContext definition. - properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: - type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. - properties: - localhostProfile: - type: string - type: - type: string - type: object - supplementalGroups: - description: |- - SupplementalGroups is 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. - items: - format: int64 - type: integer - type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object - type: object - serviceAccountName: - description: |- - ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created - for each server of this group. If empty, it defaults to using the - `default` service account. - Using an alternative `ServiceAccount` is typically used to separate access rights. - The ArangoDB deployments need some very minimal access rights. With the - deployment of the operator, we grant the rights to 'get' all 'pod' resources. - If you are using a different service account, please grant these rights - to that service account. - type: string - shutdownDelay: - description: ShutdownDelay define how long operator should delay finalizer removal after shutdown - format: int32 - type: integer - shutdownMethod: - description: ShutdownMethod describe procedure of member shutdown taken by Operator - type: string - sidecarCoreNames: - description: |- - SidecarCoreNames is a list of sidecar containers which must run in the pod. - Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. - items: - type: string - type: array - sidecars: - description: Sidecars specifies a list of additional containers to be started - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - storageClassName: - description: StorageClassName specifies the classname for storage of the servers. - type: string - terminationGracePeriodSeconds: - description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation - format: int64 - type: integer - tolerations: - description: |- - Tolerations specifies the tolerations added to Pods in this group. - By default, suitable tolerations are set for the following keys with the `NoExecute` effect: - - `node.kubernetes.io/not-ready` - - `node.kubernetes.io/unreachable` - - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) - For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumeAllowShrink: - description: VolumeAllowShrink allows shrinking of the volume - type: boolean - volumeClaimTemplate: - description: |- - VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. - This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. - The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. - If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim - with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` - and `iops` is not forwarded to the pods resource requirements. - properties: - apiVersion: - type: string - kind: - type: string - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - creationTimestamp: - format: date-time - type: string - deletionGracePeriodSeconds: - format: int64 - type: integer - deletionTimestamp: - format: date-time - type: string - finalizers: - items: - type: string - type: array - generateName: - type: string - generation: - format: int64 - type: integer - labels: - additionalProperties: - type: string - type: object - managedFields: - items: - properties: - apiVersion: - type: string - fieldsType: - type: string - fieldsV1: - type: object - manager: - type: string - operation: - type: string - subresource: - type: string - time: - format: date-time - type: string - type: object - type: array - name: - type: string - namespace: - type: string - ownerReferences: - items: - properties: - apiVersion: - type: string - blockOwnerDeletion: - type: boolean - controller: - type: boolean - kind: - type: string - name: - type: string - uid: - type: string - type: object - type: array - resourceVersion: - type: string - selfLink: - type: string - uid: - type: string - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - type: object - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - type: object - resources: - properties: - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: - type: string - type: array - allocatedResourceStatuses: - additionalProperties: - type: string - type: object - allocatedResources: - additionalProperties: - type: string - type: object - capacity: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - type: object - type: array - currentVolumeAttributesClassName: - type: string - modifyVolumeStatus: - properties: - status: - type: string - targetVolumeAttributesClassName: - type: string - type: object - phase: - type: string - type: object - type: object - volumeMounts: - description: VolumeMounts define list of volume mounts mounted into server container - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - volumes: - description: Volumes define list of volumes mounted to pod - items: - properties: - configMap: - description: ConfigMap which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - emptyDir: - description: EmptyDir - properties: - medium: - type: string - sizeLimit: - type: string - type: object - hostPath: - description: HostPath - properties: - path: - type: string - type: - type: string - type: object - name: - description: Name of volume - type: string - persistentVolumeClaim: - description: PersistentVolumeClaim - properties: - claimName: - type: string - readOnly: - type: boolean - type: object - secret: - description: Secret which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - type: object - type: array - type: object - syncworkers: - description: SyncWorkers contains specification for Syncworker pods running in deployment mode `Cluster`. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - allowMemberRecreation: - description: |- - AllowMemberRecreation allows to recreate member. - This setting changes the member recreation logic based on group: - - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) - - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. - type: boolean - annotations: - additionalProperties: - type: string - description: |- - Annotations specified the annotations added to Pods in this group. - Annotations are merged with `spec.annotations`. - type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode Define annotations mode which should be use while overriding annotations - type: string - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - count: - description: |- - Count setting specifies the number of servers to start for the given group. - For the Agent group, this value must be a positive, odd number. - The default value is `3` for all groups except `single` (there the default is `1` - for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). - For the `syncworkers` group, it is highly recommended to use the same number - as for the `dbservers` group. - format: int32 - type: integer - entrypoint: - description: Entrypoint overrides container executable - type: string - envs: - description: Envs allow to specify additional envs in this group. - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - ephemeralVolumes: - description: EphemeralVolumes keeps information about ephemeral volumes. - properties: - apps: - description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - temp: - description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - type: object - exporterPort: - description: ExporterPort define Port used by exporter - format: int32 - type: integer - extendedRotationCheck: - description: ExtendedRotationCheck extend checks for rotation - type: boolean - externalPortEnabled: - description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members - type: boolean - indexMethod: - description: IndexMethod define group Indexing method - enum: - - random - - ordered - type: string - initContainers: - description: InitContainers Init containers specification - properties: - containers: - description: Containers contains list of containers - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - mode: - description: Mode keep container replace mode - type: string - type: object - internalPort: - description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - format: int32 - type: integer - internalPortProtocol: - description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - type: string - labels: - additionalProperties: - type: string - description: Labels specified the labels added to Pods in this group. - type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored - items: - type: string - type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels - type: string - maxCount: - description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. - format: int32 - type: integer - memoryReservation: - description: |- - MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. - If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. - Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. - format: int64 - type: integer - minCount: - description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. - format: int32 - type: integer - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. - type: object - numactl: - description: Numactl define Numactl options passed to the process - properties: - args: - description: Args define list of the numactl process - items: - type: string - type: array - enabled: - description: Enabled define if numactl should be enabled - type: boolean - path: - description: Path define numactl path within the container - type: string - type: object - overrideDetectedNumberOfCores: - description: |- - OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. - If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. - type: boolean - overrideDetectedTotalMemory: - description: |- - OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. - If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. - type: boolean - podModes: - description: PodModes define additional modes enabled on the Pod level - properties: - network: - type: string - pid: - type: string - type: object - port: - description: Port define Port used by member - format: int32 - type: integer - priorityClassName: - description: |- - PriorityClassName specifies a priority class name - Will be forwarded to the pod spec. - type: string - probes: - description: Probes specifies additional behaviour for probes - properties: - ReadinessProbeDisabled: - description: OldReadinessProbeDisabled if true readinessProbes are disabled - type: boolean - livenessProbeDisabled: - description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group - type: boolean - livenessProbeSpec: - description: LivenessProbeSpec override liveness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - readinessProbeDisabled: - description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility - type: boolean - readinessProbeSpec: - description: ReadinessProbeSpec override readiness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - startupProbeDisabled: - description: StartupProbeDisabled if true startupProbes are disabled - type: boolean - startupProbeSpec: - description: StartupProbeSpec override startup probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - type: object - pvcResizeMode: - description: VolumeResizeMode specified resize mode for PVCs and PVs - enum: - - runtime - - rotate - type: string - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - schedulerName: - description: SchedulerName define scheduler name used for group - type: string - securityContext: - description: |- - SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. - This is similar (but not fully compatible) to k8s SecurityContext definition. - properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: - type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. - properties: - localhostProfile: - type: string - type: - type: string - type: object - supplementalGroups: - description: |- - SupplementalGroups is 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. - items: - format: int64 - type: integer - type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object - type: object - serviceAccountName: - description: |- - ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created - for each server of this group. If empty, it defaults to using the - `default` service account. - Using an alternative `ServiceAccount` is typically used to separate access rights. - The ArangoDB deployments need some very minimal access rights. With the - deployment of the operator, we grant the rights to 'get' all 'pod' resources. - If you are using a different service account, please grant these rights - to that service account. - type: string - shutdownDelay: - description: ShutdownDelay define how long operator should delay finalizer removal after shutdown - format: int32 - type: integer - shutdownMethod: - description: ShutdownMethod describe procedure of member shutdown taken by Operator - type: string - sidecarCoreNames: - description: |- - SidecarCoreNames is a list of sidecar containers which must run in the pod. - Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. - items: - type: string - type: array - sidecars: - description: Sidecars specifies a list of additional containers to be started - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - storageClassName: - description: StorageClassName specifies the classname for storage of the servers. - type: string - terminationGracePeriodSeconds: - description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation - format: int64 - type: integer - tolerations: - description: |- - Tolerations specifies the tolerations added to Pods in this group. - By default, suitable tolerations are set for the following keys with the `NoExecute` effect: - - `node.kubernetes.io/not-ready` - - `node.kubernetes.io/unreachable` - - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) - For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumeAllowShrink: - description: VolumeAllowShrink allows shrinking of the volume - type: boolean - volumeClaimTemplate: - description: |- - VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. - This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. - The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. - If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim - with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` - and `iops` is not forwarded to the pods resource requirements. - properties: - apiVersion: - type: string - kind: - type: string - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - creationTimestamp: - format: date-time - type: string - deletionGracePeriodSeconds: - format: int64 - type: integer - deletionTimestamp: - format: date-time - type: string - finalizers: - items: - type: string - type: array - generateName: - type: string - generation: - format: int64 - type: integer - labels: - additionalProperties: - type: string - type: object - managedFields: - items: - properties: - apiVersion: - type: string - fieldsType: - type: string - fieldsV1: - type: object - manager: - type: string - operation: - type: string - subresource: - type: string - time: - format: date-time - type: string - type: object - type: array - name: - type: string - namespace: - type: string - ownerReferences: - items: - properties: - apiVersion: - type: string - blockOwnerDeletion: - type: boolean - controller: - type: boolean - kind: - type: string - name: - type: string - uid: - type: string - type: object - type: array - resourceVersion: - type: string - selfLink: - type: string - uid: - type: string - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - type: object - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - type: object - resources: - properties: - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: - type: string - type: array - allocatedResourceStatuses: - additionalProperties: - type: string - type: object - allocatedResources: - additionalProperties: - type: string - type: object - capacity: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - type: object - type: array - currentVolumeAttributesClassName: - type: string - modifyVolumeStatus: - properties: - status: - type: string - targetVolumeAttributesClassName: - type: string - type: object - phase: - type: string - type: object - type: object - volumeMounts: - description: VolumeMounts define list of volume mounts mounted into server container - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - volumes: - description: Volumes define list of volumes mounted to pod - items: - properties: - configMap: - description: ConfigMap which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - emptyDir: - description: EmptyDir - properties: - medium: - type: string - sizeLimit: - type: string - type: object - hostPath: - description: HostPath - properties: - path: - type: string - type: - type: string - type: object - name: - description: Name of volume - type: string - persistentVolumeClaim: - description: PersistentVolumeClaim - properties: - claimName: - type: string - readOnly: - type: boolean - type: object - secret: - description: Secret which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - type: object - type: array - type: object - timeouts: - description: Timeouts object allows to configure various time-outs - properties: - actions: - additionalProperties: - type: object - description: Actions keep map of the actions timeouts. - type: object - maintenanceGracePeriod: - description: MaintenanceGracePeriod action timeout - type: object - type: object - timezone: - description: |- - Timezone if specified, will set a timezone for deployment. - Must be in format accepted by "tzdata", e.g. `America/New_York` or `Europe/London` - type: string - tls: - description: TLS holds TLS configuration settings - properties: - altNames: - description: |- - AltNames setting specifies a list of alternate names that will be added to all generated - certificates. These names can be DNS names or email addresses. - The default value is empty. - items: - type: string - type: array - caSecretName: - description: |- - CASecretName setting specifies the name of a kubernetes `Secret` that contains - a standard CA certificate + private key used to sign certificates for individual - ArangoDB servers. - When no name is specified, it defaults to `-ca`. - To disable authentication, set this value to `None`. - If you specify a name of a `Secret` that does not exist, a self-signed CA certificate + key is created - and stored in a `Secret` with given name. - The specified `Secret`, must contain the following data fields: - - `ca.crt` PEM encoded public key of the CA certificate - - `ca.key` PEM encoded private key of the CA certificate - type: string - mode: - type: string - sni: - properties: - mapping: - additionalProperties: - items: - type: string - type: array - type: object - type: object - ttl: - description: |- - TTL setting specifies the time to live of all generated server certificates. - When the server certificate is about to expire, it will be automatically replaced - by a new one and the affected server will be restarted. - Note: The time to live of the CA certificate (when created automatically) - will be set to 10 years. - type: string - type: object - topology: - description: Topology define topology adjustment details, Enterprise only - properties: - enabled: - type: boolean - label: - type: string - zones: - format: int32 - type: integer - type: object - upgrade: - description: Upgrade allows to configure upgrade-related options - properties: - autoUpgrade: - description: AutoUpgrade flag specifies if upgrade should be auto-injected, even if is not required (in case of stuck) - type: boolean - debugLog: - description: |- - DebugLog flag specifies if containers running upgrade process should print more debugging information. - This applies only to init containers. - type: boolean - type: object - type: object - status: - description: Object with preserved fields for backward compatibility - type: object - x-kubernetes-preserve-unknown-fields: true - type: object -v2alpha1: - openAPIV3Schema: - properties: - spec: - properties: - ClusterDomain: - description: |- - ClusterDomain define domain used in the kubernetes cluster. - Required only of domain is not set to default (cluster.local) - type: string - agents: - description: Agents contains specification for Agency pods running in deployment mode `Cluster` or `ActiveFailover`. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - allowMemberRecreation: - description: |- - AllowMemberRecreation allows to recreate member. - This setting changes the member recreation logic based on group: - - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) - - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. - type: boolean - annotations: - additionalProperties: - type: string - description: |- - Annotations specified the annotations added to Pods in this group. - Annotations are merged with `spec.annotations`. - type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode Define annotations mode which should be use while overriding annotations - type: string - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - count: - description: |- - Count setting specifies the number of servers to start for the given group. - For the Agent group, this value must be a positive, odd number. - The default value is `3` for all groups except `single` (there the default is `1` - for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). - For the `syncworkers` group, it is highly recommended to use the same number - as for the `dbservers` group. - format: int32 - type: integer - entrypoint: - description: Entrypoint overrides container executable - type: string - envs: - description: Envs allow to specify additional envs in this group. - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - ephemeralVolumes: - description: EphemeralVolumes keeps information about ephemeral volumes. - properties: - apps: - description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - temp: - description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - type: object - exporterPort: - description: ExporterPort define Port used by exporter - format: int32 - type: integer - extendedRotationCheck: - description: ExtendedRotationCheck extend checks for rotation - type: boolean - externalPortEnabled: - description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members - type: boolean - indexMethod: - description: IndexMethod define group Indexing method - enum: - - random - - ordered - type: string - initContainers: - description: InitContainers Init containers specification - properties: - containers: - description: Containers contains list of containers - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - mode: - description: Mode keep container replace mode - type: string - type: object - internalPort: - description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - format: int32 - type: integer - internalPortProtocol: - description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - type: string - labels: - additionalProperties: - type: string - description: Labels specified the labels added to Pods in this group. - type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored - items: - type: string - type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels - type: string - maxCount: - description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. - format: int32 - type: integer - memoryReservation: - description: |- - MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. - If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. - Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. - format: int64 - type: integer - minCount: - description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. - format: int32 - type: integer - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. - type: object - numactl: - description: Numactl define Numactl options passed to the process - properties: - args: - description: Args define list of the numactl process - items: - type: string - type: array - enabled: - description: Enabled define if numactl should be enabled - type: boolean - path: - description: Path define numactl path within the container - type: string - type: object - overrideDetectedNumberOfCores: - description: |- - OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. - If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. - type: boolean - overrideDetectedTotalMemory: - description: |- - OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. - If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. - type: boolean - podModes: - description: PodModes define additional modes enabled on the Pod level - properties: - network: - type: string - pid: - type: string - type: object - port: - description: Port define Port used by member - format: int32 - type: integer - priorityClassName: - description: |- - PriorityClassName specifies a priority class name - Will be forwarded to the pod spec. - type: string - probes: - description: Probes specifies additional behaviour for probes - properties: - ReadinessProbeDisabled: - description: OldReadinessProbeDisabled if true readinessProbes are disabled - type: boolean - livenessProbeDisabled: - description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group - type: boolean - livenessProbeSpec: - description: LivenessProbeSpec override liveness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - readinessProbeDisabled: - description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility - type: boolean - readinessProbeSpec: - description: ReadinessProbeSpec override readiness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - startupProbeDisabled: - description: StartupProbeDisabled if true startupProbes are disabled - type: boolean - startupProbeSpec: - description: StartupProbeSpec override startup probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - type: object - pvcResizeMode: - description: VolumeResizeMode specified resize mode for PVCs and PVs - enum: - - runtime - - rotate - type: string - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - schedulerName: - description: SchedulerName define scheduler name used for group - type: string - securityContext: - description: |- - SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. - This is similar (but not fully compatible) to k8s SecurityContext definition. - properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: - type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. - properties: - localhostProfile: - type: string - type: - type: string - type: object - supplementalGroups: - description: |- - SupplementalGroups is 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. - items: - format: int64 - type: integer - type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object - type: object - serviceAccountName: - description: |- - ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created - for each server of this group. If empty, it defaults to using the - `default` service account. - Using an alternative `ServiceAccount` is typically used to separate access rights. - The ArangoDB deployments need some very minimal access rights. With the - deployment of the operator, we grant the rights to 'get' all 'pod' resources. - If you are using a different service account, please grant these rights - to that service account. - type: string - shutdownDelay: - description: ShutdownDelay define how long operator should delay finalizer removal after shutdown - format: int32 - type: integer - shutdownMethod: - description: ShutdownMethod describe procedure of member shutdown taken by Operator - type: string - sidecarCoreNames: - description: |- - SidecarCoreNames is a list of sidecar containers which must run in the pod. - Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. - items: - type: string - type: array - sidecars: - description: Sidecars specifies a list of additional containers to be started - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - storageClassName: - description: StorageClassName specifies the classname for storage of the servers. - type: string - terminationGracePeriodSeconds: - description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation - format: int64 - type: integer - tolerations: - description: |- - Tolerations specifies the tolerations added to Pods in this group. - By default, suitable tolerations are set for the following keys with the `NoExecute` effect: - - `node.kubernetes.io/not-ready` - - `node.kubernetes.io/unreachable` - - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) - For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumeAllowShrink: - description: VolumeAllowShrink allows shrinking of the volume - type: boolean - volumeClaimTemplate: - description: |- - VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. - This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. - The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. - If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim - with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` - and `iops` is not forwarded to the pods resource requirements. - properties: - apiVersion: - type: string - kind: - type: string - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - creationTimestamp: - format: date-time - type: string - deletionGracePeriodSeconds: - format: int64 - type: integer - deletionTimestamp: - format: date-time - type: string - finalizers: - items: - type: string - type: array - generateName: - type: string - generation: - format: int64 - type: integer - labels: - additionalProperties: - type: string - type: object - managedFields: - items: - properties: - apiVersion: - type: string - fieldsType: - type: string - fieldsV1: - type: object - manager: - type: string - operation: - type: string - subresource: - type: string - time: - format: date-time - type: string - type: object - type: array - name: - type: string - namespace: - type: string - ownerReferences: - items: - properties: - apiVersion: - type: string - blockOwnerDeletion: - type: boolean - controller: - type: boolean - kind: - type: string - name: - type: string - uid: - type: string - type: object - type: array - resourceVersion: - type: string - selfLink: - type: string - uid: - type: string - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - type: object - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - type: object - resources: - properties: - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: - type: string - type: array - allocatedResourceStatuses: - additionalProperties: - type: string - type: object - allocatedResources: - additionalProperties: - type: string - type: object - capacity: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - type: object - type: array - currentVolumeAttributesClassName: - type: string - modifyVolumeStatus: - properties: - status: - type: string - targetVolumeAttributesClassName: - type: string - type: object - phase: - type: string - type: object - type: object - volumeMounts: - description: VolumeMounts define list of volume mounts mounted into server container - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - volumes: - description: Volumes define list of volumes mounted to pod - items: - properties: - configMap: - description: ConfigMap which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - emptyDir: - description: EmptyDir - properties: - medium: - type: string - sizeLimit: - type: string - type: object - hostPath: - description: HostPath - properties: - path: - type: string - type: - type: string - type: object - name: - description: Name of volume - type: string - persistentVolumeClaim: - description: PersistentVolumeClaim - properties: - claimName: - type: string - readOnly: - type: boolean - type: object - secret: - description: Secret which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - type: object - type: array - type: object - allowUnsafeUpgrade: - description: AllowUnsafeUpgrade determines if upgrade on missing member or with not in sync shards is allowed - type: boolean - annotations: - additionalProperties: - type: string - description: Annotations specifies the annotations added to all ArangoDeployment owned resources (pods, services, PVC’s, PDB’s). - type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode defines annotations mode which should be use while overriding annotations. - enum: - - disabled - - append - - replace - type: string - architecture: - description: |- - Architecture defines the list of supported architectures. - First element on the list is marked as default architecture. - Possible values are: - - `amd64`: Use processors with the x86-64 architecture. - - `arm64`: Use processors with the 64-bit ARM architecture. - The setting expects a list of strings, but you should only specify a single - list item for the architecture, except when you want to migrate from one - architecture to the other. The first list item defines the new default - architecture for the deployment that you want to migrate to. - items: - type: string - type: array - auth: - description: Authentication holds authentication configuration settings - properties: - jwtSecretName: - description: |- - JWTSecretName setting specifies the name of a kubernetes `Secret` that contains a secret key used for generating - JWT tokens to access all ArangoDB servers. - When no name is specified, it defaults to `-jwt`. - To disable authentication, set this value to `None`. - If you specify a name of a `Secret`, that secret must have the key value in a data field named `token`. - If you specify a name of a `Secret` that does not exist, a random key is created and stored in a `Secret` with given name. - Changing secret key results in restarting of a whole cluster. - type: string - type: object - bootstrap: - description: Bootstrap contains information for cluster bootstrapping - properties: - passwordSecretNames: - additionalProperties: - type: string - description: |- - PasswordSecretNames contains a map of username to password-secret-name - This setting specifies a secret name for the credentials per specific users. - When a deployment is created the operator will setup the user accounts - according to the credentials given by the secret. If the secret doesn't exist - the operator creates a secret with a random password. - There are two magic values for the secret name: - - `None` specifies no action. This disables root password randomization. This is the default value. (Thus the root password is empty - not recommended) - - `Auto` specifies automatic name generation, which is `-root-password`. - type: object - type: object - chaos: - description: ChaosSpec can be used for chaos-monkey testing of your ArangoDeployment - properties: - enabled: - description: Enabled switches the chaos monkey for a deployment on or off. - type: boolean - interval: - description: Interval is the time between events - format: int64 - type: integer - kill-pod-probability: - description: KillPodProbability is the chance of a pod being killed during an event - format: int32 - type: integer - type: object - communicationMethod: - description: CommunicationMethod define communication method used in deployment - enum: - - headless - - dns - - short-dns - - headless-dns - - ip - type: string - coordinators: - description: Coordinators contains specification for Coordinator pods running in deployment mode `Cluster` or `ActiveFailover`. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - allowMemberRecreation: - description: |- - AllowMemberRecreation allows to recreate member. - This setting changes the member recreation logic based on group: - - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) - - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. - type: boolean - annotations: - additionalProperties: - type: string - description: |- - Annotations specified the annotations added to Pods in this group. - Annotations are merged with `spec.annotations`. - type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode Define annotations mode which should be use while overriding annotations - type: string - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - count: - description: |- - Count setting specifies the number of servers to start for the given group. - For the Agent group, this value must be a positive, odd number. - The default value is `3` for all groups except `single` (there the default is `1` - for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). - For the `syncworkers` group, it is highly recommended to use the same number - as for the `dbservers` group. - format: int32 - type: integer - entrypoint: - description: Entrypoint overrides container executable - type: string - envs: - description: Envs allow to specify additional envs in this group. - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - ephemeralVolumes: - description: EphemeralVolumes keeps information about ephemeral volumes. - properties: - apps: - description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - temp: - description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - type: object - exporterPort: - description: ExporterPort define Port used by exporter - format: int32 - type: integer - extendedRotationCheck: - description: ExtendedRotationCheck extend checks for rotation - type: boolean - externalPortEnabled: - description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members - type: boolean - indexMethod: - description: IndexMethod define group Indexing method - enum: - - random - - ordered - type: string - initContainers: - description: InitContainers Init containers specification - properties: - containers: - description: Containers contains list of containers - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - mode: - description: Mode keep container replace mode - type: string - type: object - internalPort: - description: InternalPort define port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - format: int32 - type: integer - internalPortProtocol: - description: InternalPortProtocol define protocol of port used in internal communication, can be accessed over localhost via sidecar. Only for ArangoD members - type: string - labels: - additionalProperties: - type: string - description: Labels specified the labels added to Pods in this group. - type: object - labelsIgnoreList: - description: LabelsIgnoreList list regexp or plain definitions which labels should be ignored - items: - type: string - type: array - labelsMode: - description: LabelsMode Define labels mode which should be use while overriding labels - type: string - maxCount: - description: MaxCount specifies a maximum for the count of servers. If set, a specification is invalid if `count > maxCount`. - format: int32 - type: integer - memoryReservation: - description: |- - MemoryReservation determines the system reservation of memory while calculating `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` value. - If this field is set, `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` is reduced by a specified value in percent. - Accepted Range <0, 50>. If the value is outside the accepted range, it is adjusted to the closest value. - format: int64 - type: integer - minCount: - description: MinCount specifies a minimum for the count of servers. If set, a specification is invalid if `count < minCount`. - format: int32 - type: integer - nodeAffinity: - description: NodeAffinity specified additional nodeAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - preference: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - properties: - nodeSelectorTerms: - items: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchFields: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - type: object - type: array - type: object - type: object - nodeSelector: - additionalProperties: - type: string - description: NodeSelector setting specifies a set of labels to be used as `nodeSelector` for Pods of this node. - type: object - numactl: - description: Numactl define Numactl options passed to the process - properties: - args: - description: Args define list of the numactl process - items: - type: string - type: array - enabled: - description: Enabled define if numactl should be enabled - type: boolean - path: - description: Path define numactl path within the container - type: string - type: object - overrideDetectedNumberOfCores: - description: |- - OverrideDetectedNumberOfCores determines if number of cores should be overridden based on values in resources. - If is set to true and Container CPU Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES` to the value from the Container CPU Limits. - type: boolean - overrideDetectedTotalMemory: - description: |- - OverrideDetectedTotalMemory determines if memory should be overridden based on values in resources. - If is set to true and Container Memory Limits are set, it sets Container Environment Variable `ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY` to the value from the Container Memory Limits. - type: boolean - podModes: - description: PodModes define additional modes enabled on the Pod level - properties: - network: - type: string - pid: - type: string - type: object - port: - description: Port define Port used by member - format: int32 - type: integer - priorityClassName: - description: |- - PriorityClassName specifies a priority class name - Will be forwarded to the pod spec. - type: string - probes: - description: Probes specifies additional behaviour for probes - properties: - ReadinessProbeDisabled: - description: OldReadinessProbeDisabled if true readinessProbes are disabled - type: boolean - livenessProbeDisabled: - description: LivenessProbeDisabled if set to true, the operator does not generate a liveness probe for new pods belonging to this group - type: boolean - livenessProbeSpec: - description: LivenessProbeSpec override liveness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - readinessProbeDisabled: - description: ReadinessProbeDisabled override flag for probe disabled in good manner (lowercase) with backward compatibility - type: boolean - readinessProbeSpec: - description: ReadinessProbeSpec override readiness probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - startupProbeDisabled: - description: StartupProbeDisabled if true startupProbes are disabled - type: boolean - startupProbeSpec: - description: StartupProbeSpec override startup probe configuration - properties: - failureThreshold: - description: |- - FailureThreshold when a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up. - Giving up means restarting the container. - Minimum value is 1. - format: int32 - type: integer - initialDelaySeconds: - description: |- - InitialDelaySeconds specifies number of seconds after the container has started before liveness or readiness probes are initiated. - Minimum value is 0. - format: int32 - type: integer - periodSeconds: - description: |- - PeriodSeconds How often (in seconds) to perform the probe. - Minimum value is 1. - format: int32 - type: integer - successThreshold: - description: |- - SuccessThreshold Minimum consecutive successes for the probe to be considered successful after having failed. - Minimum value is 1. - format: int32 - type: integer - timeoutSeconds: - description: |- - TimeoutSeconds specifies number of seconds after which the probe times out - Minimum value is 1. - format: int32 - type: integer - type: object - type: object - pvcResizeMode: - description: VolumeResizeMode specified resize mode for PVCs and PVs - enum: - - runtime - - rotate - type: string - resources: - description: Resources holds resource requests & limits - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - schedulerName: - description: SchedulerName define scheduler name used for group - type: string - securityContext: - description: |- - SecurityContext specifies additional `securityContext` settings in ArangoDB Pod definitions. - This is similar (but not fully compatible) to k8s SecurityContext definition. - properties: - addCapabilities: - description: AddCapabilities add new capabilities to containers - items: - type: string - type: array - allowPrivilegeEscalation: - description: AllowPrivilegeEscalation Controls whether a process can gain more privileges than its parent process. - type: boolean - dropAllCapabilities: - description: DropAllCapabilities specifies if capabilities should be dropped for this pod containers - type: boolean - fsGroup: - description: FSGroup is a special supplemental group that applies to all containers in a pod. - format: int64 - type: integer - privileged: - description: |- - Privileged If true, runs container in privileged mode. Processes in privileged containers are - essentially equivalent to root on the host. - type: boolean - readOnlyRootFilesystem: - description: ReadOnlyRootFilesystem if true, mounts the container's root filesystem as read-only. - type: boolean - runAsGroup: - description: RunAsGroup is the GID to run the entrypoint of the container process. - format: int64 - type: integer - runAsNonRoot: - description: RunAsNonRoot if true, indicates that the container must run as a non-root user. - type: boolean - runAsUser: - description: RunAsUser is the UID to run the entrypoint of the container process. - format: int64 - type: integer - seLinuxOptions: - description: SELinuxOptions are the labels to be applied to the container - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - description: SeccompProfile defines a pod/container's seccomp profile settings. Only one profile source may be set. - properties: - localhostProfile: - type: string - type: - type: string - type: object - supplementalGroups: - description: |- - SupplementalGroups is 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. - items: - format: int64 - type: integer - type: array - sysctls: - additionalProperties: - type: string - x-kubernetes-int-or-string: true - description: |- - Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - sysctls (by the container runtime) might fail to launch. - Map Value can be String or Int - type: object - type: object - serviceAccountName: - description: |- - ServiceAccountName setting specifies the `serviceAccountName` for the `Pods` created - for each server of this group. If empty, it defaults to using the - `default` service account. - Using an alternative `ServiceAccount` is typically used to separate access rights. - The ArangoDB deployments need some very minimal access rights. With the - deployment of the operator, we grant the rights to 'get' all 'pod' resources. - If you are using a different service account, please grant these rights - to that service account. - type: string - shutdownDelay: - description: ShutdownDelay define how long operator should delay finalizer removal after shutdown - format: int32 - type: integer - shutdownMethod: - description: ShutdownMethod describe procedure of member shutdown taken by Operator - type: string - sidecarCoreNames: - description: |- - SidecarCoreNames is a list of sidecar containers which must run in the pod. - Some names (e.g.: "server", "worker") are reserved, and they don't have any impact. - items: - type: string - type: array - sidecars: - description: Sidecars specifies a list of additional containers to be started - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - storageClassName: - description: StorageClassName specifies the classname for storage of the servers. - type: string - terminationGracePeriodSeconds: - description: TerminationGracePeriodSeconds override default TerminationGracePeriodSeconds for pods - via silent rotation - format: int64 - type: integer - tolerations: - description: |- - Tolerations specifies the tolerations added to Pods in this group. - By default, suitable tolerations are set for the following keys with the `NoExecute` effect: - - `node.kubernetes.io/not-ready` - - `node.kubernetes.io/unreachable` - - `node.alpha.kubernetes.io/unreachable` (will be removed in future version) - For more information on tolerations, consult the https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ - items: - properties: - effect: - type: string - key: - type: string - operator: - type: string - tolerationSeconds: - format: int64 - type: integer - value: - type: string - type: object - type: array - volumeAllowShrink: - description: VolumeAllowShrink allows shrinking of the volume - type: boolean - volumeClaimTemplate: - description: |- - VolumeClaimTemplate specifies a volumeClaimTemplate used by operator to create to volume claims for pods of this group. - This setting is not available for group `coordinators`, `syncmasters` & `syncworkers`. - The default value describes a volume with `8Gi` storage, `ReadWriteOnce` access mode and volume mode set to `PersistentVolumeFilesystem`. - If this field is not set and `spec..resources.requests.storage` is set, then a default volume claim - with size as specified by `spec..resources.requests.storage` will be created. In that case `storage` - and `iops` is not forwarded to the pods resource requirements. - properties: - apiVersion: - type: string - kind: - type: string - metadata: - properties: - annotations: - additionalProperties: - type: string - type: object - creationTimestamp: - format: date-time - type: string - deletionGracePeriodSeconds: - format: int64 - type: integer - deletionTimestamp: - format: date-time - type: string - finalizers: - items: - type: string - type: array - generateName: - type: string - generation: - format: int64 - type: integer - labels: - additionalProperties: - type: string - type: object - managedFields: - items: - properties: - apiVersion: - type: string - fieldsType: - type: string - fieldsV1: - type: object - manager: - type: string - operation: - type: string - subresource: - type: string - time: - format: date-time - type: string - type: object - type: array - name: - type: string - namespace: - type: string - ownerReferences: - items: - properties: - apiVersion: - type: string - blockOwnerDeletion: - type: boolean - controller: - type: boolean - kind: - type: string - name: - type: string - uid: - type: string - type: object - type: array - resourceVersion: - type: string - selfLink: - type: string - uid: - type: string - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - type: object - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - type: object - resources: - properties: - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - status: - properties: - accessModes: - items: - type: string - type: array - allocatedResourceStatuses: - additionalProperties: - type: string - type: object - allocatedResources: - additionalProperties: - type: string - type: object - capacity: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastProbeTime: - format: date-time - type: string - lastTransitionTime: - format: date-time - type: string - message: - type: string - reason: - type: string - status: - type: string - type: - type: string - type: object - type: array - currentVolumeAttributesClassName: - type: string - modifyVolumeStatus: - properties: - status: - type: string - targetVolumeAttributesClassName: - type: string - type: object - phase: - type: string - type: object - type: object - volumeMounts: - description: VolumeMounts define list of volume mounts mounted into server container - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - volumes: - description: Volumes define list of volumes mounted to pod - items: - properties: - configMap: - description: ConfigMap which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - name: - type: string - optional: - type: boolean - type: object - emptyDir: - description: EmptyDir - properties: - medium: - type: string - sizeLimit: - type: string - type: object - hostPath: - description: HostPath - properties: - path: - type: string - type: - type: string - type: object - name: - description: Name of volume - type: string - persistentVolumeClaim: - description: PersistentVolumeClaim - properties: - claimName: - type: string - readOnly: - type: boolean - type: object - secret: - description: Secret which should be mounted into pod - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - type: object - type: array - optional: - type: boolean - secretName: - type: string - type: object - type: object - type: array - type: object - database: - description: Database holds information about database state, like maintenance mode - properties: - maintenance: - description: Maintenance manage maintenance mode on Cluster side. Requires maintenance feature to be enabled - type: boolean - type: object - dbservers: - description: DBServers contains specification for DBServer pods running in deployment mode `Cluster` or `ActiveFailover`. - properties: - affinity: - description: Affinity specified additional affinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - allowMemberRecreation: - description: |- - AllowMemberRecreation allows to recreate member. - This setting changes the member recreation logic based on group: - - For Sync Masters, Sync Workers, Coordinator and DB-Servers it determines if a member can be recreated in case of failure (default `true`) - - For Agents and Single this value is hardcoded to `false` and the value provided in spec is ignored. - type: boolean - annotations: - additionalProperties: - type: string - description: |- - Annotations specified the annotations added to Pods in this group. - Annotations are merged with `spec.annotations`. - type: object - annotationsIgnoreList: - description: AnnotationsIgnoreList list regexp or plain definitions which annotations should be ignored - items: - type: string - type: array - annotationsMode: - description: AnnotationsMode Define annotations mode which should be use while overriding annotations - type: string - antiAffinity: - description: AntiAffinity specified additional antiAffinity settings in ArangoDB Pod definitions - properties: - preferredDuringSchedulingIgnoredDuringExecution: - items: - properties: - podAffinityTerm: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - weight: - format: int32 - type: integer - type: object - type: array - requiredDuringSchedulingIgnoredDuringExecution: - items: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - matchLabelKeys: - items: - type: string - type: array - mismatchLabelKeys: - items: - type: string - type: array - namespaceSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - type: object - type: array - matchLabels: - additionalProperties: - type: string - type: object - type: object - namespaces: - items: - type: string - type: array - topologyKey: - type: string - type: object - type: array - type: object - args: - description: Args setting specifies additional command-line arguments passed to all servers of this group. - items: - type: string - type: array - count: - description: |- - Count setting specifies the number of servers to start for the given group. - For the Agent group, this value must be a positive, odd number. - The default value is `3` for all groups except `single` (there the default is `1` - for `spec.mode: Single` and `2` for `spec.mode: ActiveFailover`). - For the `syncworkers` group, it is highly recommended to use the same number - as for the `dbservers` group. - format: int32 - type: integer - entrypoint: - description: Entrypoint overrides container executable - type: string - envs: - description: Envs allow to specify additional envs in this group. - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - ephemeralVolumes: - description: EphemeralVolumes keeps information about ephemeral volumes. - properties: - apps: - description: Apps define apps ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - temp: - description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. - properties: - size: - description: Size define size of the ephemeral volume - type: string - type: object - type: object - exporterPort: - description: ExporterPort define Port used by exporter - format: int32 - type: integer - extendedRotationCheck: - description: ExtendedRotationCheck extend checks for rotation - type: boolean - externalPortEnabled: - description: ExternalPortEnabled if external port should be enabled. If is set to false, ports needs to be exposed via sidecar. Only for ArangoD members - type: boolean - indexMethod: - description: IndexMethod define group Indexing method - enum: - - random - - ordered - type: string - initContainers: - description: InitContainers Init containers specification - properties: - containers: - description: Containers contains list of containers - items: - properties: - args: - items: - type: string - type: array - command: - items: - type: string - type: array - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - type: object - resourceFieldRef: - properties: - containerName: - type: string - divisor: - type: string - resource: - type: string - type: object - secretKeyRef: - properties: - key: - type: string - name: - type: string - optional: - type: boolean - type: object - type: object - type: object - type: array - envFrom: - items: - properties: - configMapRef: - properties: - name: - type: string - optional: - type: boolean - type: object - prefix: - type: string - secretRef: - properties: - name: - type: string - optional: - type: boolean - type: object - type: object - type: array - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - type: object - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - type: object - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - type: string - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - type: object - type: array - resources: - properties: - claims: - items: - properties: - name: - type: string - type: object - type: array - limits: - additionalProperties: - type: string - type: object - requests: - additionalProperties: - type: string - type: object - type: object - restartPolicy: - type: string - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - capabilities: - properties: - add: - items: - type: string - type: array - drop: - items: - type: string - type: array - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - type: string - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - type: object - type: array - path: - type: string - port: - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - type: string - x-kubernetes-int-or-string: true - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - type: object - type: array - volumeMounts: - items: - properties: - mountPath: + recursiveReadOnly: type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean subPath: type: string subPathExpr: @@ -38286,6 +22378,9 @@ v2alpha1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -38580,15 +22675,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -38739,6 +22838,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -39037,15 +23137,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -39054,6 +23158,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -39204,6 +23315,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -39367,10 +23480,12 @@ v2alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -39415,10 +23530,12 @@ v2alpha1: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -39457,16 +23574,38 @@ v2alpha1: items: properties: mountPath: + description: |- + Path within the container at which the volume should be mounted. Must + not contain ':'. type: string mountPropagation: + description: |- + mountPropagation determines how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is used. + This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: + description: This must match the Name of a Volume. type: string readOnly: + description: |- + Mounted read-only if true, read-write otherwise (false or unspecified). + Defaults to false. type: boolean subPath: + description: |- + Path within the volume from which the container's volume should be mounted. + Defaults to "" (volume's root). type: string subPathExpr: + description: |- + Expanded path within the volume from which the container's volume should be mounted. + Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + Defaults to "" (volume's root). + SubPathExpr and SubPath are mutually exclusive. type: string type: object type: array @@ -39504,6 +23643,7 @@ v2alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -39957,6 +24097,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object temp: description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. @@ -39964,6 +24105,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -40028,6 +24170,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -40326,15 +24469,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -40343,6 +24490,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -40493,6 +24647,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -40505,6 +24661,9 @@ v2alpha1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -40799,15 +24958,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -40958,6 +25121,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -41256,15 +25420,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -41273,6 +25441,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -41423,6 +25598,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -41586,10 +25763,12 @@ v2alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -41634,10 +25813,12 @@ v2alpha1: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -41676,16 +25857,38 @@ v2alpha1: items: properties: mountPath: + description: |- + Path within the container at which the volume should be mounted. Must + not contain ':'. type: string mountPropagation: + description: |- + mountPropagation determines how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is used. + This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: + description: This must match the Name of a Volume. type: string readOnly: + description: |- + Mounted read-only if true, read-write otherwise (false or unspecified). + Defaults to false. type: boolean subPath: + description: |- + Path within the volume from which the container's volume should be mounted. + Defaults to "" (volume's root). type: string subPathExpr: + description: |- + Expanded path within the volume from which the container's volume should be mounted. + Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + Defaults to "" (volume's root). + SubPathExpr and SubPath are mutually exclusive. type: string type: object type: array @@ -41723,6 +25926,7 @@ v2alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -42127,15 +26331,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object securityContext: @@ -42307,6 +26515,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -42599,21 +26808,32 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object securityContext: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -42745,6 +26965,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -42793,15 +27015,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object type: object @@ -42854,15 +27080,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object serviceMonitor: @@ -43270,6 +27500,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object temp: description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. @@ -43277,6 +27508,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -43341,6 +27573,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -43639,15 +27872,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -43656,6 +27893,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -43806,6 +28050,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -43818,6 +28064,9 @@ v2alpha1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -44112,15 +28361,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -44271,6 +28524,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -44569,15 +28823,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -44586,6 +28844,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -44736,6 +29001,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -44899,10 +29166,12 @@ v2alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -44947,10 +29216,12 @@ v2alpha1: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -44989,16 +29260,38 @@ v2alpha1: items: properties: mountPath: + description: |- + Path within the container at which the volume should be mounted. Must + not contain ':'. type: string mountPropagation: + description: |- + mountPropagation determines how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is used. + This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: + description: This must match the Name of a Volume. type: string readOnly: + description: |- + Mounted read-only if true, read-write otherwise (false or unspecified). + Defaults to false. type: boolean subPath: + description: |- + Path within the volume from which the container's volume should be mounted. + Defaults to "" (volume's root). type: string subPathExpr: + description: |- + Expanded path within the volume from which the container's volume should be mounted. + Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + Defaults to "" (volume's root). + SubPathExpr and SubPath are mutually exclusive. type: string type: object type: array @@ -45036,6 +29329,7 @@ v2alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -45220,6 +29514,7 @@ v2alpha1: items: type: string type: array + description: The mapping of the Server Name Indication options. type: object type: object ttl: @@ -45550,6 +29845,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object temp: description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. @@ -45557,6 +29853,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -45621,6 +29918,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -45919,15 +30217,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -45936,6 +30238,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -46086,6 +30395,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -46098,6 +30409,9 @@ v2alpha1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -46392,15 +30706,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -46551,6 +30869,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -46849,15 +31168,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -46866,6 +31189,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -47016,6 +31346,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -47179,10 +31511,12 @@ v2alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -47227,10 +31561,12 @@ v2alpha1: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -47269,16 +31605,38 @@ v2alpha1: items: properties: mountPath: + description: |- + Path within the container at which the volume should be mounted. Must + not contain ':'. type: string mountPropagation: + description: |- + mountPropagation determines how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is used. + This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: + description: This must match the Name of a Volume. type: string readOnly: + description: |- + Mounted read-only if true, read-write otherwise (false or unspecified). + Defaults to false. type: boolean subPath: + description: |- + Path within the volume from which the container's volume should be mounted. + Defaults to "" (volume's root). type: string subPathExpr: + description: |- + Expanded path within the volume from which the container's volume should be mounted. + Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + Defaults to "" (volume's root). + SubPathExpr and SubPath are mutually exclusive. type: string type: object type: array @@ -47316,6 +31674,7 @@ v2alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -47680,6 +32039,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object temp: description: Temp define temp ephemeral volume in case if `ephemeral-volumes` feature is enabled. @@ -47687,6 +32047,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -47751,6 +32112,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -48049,15 +32411,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -48066,6 +32432,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -48216,6 +32589,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -48228,6 +32603,9 @@ v2alpha1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -48522,15 +32900,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -48681,6 +33063,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -48979,15 +33362,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -48996,6 +33383,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -49146,6 +33540,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -49309,10 +33705,12 @@ v2alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -49357,10 +33755,12 @@ v2alpha1: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -49399,16 +33799,38 @@ v2alpha1: items: properties: mountPath: + description: |- + Path within the container at which the volume should be mounted. Must + not contain ':'. type: string mountPropagation: + description: |- + mountPropagation determines how mounts are propagated from the host + to container and the other way around. + When not set, MountPropagationNone is used. + This field is beta in 1.10. + When RecursiveReadOnly is set to IfPossible or to Enabled, MountPropagation must be None or unspecified + (which defaults to None). type: string name: + description: This must match the Name of a Volume. type: string readOnly: + description: |- + Mounted read-only if true, read-write otherwise (false or unspecified). + Defaults to false. type: boolean subPath: + description: |- + Path within the volume from which the container's volume should be mounted. + Defaults to "" (volume's root). type: string subPathExpr: + description: |- + Expanded path within the volume from which the container's volume should be mounted. + Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. + Defaults to "" (volume's root). + SubPathExpr and SubPath are mutually exclusive. type: string type: object type: array @@ -49446,6 +33868,7 @@ v2alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -49542,6 +33965,7 @@ v2alpha1: items: type: string type: array + description: The mapping of the Server Name Indication options. type: object type: object ttl: diff --git a/pkg/crd/crds/database-deployment.yaml b/pkg/crd/crds/database-deployment.yaml index 22f9d1acf..5fc5a3883 100644 --- a/pkg/crd/crds/database-deployment.yaml +++ b/pkg/crd/crds/database-deployment.yaml @@ -21,13 +21,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/pkg/crd/crds/database-member.schema.generated.yaml b/pkg/crd/crds/database-member.schema.generated.yaml index 0582ff8ca..cab809b2a 100644 --- a/pkg/crd/crds/database-member.schema.generated.yaml +++ b/pkg/crd/crds/database-member.schema.generated.yaml @@ -29,15 +29,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object volumeClaimTemplate: @@ -154,10 +158,12 @@ v1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -202,10 +208,12 @@ v1: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -707,6 +715,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1005,15 +1014,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1022,6 +1035,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1172,6 +1192,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1248,6 +1270,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1546,15 +1569,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1563,6 +1590,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1715,6 +1749,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1795,6 +1831,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2093,15 +2130,19 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -2110,6 +2151,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2260,6 +2308,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2284,6 +2334,7 @@ v1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2304,13 +2355,10 @@ v1: properties: name: type: string - source: - properties: - resourceClaimName: - type: string - resourceClaimTemplateName: - type: string - type: object + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string type: object type: array restartPolicy: @@ -2328,6 +2376,13 @@ v1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2364,6 +2419,8 @@ v1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2596,6 +2653,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2608,6 +2666,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2720,10 +2779,12 @@ v1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -2837,6 +2898,13 @@ v1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -2983,6 +3051,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -3180,15 +3249,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object volumeClaimTemplate: @@ -3305,10 +3378,12 @@ v2alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -3353,10 +3428,12 @@ v2alpha1: allocatedResources: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object capacity: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object conditions: items: @@ -3858,6 +3935,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -4156,15 +4234,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -4173,6 +4255,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -4323,6 +4412,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -4399,6 +4490,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -4697,15 +4789,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -4714,6 +4810,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -4866,6 +4969,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -4946,6 +5051,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -5244,15 +5350,19 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -5261,6 +5371,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -5411,6 +5528,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -5435,6 +5554,7 @@ v2alpha1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -5455,13 +5575,10 @@ v2alpha1: properties: name: type: string - source: - properties: - resourceClaimName: - type: string - resourceClaimTemplateName: - type: string - type: object + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string type: object type: array restartPolicy: @@ -5479,6 +5596,13 @@ v2alpha1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -5515,6 +5639,8 @@ v2alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -5747,6 +5873,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -5759,6 +5886,7 @@ v2alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -5871,10 +5999,12 @@ v2alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -5988,6 +6118,13 @@ v2alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -6134,6 +6271,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object diff --git a/pkg/crd/crds/database-task.schema.generated.yaml b/pkg/crd/crds/database-task.schema.generated.yaml index c528ce124..fbcdfa4b5 100644 --- a/pkg/crd/crds/database-task.schema.generated.yaml +++ b/pkg/crd/crds/database-task.schema.generated.yaml @@ -14,22 +14,6 @@ v1: type: object x-kubernetes-preserve-unknown-fields: true type: object -v1alpha: - openAPIV3Schema: - properties: - spec: - properties: - details: - format: byte - type: string - type: - type: string - type: object - status: - description: Object with preserved fields for backward compatibility - type: object - x-kubernetes-preserve-unknown-fields: true - type: object v2alpha1: openAPIV3Schema: properties: diff --git a/pkg/crd/crds/database-task.yaml b/pkg/crd/crds/database-task.yaml index 85d452000..ccab9cbad 100644 --- a/pkg/crd/crds/database-task.yaml +++ b/pkg/crd/crds/database-task.yaml @@ -18,13 +18,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/pkg/crd/crds/ml-extension.schema.generated.yaml b/pkg/crd/crds/ml-extension.schema.generated.yaml index 17e450dfe..cb96b5c99 100644 --- a/pkg/crd/crds/ml-extension.schema.generated.yaml +++ b/pkg/crd/crds/ml-extension.schema.generated.yaml @@ -382,6 +382,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -620,6 +621,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -656,6 +664,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -774,15 +784,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -791,6 +805,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -967,6 +988,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1112,6 +1135,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1124,6 +1148,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -1236,10 +1261,12 @@ v1alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -1353,6 +1380,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -1499,6 +1533,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2035,6 +2070,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2270,6 +2306,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2306,6 +2349,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2416,15 +2461,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -2433,6 +2482,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2584,6 +2640,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2729,6 +2787,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2741,6 +2800,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2853,10 +2913,12 @@ v1alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -2970,6 +3032,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -3116,6 +3185,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -3658,6 +3728,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -3893,6 +3964,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -3929,6 +4007,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -4039,15 +4119,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -4056,6 +4140,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -4207,6 +4298,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -4352,6 +4445,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -4364,6 +4458,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -4476,10 +4571,12 @@ v1alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -4593,6 +4690,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -4739,6 +4843,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -5275,6 +5380,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -5510,6 +5616,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -5546,6 +5659,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -5656,15 +5771,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -5673,6 +5792,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -5824,6 +5950,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -5969,6 +6097,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -5981,6 +6110,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -6093,10 +6223,12 @@ v1alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -6210,6 +6342,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -6356,6 +6495,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -6896,6 +7036,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -7131,6 +7272,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -7167,6 +7315,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -7277,15 +7427,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -7294,6 +7448,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -7445,6 +7606,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -7590,6 +7753,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -7602,6 +7766,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -7714,10 +7879,12 @@ v1alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -7831,6 +7998,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -7977,6 +8151,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -8513,6 +8688,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -8748,6 +8924,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -8784,6 +8967,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -8894,15 +9079,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -8911,6 +9100,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -9062,6 +9258,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -9207,6 +9405,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -9219,6 +9418,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -9331,10 +9531,12 @@ v1alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -9448,6 +9650,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -9594,6 +9803,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -10134,6 +10344,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -10369,6 +10580,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -10405,6 +10623,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -10515,15 +10735,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -10532,6 +10756,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -10683,6 +10914,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -10828,6 +11061,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -10840,6 +11074,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -10952,10 +11187,12 @@ v1alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -11069,6 +11306,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -11215,6 +11459,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -11751,6 +11996,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -11986,6 +12232,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -12022,6 +12275,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -12132,15 +12387,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -12149,6 +12408,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -12300,6 +12566,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -12445,6 +12713,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -12457,6 +12726,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -12569,10 +12839,12 @@ v1alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -12686,6 +12958,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -12832,6 +13111,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -13033,6 +13313,7 @@ v1beta1: spec: properties: deployment: + description: Deployment specifies how the ML extension will be deployed into cluster properties: affinity: properties: @@ -13410,6 +13691,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -13447,6 +13729,7 @@ v1beta1: type: object type: array gpu: + description: GPU defined if GPU Jobs are enabled. type: boolean hostIPC: type: boolean @@ -13649,6 +13932,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -13685,6 +13975,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -13707,6 +13999,7 @@ v1beta1: type: object type: object port: + description: Port defines on which port the container will be listening for connections format: int32 type: integer ports: @@ -13792,6 +14085,7 @@ v1beta1: type: integer type: object replicas: + description: Replicas defines the number of replicas running specified components. No replicas created if no components are defined. format: int32 type: integer resources: @@ -13801,15 +14095,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -13818,6 +14116,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -13874,8 +14179,16 @@ v1beta1: type: object type: object service: + description: Service defines how components will be exposed properties: type: + description: Type determines how the Service is exposed + enum: + - ClusterIP + - NodePort + - LoadBalancer + - ExternalName + - None type: string type: object serviceAccountName: @@ -13948,6 +14261,7 @@ v1beta1: type: integer type: object tls: + description: TLS defined TLS Settings for extension properties: altNames: description: AltNames define TLS AltNames used when TLS on the ArangoDB is enabled @@ -13985,6 +14299,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -14130,6 +14446,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -14142,6 +14459,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -14254,10 +14572,12 @@ v1beta1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -14371,6 +14691,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -14517,6 +14844,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -14675,6 +15003,7 @@ v1beta1: type: string type: object init: + description: ArangoMLExtensionTemplate define Init job specification properties: affinity: properties: @@ -15052,6 +15381,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -15289,6 +15619,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -15325,6 +15662,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -15435,15 +15774,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -15452,6 +15795,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -15603,6 +15953,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -15748,6 +16100,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -15760,6 +16113,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -15872,10 +16226,12 @@ v1beta1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -15989,6 +16345,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -16135,6 +16498,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -16293,6 +16657,7 @@ v1beta1: type: string type: object integrationSidecar: + description: IntegrationSidecar define the integration sidecar spec properties: args: items: @@ -16336,6 +16701,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -16628,21 +16994,32 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object securityContext: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -16774,6 +17151,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -16784,10 +17163,13 @@ v1beta1: type: string type: object jobsTemplates: + description: JobsTemplates defines templates for jobs properties: featurization: + description: Featurization defines template for the featurization job properties: cpu: + description: CPU defines templates for CPU jobs properties: affinity: properties: @@ -17165,6 +17547,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -17402,6 +17785,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -17438,6 +17828,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -17548,15 +17940,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -17565,6 +17961,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -17716,6 +18119,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -17861,6 +18266,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -17873,6 +18279,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -17985,10 +18392,12 @@ v1beta1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -18102,6 +18511,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -18248,6 +18664,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -18406,6 +18823,7 @@ v1beta1: type: string type: object gpu: + description: GPU defines templates for GPU jobs properties: affinity: properties: @@ -18783,6 +19201,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -19020,6 +19439,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -19056,6 +19482,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -19166,15 +19594,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -19183,6 +19615,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -19334,6 +19773,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -19479,6 +19920,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -19491,6 +19933,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -19603,10 +20046,12 @@ v1beta1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -19720,6 +20165,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -19866,6 +20318,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -20025,8 +20478,10 @@ v1beta1: type: object type: object prediction: + description: Prediction defines template for the prediction job properties: cpu: + description: CPU defines templates for CPU jobs properties: affinity: properties: @@ -20404,6 +20859,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -20641,6 +21097,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -20677,6 +21140,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -20787,15 +21252,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -20804,6 +21273,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -20955,6 +21431,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -21100,6 +21578,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -21112,6 +21591,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -21224,10 +21704,12 @@ v1beta1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -21341,6 +21823,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -21487,6 +21976,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -21645,6 +22135,7 @@ v1beta1: type: string type: object gpu: + description: GPU defines templates for GPU jobs properties: affinity: properties: @@ -22022,6 +22513,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -22259,6 +22751,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -22295,6 +22794,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -22405,15 +22906,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -22422,6 +22927,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -22573,6 +23085,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -22718,6 +23232,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -22730,6 +23245,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -22842,10 +23358,12 @@ v1beta1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -22959,6 +23477,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -23105,6 +23630,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -23264,8 +23790,10 @@ v1beta1: type: object type: object training: + description: Training defines template for the training job properties: cpu: + description: CPU defines templates for CPU jobs properties: affinity: properties: @@ -23643,6 +24171,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -23880,6 +24409,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -23916,6 +24452,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -24026,15 +24564,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -24043,6 +24585,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -24194,6 +24743,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -24339,6 +24890,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -24351,6 +24903,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -24463,10 +25016,12 @@ v1beta1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -24580,6 +25135,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -24726,6 +25288,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -24884,6 +25447,7 @@ v1beta1: type: string type: object gpu: + description: GPU defines templates for GPU jobs properties: affinity: properties: @@ -25261,6 +25825,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -25498,6 +26063,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -25534,6 +26106,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -25644,15 +26218,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object schedulerName: @@ -25661,6 +26239,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -25812,6 +26397,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -25957,6 +26544,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -25969,6 +26557,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -26081,10 +26670,12 @@ v1beta1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -26198,6 +26789,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -26344,6 +26942,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -26504,16 +27103,21 @@ v1beta1: type: object type: object metadataService: + description: MetadataService keeps the MetadataService configuration properties: local: + description: Local define to use Local ArangoDeployment as the Metadata Service properties: arangoMLFeatureStore: + description: ArangoMLFeatureStoreDatabase define Database name to be used as MetadataService Backend in ArangoMLFeatureStoreDatabase type: string arangoPipeDatabase: + description: ArangoPipeDatabase define Database name to be used as MetadataService Backend in ArangoPipe type: string type: object type: object storage: + description: Storage specifies the ArangoMLStorage used within Extension, if extension storage is used properties: checksum: description: UID keeps the information about object Checksum @@ -26528,6 +27132,12 @@ v1beta1: description: UID keeps the information about object UID type: string type: object + storageType: + description: ArangoMLExtensionSpecStorageType defines storage used for extension + enum: + - extension + - platform + type: string type: object status: description: Object with preserved fields for backward compatibility diff --git a/pkg/crd/crds/ml-job-batch.schema.generated.yaml b/pkg/crd/crds/ml-job-batch.schema.generated.yaml index c3710170e..599eb698e 100644 --- a/pkg/crd/crds/ml-job-batch.schema.generated.yaml +++ b/pkg/crd/crds/ml-job-batch.schema.generated.yaml @@ -17,6 +17,8 @@ v1alpha1: completions: format: int32 type: integer + managedBy: + type: string manualSelector: type: boolean maxFailedIndexes: @@ -78,6 +80,19 @@ v1alpha1: type: string type: object type: object + successPolicy: + properties: + rules: + items: + properties: + succeededCount: + format: int32 + type: integer + succeededIndexes: + type: string + type: object + type: array + type: object suspend: type: boolean template: @@ -538,6 +553,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -836,15 +852,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -853,6 +873,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1003,6 +1030,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1079,6 +1108,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1377,15 +1407,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1394,6 +1428,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1546,6 +1587,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1626,6 +1669,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1924,15 +1968,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1941,6 +1989,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2091,6 +2146,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2115,6 +2172,7 @@ v1alpha1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2135,13 +2193,10 @@ v1alpha1: properties: name: type: string - source: - properties: - resourceClaimName: - type: string - resourceClaimTemplateName: - type: string - type: object + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string type: object type: array restartPolicy: @@ -2159,6 +2214,13 @@ v1alpha1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2195,6 +2257,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2427,6 +2491,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2439,6 +2504,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2551,10 +2617,12 @@ v1alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -2668,6 +2736,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -2814,6 +2889,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object diff --git a/pkg/crd/crds/ml-job-cron.schema.generated.yaml b/pkg/crd/crds/ml-job-cron.schema.generated.yaml index daf4b5fe8..3ace9c2c3 100644 --- a/pkg/crd/crds/ml-job-cron.schema.generated.yaml +++ b/pkg/crd/crds/ml-job-cron.schema.generated.yaml @@ -102,6 +102,8 @@ v1alpha1: completions: format: int32 type: integer + managedBy: + type: string manualSelector: type: boolean maxFailedIndexes: @@ -163,6 +165,19 @@ v1alpha1: type: string type: object type: object + successPolicy: + properties: + rules: + items: + properties: + succeededCount: + format: int32 + type: integer + succeededIndexes: + type: string + type: object + type: array + type: object suspend: type: boolean template: @@ -623,6 +638,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -921,15 +937,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -938,6 +958,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1088,6 +1115,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1164,6 +1193,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1462,15 +1492,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1479,6 +1513,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1631,6 +1672,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1711,6 +1754,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2009,15 +2053,19 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -2026,6 +2074,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2176,6 +2231,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2200,6 +2257,7 @@ v1alpha1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2220,13 +2278,10 @@ v1alpha1: properties: name: type: string - source: - properties: - resourceClaimName: - type: string - resourceClaimTemplateName: - type: string - type: object + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string type: object type: array restartPolicy: @@ -2244,6 +2299,13 @@ v1alpha1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2280,6 +2342,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2512,6 +2576,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2524,6 +2589,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2636,10 +2702,12 @@ v1alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -2753,6 +2821,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -2899,6 +2974,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object diff --git a/pkg/crd/crds/ml-storage.schema.generated.yaml b/pkg/crd/crds/ml-storage.schema.generated.yaml index 1a235f2a7..95bbf1e1d 100644 --- a/pkg/crd/crds/ml-storage.schema.generated.yaml +++ b/pkg/crd/crds/ml-storage.schema.generated.yaml @@ -117,6 +117,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -408,21 +409,32 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object securityContext: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -554,6 +566,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -576,12 +590,20 @@ v1beta1: spec: properties: backend: + description: Backend defines how storage is implemented properties: s3: + description: S3 backend implements storage as a proxy to the provided S3 API endpoint properties: allowInsecure: + description: AllowInsecure if set to true, the Endpoint certificates won't be checked type: boolean caSecret: + description: |- + CASecret if not empty, the given Kubernetes Secret will be used to check the authenticity of Endpoint + The specified Secret, must contain the following data fields: + - `ca.crt` PEM encoded public key of the CA certificate + - `ca.key` PEM encoded private key of the CA certificate properties: checksum: description: UID keeps the information about object Checksum @@ -597,6 +619,9 @@ v1beta1: type: string type: object credentialsSecret: + description: |- + CredentialsSecret specifies the Kubernetes Secret containing AccessKey and SecretKey for S3 API authorization + Required properties: checksum: description: UID keeps the information about object Checksum @@ -612,18 +637,28 @@ v1beta1: type: string type: object endpoint: + description: |- + Endpoint specifies the S3 API-compatible endpoint which implements storage + Required type: string region: + description: Region defines the availability zone name. type: string type: object type: object bucketName: + description: |- + BucketName specifies the name of the bucket + Required type: string bucketPath: + description: BucketPath specifies the path within the bucket type: string mode: + description: Mode defines how storage implementation should be deployed properties: sidecar: + description: Sidecar mode runs the storage implementation as a sidecar type: object type: object type: object diff --git a/pkg/crd/crds/networking-route.schema.generated.yaml b/pkg/crd/crds/networking-route.schema.generated.yaml index 9d82639de..cfa8761cb 100644 --- a/pkg/crd/crds/networking-route.schema.generated.yaml +++ b/pkg/crd/crds/networking-route.schema.generated.yaml @@ -49,8 +49,17 @@ v1alpha1: path: description: Path defines service path used for overrides type: string + protocol: + description: Protocol defines http protocol used for the route + enum: + - http1 + - http2 + type: string schema: description: Schema defines HTTP/S schema used for connection + enum: + - http + - https type: string service: description: Service defines service upstream reference @@ -72,6 +81,9 @@ v1alpha1: description: UID keeps the information about object UID type: string type: object + timeout: + description: Timeout specify the upstream request timeout + type: string tls: description: TLS defines TLS Configuration properties: @@ -80,6 +92,24 @@ v1alpha1: type: boolean type: object type: object + options: + description: Options defines connection upgrade options + properties: + upgrade: + description: Upgrade keeps the connection upgrade options + items: + properties: + enabled: + description: Enabled defines if upgrade option is enabled + type: boolean + type: + description: Type defines type of the Upgrade + enum: + - websocket + type: string + type: object + type: array + type: object route: description: Route defines the route spec properties: diff --git a/pkg/crd/crds/platform-chart.go b/pkg/crd/crds/platform-chart.go new file mode 100644 index 000000000..791eaf6ae --- /dev/null +++ b/pkg/crd/crds/platform-chart.go @@ -0,0 +1,51 @@ +// +// DISCLAIMER +// +// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package crds + +import ( + _ "embed" + + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" +) + +func PlatformChartWithOptions(opts ...func(*CRDOptions)) *apiextensions.CustomResourceDefinition { + return getCRD(PlatformChartDefinitionData(), opts...) +} + +func PlatformChartDefinitionWithOptions(opts ...func(*CRDOptions)) Definition { + return Definition{ + DefinitionData: PlatformChartDefinitionData(), + CRD: PlatformChartWithOptions(opts...), + } +} + +func PlatformChartDefinitionData() DefinitionData { + return DefinitionData{ + definition: platformChart, + schemaDefinition: platformChartSchemaRaw, + } +} + +//go:embed platform-chart.yaml +var platformChart []byte + +//go:embed platform-chart.schema.generated.yaml +var platformChartSchemaRaw []byte diff --git a/pkg/crd/crds/platform-chart.schema.generated.yaml b/pkg/crd/crds/platform-chart.schema.generated.yaml new file mode 100644 index 000000000..817296696 --- /dev/null +++ b/pkg/crd/crds/platform-chart.schema.generated.yaml @@ -0,0 +1,14 @@ +v1alpha1: + openAPIV3Schema: + properties: + spec: + properties: + definition: + format: byte + type: string + type: object + status: + description: Object with preserved fields for backward compatibility + type: object + x-kubernetes-preserve-unknown-fields: true + type: object diff --git a/pkg/crd/crds/platform-chart.yaml b/pkg/crd/crds/platform-chart.yaml new file mode 100644 index 000000000..eb217d6b7 --- /dev/null +++ b/pkg/crd/crds/platform-chart.yaml @@ -0,0 +1,25 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformcharts.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformChart + listKind: ArangoPlatformChartList + plural: arangoplatformcharts + singular: arangoplatformchart + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas diff --git a/pkg/crd/crds/platform-storage.go b/pkg/crd/crds/platform-storage.go new file mode 100644 index 000000000..2c0306deb --- /dev/null +++ b/pkg/crd/crds/platform-storage.go @@ -0,0 +1,51 @@ +// +// DISCLAIMER +// +// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package crds + +import ( + _ "embed" + + apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" +) + +func PlatformStorageWithOptions(opts ...func(*CRDOptions)) *apiextensions.CustomResourceDefinition { + return getCRD(PlatformStorageDefinitionData(), opts...) +} + +func PlatformStorageDefinitionWithOptions(opts ...func(*CRDOptions)) Definition { + return Definition{ + DefinitionData: PlatformStorageDefinitionData(), + CRD: PlatformStorageWithOptions(opts...), + } +} + +func PlatformStorageDefinitionData() DefinitionData { + return DefinitionData{ + definition: platformStorage, + schemaDefinition: platformStorageSchemaRaw, + } +} + +//go:embed platform-storage.yaml +var platformStorage []byte + +//go:embed platform-storage.schema.generated.yaml +var platformStorageSchemaRaw []byte diff --git a/pkg/crd/crds/platform-storage.schema.generated.yaml b/pkg/crd/crds/platform-storage.schema.generated.yaml new file mode 100644 index 000000000..b1b4d4ccd --- /dev/null +++ b/pkg/crd/crds/platform-storage.schema.generated.yaml @@ -0,0 +1,76 @@ +v1alpha1: + openAPIV3Schema: + properties: + spec: + properties: + backend: + description: Backend defines how storage is implemented + properties: + s3: + description: S3 backend implements storage as a proxy to the provided S3 API endpoint + properties: + allowInsecure: + description: AllowInsecure if set to true, the Endpoint certificates won't be checked + type: boolean + bucketName: + description: |- + BucketName specifies the name of the bucket + Required + type: string + bucketPath: + description: BucketPath specifies the Prefix within the bucket + type: string + caSecret: + description: |- + CASecret if not empty, the given Kubernetes Secret will be used to check the authenticity of Endpoint + The specified Secret, must contain the following data fields: + - `ca.crt` PEM encoded public key of the CA certificate + - `ca.key` PEM encoded private key of the CA certificate + properties: + checksum: + description: UID keeps the information about object Checksum + type: string + name: + description: Name of the object + type: string + namespace: + description: Namespace of the object. Should default to the namespace of the parent object + type: string + uid: + description: UID keeps the information about object UID + type: string + type: object + credentialsSecret: + description: |- + CredentialsSecret specifies the Kubernetes Secret containing AccessKey and SecretKey for S3 API authorization + Required + properties: + checksum: + description: UID keeps the information about object Checksum + type: string + name: + description: Name of the object + type: string + namespace: + description: Namespace of the object. Should default to the namespace of the parent object + type: string + uid: + description: UID keeps the information about object UID + type: string + type: object + endpoint: + description: |- + Endpoint specifies the S3 API-compatible endpoint which implements storage + Required + type: string + region: + description: Region defines the availability zone name. + type: string + type: object + type: object + type: object + status: + description: Object with preserved fields for backward compatibility + type: object + x-kubernetes-preserve-unknown-fields: true + type: object diff --git a/pkg/crd/crds/platform-storage.yaml b/pkg/crd/crds/platform-storage.yaml new file mode 100644 index 000000000..300226c85 --- /dev/null +++ b/pkg/crd/crds/platform-storage.yaml @@ -0,0 +1,22 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: arangoplatformstorages.platform.arangodb.com +spec: + group: platform.arangodb.com + names: + kind: ArangoPlatformStorage + listKind: ArangoPlatformStorageList + plural: arangoplatformstorages + singular: arangoplatformstorage + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + type: object + x-kubernetes-preserve-unknown-fields: true + served: true + storage: true + subresources: + status: {} diff --git a/pkg/crd/crds/replication-deploymentreplication.schema.generated.yaml b/pkg/crd/crds/replication-deploymentreplication.schema.generated.yaml index e8be88f98..942df16f3 100644 --- a/pkg/crd/crds/replication-deploymentreplication.schema.generated.yaml +++ b/pkg/crd/crds/replication-deploymentreplication.schema.generated.yaml @@ -113,121 +113,6 @@ v1: type: object x-kubernetes-preserve-unknown-fields: true type: object -v1alpha: - openAPIV3Schema: - properties: - spec: - properties: - cancellation: - description: Cancellation describes what to do during cancellation process. - properties: - ensureInSync: - description: |- - EnsureInSync if it is true then during cancellation process data consistency is required. - Default value is true. - type: boolean - sourceReadOnly: - description: |- - SourceReadOnly if it true then after cancellation source data center should be in read-only mode. - Default value is false. - type: boolean - type: object - destination: - properties: - auth: - description: Authentication holds settings needed to authentication at the syncmaster. - properties: - keyfileSecretName: - description: |- - KeyfileSecretName holds the name of a Secret containing a client authentication - certificate formatted at keyfile in a `tls.keyfile` field. - If `userSecretName` has not been set, - the client authentication certificate found in the secret with this name is also used to configure - the synchronization and fetch the synchronization status. - type: string - userSecretName: - description: |- - UserSecretName holds the name of a Secret containing a `username` & `password` - field used for basic authentication. - The user identified by the username must have write access in the `_system` database - of the ArangoDB cluster at the endpoint. - type: string - type: object - deploymentName: - description: |- - DeploymentName holds the name of an ArangoDeployment resource. - If set, this provides default values for masterEndpoint, auth & tls. - type: string - masterEndpoint: - description: |- - MasterEndpoint holds a list of URLs used to reach the syncmaster(s) - Use this setting if the source cluster is not running inside a Kubernetes cluster - that is reachable from the Kubernetes cluster the `ArangoDeploymentReplication` resource is deployed in. - Specifying this setting and `deploymentName` at the same time is not allowed. - items: - type: string - type: array - tls: - description: TLS holds settings needed to verify the TLS connection to the syncmaster. - properties: - caSecretName: - description: |- - CASecretName holds the name of a Secret containing a ca.crt public key for TLS validation. - This setting is required, unless `deploymentName` has been set. - type: string - type: object - type: object - source: - properties: - auth: - description: Authentication holds settings needed to authentication at the syncmaster. - properties: - keyfileSecretName: - description: |- - KeyfileSecretName holds the name of a Secret containing a client authentication - certificate formatted at keyfile in a `tls.keyfile` field. - If `userSecretName` has not been set, - the client authentication certificate found in the secret with this name is also used to configure - the synchronization and fetch the synchronization status. - type: string - userSecretName: - description: |- - UserSecretName holds the name of a Secret containing a `username` & `password` - field used for basic authentication. - The user identified by the username must have write access in the `_system` database - of the ArangoDB cluster at the endpoint. - type: string - type: object - deploymentName: - description: |- - DeploymentName holds the name of an ArangoDeployment resource. - If set, this provides default values for masterEndpoint, auth & tls. - type: string - masterEndpoint: - description: |- - MasterEndpoint holds a list of URLs used to reach the syncmaster(s) - Use this setting if the source cluster is not running inside a Kubernetes cluster - that is reachable from the Kubernetes cluster the `ArangoDeploymentReplication` resource is deployed in. - Specifying this setting and `deploymentName` at the same time is not allowed. - items: - type: string - type: array - tls: - description: TLS holds settings needed to verify the TLS connection to the syncmaster. - properties: - caSecretName: - description: |- - CASecretName holds the name of a Secret containing a ca.crt public key for TLS validation. - This setting is required, unless `deploymentName` has been set. - type: string - type: object - type: object - type: object - status: - description: Object with preserved fields for backward compatibility - type: object - x-kubernetes-preserve-unknown-fields: true - type: object v2alpha1: openAPIV3Schema: properties: diff --git a/pkg/crd/crds/replication-deploymentreplication.yaml b/pkg/crd/crds/replication-deploymentreplication.yaml index e3918b355..26633936d 100644 --- a/pkg/crd/crds/replication-deploymentreplication.yaml +++ b/pkg/crd/crds/replication-deploymentreplication.yaml @@ -20,13 +20,6 @@ spec: x-kubernetes-preserve-unknown-fields: true served: true storage: true - - name: v1alpha - schema: - openAPIV3Schema: - type: object - x-kubernetes-preserve-unknown-fields: true - served: true - storage: false - name: v2alpha1 schema: openAPIV3Schema: diff --git a/pkg/crd/crds/scheduler-batchjob.schema.generated.yaml b/pkg/crd/crds/scheduler-batchjob.schema.generated.yaml index ffa23976a..7137a2630 100644 --- a/pkg/crd/crds/scheduler-batchjob.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-batchjob.schema.generated.yaml @@ -17,6 +17,8 @@ v1beta1: completions: format: int32 type: integer + managedBy: + type: string manualSelector: type: boolean maxFailedIndexes: @@ -59,6 +61,7 @@ v1beta1: podReplacementPolicy: type: string profiles: + description: Profiles keeps list of the profiles items: type: string type: array @@ -82,6 +85,19 @@ v1beta1: type: string type: object type: object + successPolicy: + properties: + rules: + items: + properties: + succeededCount: + format: int32 + type: integer + succeededIndexes: + type: string + type: object + type: array + type: object suspend: type: boolean template: @@ -542,6 +558,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -840,15 +857,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -857,6 +878,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1007,6 +1035,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1083,6 +1113,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1381,15 +1412,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1398,6 +1433,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1550,6 +1592,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1630,6 +1674,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1928,15 +1973,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1945,6 +1994,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2095,6 +2151,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2119,6 +2177,7 @@ v1beta1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2139,13 +2198,10 @@ v1beta1: properties: name: type: string - source: - properties: - resourceClaimName: - type: string - resourceClaimTemplateName: - type: string - type: object + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string type: object type: array restartPolicy: @@ -2163,6 +2219,13 @@ v1beta1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2199,6 +2262,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2431,6 +2496,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2443,6 +2509,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2555,10 +2622,12 @@ v1beta1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -2672,6 +2741,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -2818,6 +2894,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object diff --git a/pkg/crd/crds/scheduler-cronjob.schema.generated.yaml b/pkg/crd/crds/scheduler-cronjob.schema.generated.yaml index a37961c59..0687025a3 100644 --- a/pkg/crd/crds/scheduler-cronjob.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-cronjob.schema.generated.yaml @@ -102,6 +102,8 @@ v1beta1: completions: format: int32 type: integer + managedBy: + type: string manualSelector: type: boolean maxFailedIndexes: @@ -163,6 +165,19 @@ v1beta1: type: string type: object type: object + successPolicy: + properties: + rules: + items: + properties: + succeededCount: + format: int32 + type: integer + succeededIndexes: + type: string + type: object + type: array + type: object suspend: type: boolean template: @@ -623,6 +638,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -921,15 +937,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -938,6 +958,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1088,6 +1115,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1164,6 +1193,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1462,15 +1492,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1479,6 +1513,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1631,6 +1672,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1711,6 +1754,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2009,15 +2053,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -2026,6 +2074,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2176,6 +2231,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2200,6 +2257,7 @@ v1beta1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2220,13 +2278,10 @@ v1beta1: properties: name: type: string - source: - properties: - resourceClaimName: - type: string - resourceClaimTemplateName: - type: string - type: object + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string type: object type: array restartPolicy: @@ -2244,6 +2299,13 @@ v1beta1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2280,6 +2342,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2512,6 +2576,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2524,6 +2589,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2636,10 +2702,12 @@ v1beta1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -2753,6 +2821,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -2899,6 +2974,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -3061,6 +3137,7 @@ v1beta1: type: object type: object profiles: + description: Profiles keeps list of the profiles items: type: string type: array diff --git a/pkg/crd/crds/scheduler-deployment.schema.generated.yaml b/pkg/crd/crds/scheduler-deployment.schema.generated.yaml index 7956b594d..d3392f582 100644 --- a/pkg/crd/crds/scheduler-deployment.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-deployment.schema.generated.yaml @@ -9,6 +9,7 @@ v1beta1: paused: type: boolean profiles: + description: Profiles keeps list of the profiles items: type: string type: array @@ -513,6 +514,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -811,15 +813,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -828,6 +834,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -978,6 +991,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1054,6 +1069,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1352,15 +1368,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1369,6 +1389,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1521,6 +1548,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1601,6 +1630,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1899,15 +1929,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1916,6 +1950,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2066,6 +2107,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2090,6 +2133,7 @@ v1beta1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2110,13 +2154,10 @@ v1beta1: properties: name: type: string - source: - properties: - resourceClaimName: - type: string - resourceClaimTemplateName: - type: string - type: object + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string type: object type: array restartPolicy: @@ -2134,6 +2175,13 @@ v1beta1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2170,6 +2218,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2402,6 +2452,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2414,6 +2465,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2526,10 +2578,12 @@ v1beta1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -2643,6 +2697,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -2789,6 +2850,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object diff --git a/pkg/crd/crds/scheduler-deployment.yaml b/pkg/crd/crds/scheduler-deployment.yaml index 0178e1c89..00464fb64 100644 --- a/pkg/crd/crds/scheduler-deployment.yaml +++ b/pkg/crd/crds/scheduler-deployment.yaml @@ -20,3 +20,6 @@ spec: storage: true subresources: status: {} + scale: + specReplicasPath: .spec.replicas + statusReplicasPath: .status.replicas diff --git a/pkg/crd/crds/scheduler-pod.schema.generated.yaml b/pkg/crd/crds/scheduler-pod.schema.generated.yaml index d38077167..2d0a95f38 100644 --- a/pkg/crd/crds/scheduler-pod.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-pod.schema.generated.yaml @@ -381,6 +381,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -679,15 +680,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -696,6 +701,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -846,6 +858,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -922,6 +936,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1220,15 +1235,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1237,6 +1256,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1389,6 +1415,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1469,6 +1497,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1767,15 +1796,19 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object restartPolicy: @@ -1784,6 +1817,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1934,6 +1974,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1958,6 +2000,7 @@ v1beta1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -1967,6 +2010,7 @@ v1beta1: priorityClassName: type: string profiles: + description: Profiles keeps list of the profiles items: type: string type: array @@ -1982,13 +2026,10 @@ v1beta1: properties: name: type: string - source: - properties: - resourceClaimName: - type: string - resourceClaimTemplateName: - type: string - type: object + resourceClaimName: + type: string + resourceClaimTemplateName: + type: string type: object type: array restartPolicy: @@ -2006,6 +2047,13 @@ v1beta1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2042,6 +2090,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2274,6 +2324,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2286,6 +2337,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2398,10 +2450,12 @@ v1beta1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -2515,6 +2569,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -2661,6 +2722,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object diff --git a/pkg/crd/crds/scheduler-profile.schema.generated.yaml b/pkg/crd/crds/scheduler-profile.schema.generated.yaml index 04ddea193..aaa0b7cff 100644 --- a/pkg/crd/crds/scheduler-profile.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-profile.schema.generated.yaml @@ -66,6 +66,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -113,6 +114,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -162,6 +165,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -449,21 +453,32 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object securityContext: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -595,6 +610,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -982,6 +999,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -1018,6 +1042,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -1200,6 +1226,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1212,6 +1239,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -1324,10 +1352,12 @@ v1alpha1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -1441,6 +1471,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -1587,6 +1624,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1758,8 +1796,10 @@ v1beta1: spec: properties: selectors: + description: Selectors keeps information about ProfileSelectors properties: label: + description: Label keeps information about label selector properties: matchExpressions: items: @@ -1781,10 +1821,13 @@ v1beta1: type: object type: object template: + description: Template keeps the Profile Template properties: container: + description: Container Template properties: all: + description: All applies generic values to all Containers properties: env: items: @@ -1817,6 +1860,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1864,6 +1908,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1913,6 +1959,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2202,21 +2249,32 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object securityContext: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2348,6 +2406,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2357,9 +2417,11 @@ v1beta1: workingDir: type: string type: object + description: Containers applies values per container type: object type: object pod: + description: Pod Template properties: affinity: properties: @@ -2735,6 +2797,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2771,6 +2840,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2953,6 +3024,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2965,6 +3037,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -3077,10 +3150,12 @@ v1beta1: limits: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object requests: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object type: object selector: @@ -3194,6 +3269,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -3340,6 +3422,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -3496,6 +3579,9 @@ v1beta1: type: array type: object priority: + description: |- + Priority defines Priority of the Profile. Higher value means Profile will get applied first. + If Priority across Profiles is same, Profiles are also sorted by name. format: int32 type: integer type: object diff --git a/pkg/crd/platform.go b/pkg/crd/platform.go new file mode 100644 index 000000000..fa9f10a65 --- /dev/null +++ b/pkg/crd/platform.go @@ -0,0 +1,41 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package crd + +import ( + "github.com/arangodb/kube-arangodb/pkg/crd/crds" +) + +func init() { + defs := []func(...func(options *crds.CRDOptions)) crds.Definition{ + crds.PlatformStorageDefinitionWithOptions, + crds.PlatformChartDefinitionWithOptions, + } + for _, getDef := range defs { + defFn := getDef // bring into scope + registerCRDWithPanic(func(opts *crds.CRDOptions) crds.Definition { + return defFn(opts.AsFunc()) + }, &crds.CRDOptions{ + WithSchema: true, + WithPreserve: false, + }) + } +} diff --git a/pkg/debug_package/generator.go b/pkg/debug_package/generator.go index 098d34390..ab90e33b3 100644 --- a/pkg/debug_package/generator.go +++ b/pkg/debug_package/generator.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -39,6 +39,7 @@ var rootFactories = []shared.Factory{ kubernetes.Events(), kubernetes.Pods(), kubernetes.Secrets(), + kubernetes.ConfigMaps(), kubernetes.Services(), kubernetes.Deployments(), kubernetes.AgencyDump(), @@ -47,6 +48,7 @@ var rootFactories = []shared.Factory{ kubernetes.Backup(), kubernetes.Scheduler(), kubernetes.Networking(), + kubernetes.Platform(), } func InitCommand(cmd *cobra.Command) { diff --git a/pkg/debug_package/generators/kubernetes/arango_platform.go b/pkg/debug_package/generators/kubernetes/arango_platform.go new file mode 100644 index 000000000..fd78e3fde --- /dev/null +++ b/pkg/debug_package/generators/kubernetes/arango_platform.go @@ -0,0 +1,52 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package kubernetes + +import ( + "github.com/rs/zerolog" + + "github.com/arangodb/kube-arangodb/pkg/debug_package/shared" + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/kclient" +) + +func Platform() shared.Factory { + return shared.NewFactory("platform", true, platform) +} + +func platform(logger zerolog.Logger, files chan<- shared.File) error { + k, ok := kclient.GetDefaultFactory().Client() + if !ok { + return errors.Errorf("Client is not initialised") + } + + if err := platformArangoPlatformStorages(logger, files, k); err != nil { + logger.Err(err).Msgf("Error while collecting platform arango storages") + return err + } + + if err := platformArangoPlatformCharts(logger, files, k); err != nil { + logger.Err(err).Msgf("Error while collecting platform arango charts") + return err + } + + return nil +} diff --git a/pkg/debug_package/generators/kubernetes/arango_platform_c.go b/pkg/debug_package/generators/kubernetes/arango_platform_c.go new file mode 100644 index 000000000..7611a1602 --- /dev/null +++ b/pkg/debug_package/generators/kubernetes/arango_platform_c.go @@ -0,0 +1,73 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package kubernetes + +import ( + "context" + "fmt" + + "github.com/rs/zerolog" + + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/debug_package/cli" + "github.com/arangodb/kube-arangodb/pkg/debug_package/shared" + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" + "github.com/arangodb/kube-arangodb/pkg/util/kclient" +) + +func platformArangoPlatformCharts(logger zerolog.Logger, files chan<- shared.File, client kclient.Client) error { + arangoPlatformStorages, err := listNetowkingArangoPlatformCharts(client) + if err != nil { + if kerrors.IsForbiddenOrNotFound(err) { + return nil + } + + return err + } + + if err := errors.ExecuteWithErrorArrayP2(platformArangoPlatformChart, client, files, arangoPlatformStorages...); err != nil { + logger.Err(err).Msgf("Error while collecting platform arango charts") + return err + } + + return nil +} + +func platformArangoPlatformChart(client kclient.Client, files chan<- shared.File, ext *platformApi.ArangoPlatformChart) error { + files <- shared.NewYAMLFile(fmt.Sprintf("kubernetes/arango/platform/arangoplatformcharts/%s.yaml", ext.GetName()), func() ([]interface{}, error) { + return []interface{}{ext}, nil + }) + + return nil +} + +func listNetowkingArangoPlatformCharts(client kclient.Client) ([]*platformApi.ArangoPlatformChart, error) { + return ListObjects[*platformApi.ArangoPlatformChartList, *platformApi.ArangoPlatformChart](context.Background(), client.Arango().PlatformV1alpha1().ArangoPlatformCharts(cli.GetInput().Namespace), func(result *platformApi.ArangoPlatformChartList) []*platformApi.ArangoPlatformChart { + q := make([]*platformApi.ArangoPlatformChart, len(result.Items)) + + for id, e := range result.Items { + q[id] = e.DeepCopy() + } + + return q + }) +} diff --git a/pkg/debug_package/generators/kubernetes/arango_platform_s.go b/pkg/debug_package/generators/kubernetes/arango_platform_s.go new file mode 100644 index 000000000..653bcb7d2 --- /dev/null +++ b/pkg/debug_package/generators/kubernetes/arango_platform_s.go @@ -0,0 +1,73 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package kubernetes + +import ( + "context" + "fmt" + + "github.com/rs/zerolog" + + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/debug_package/cli" + "github.com/arangodb/kube-arangodb/pkg/debug_package/shared" + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" + "github.com/arangodb/kube-arangodb/pkg/util/kclient" +) + +func platformArangoPlatformStorages(logger zerolog.Logger, files chan<- shared.File, client kclient.Client) error { + arangoPlatformStorages, err := listNetowkingArangoPlatformStorages(client) + if err != nil { + if kerrors.IsForbiddenOrNotFound(err) { + return nil + } + + return err + } + + if err := errors.ExecuteWithErrorArrayP2(platformArangoPlatformStorage, client, files, arangoPlatformStorages...); err != nil { + logger.Err(err).Msgf("Error while collecting platform arango storages") + return err + } + + return nil +} + +func platformArangoPlatformStorage(client kclient.Client, files chan<- shared.File, ext *platformApi.ArangoPlatformStorage) error { + files <- shared.NewYAMLFile(fmt.Sprintf("kubernetes/arango/platform/arangoplatformstorages/%s.yaml", ext.GetName()), func() ([]interface{}, error) { + return []interface{}{ext}, nil + }) + + return nil +} + +func listNetowkingArangoPlatformStorages(client kclient.Client) ([]*platformApi.ArangoPlatformStorage, error) { + return ListObjects[*platformApi.ArangoPlatformStorageList, *platformApi.ArangoPlatformStorage](context.Background(), client.Arango().PlatformV1alpha1().ArangoPlatformStorages(cli.GetInput().Namespace), func(result *platformApi.ArangoPlatformStorageList) []*platformApi.ArangoPlatformStorage { + q := make([]*platformApi.ArangoPlatformStorage, len(result.Items)) + + for id, e := range result.Items { + q[id] = e.DeepCopy() + } + + return q + }) +} diff --git a/pkg/debug_package/generators/kubernetes/configmaps.go b/pkg/debug_package/generators/kubernetes/configmaps.go new file mode 100644 index 000000000..d422ed597 --- /dev/null +++ b/pkg/debug_package/generators/kubernetes/configmaps.go @@ -0,0 +1,63 @@ +// +// DISCLAIMER +// +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package kubernetes + +import ( + "context" + + "github.com/rs/zerolog" + core "k8s.io/api/core/v1" + "k8s.io/client-go/kubernetes" + + "github.com/arangodb/kube-arangodb/pkg/debug_package/cli" + "github.com/arangodb/kube-arangodb/pkg/debug_package/shared" + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/kclient" +) + +func ConfigMaps() shared.Factory { + return shared.NewFactory("kubernetes-configmaps", true, configmaps) +} + +func listConfigMaps(client kubernetes.Interface) func() ([]*core.ConfigMap, error) { + return func() ([]*core.ConfigMap, error) { + return ListObjects[*core.ConfigMapList, *core.ConfigMap](context.Background(), client.CoreV1().ConfigMaps(cli.GetInput().Namespace), func(result *core.ConfigMapList) []*core.ConfigMap { + q := make([]*core.ConfigMap, len(result.Items)) + + for id, e := range result.Items { + q[id] = e.DeepCopy() + } + + return q + }) + } +} + +func configmaps(logger zerolog.Logger, files chan<- shared.File) error { + k, ok := kclient.GetDefaultFactory().Client() + if !ok { + return errors.Errorf("Client is not initialised") + } + + files <- shared.NewYAMLFile("kubernetes/configmaps.yaml", listConfigMaps(k.Kubernetes())) + + return nil +} diff --git a/pkg/debug_package/generators/kubernetes/lister.go b/pkg/debug_package/generators/kubernetes/lister.go index bbde1f949..9d0ac163d 100644 --- a/pkg/debug_package/generators/kubernetes/lister.go +++ b/pkg/debug_package/generators/kubernetes/lister.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2023-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,60 +24,19 @@ import ( "context" meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - "github.com/arangodb/kube-arangodb/pkg/util" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/list" ) -type ObjectList[T meta.Object] map[types.UID]T - -func (d ObjectList[T]) ByName(name string) (T, bool) { - for _, obj := range d { - if obj.GetName() == name { - return obj, true - } - } - - return util.Default[T](), false -} - -func (d ObjectList[T]) AsList() util.List[T] { - list := make([]T, 0, len(d)) - for _, p := range d { - list = append(list, p) - } - - return list -} - -func MapObjects[L generic.ListContinue, T meta.Object](ctx context.Context, k generic.ListInterface[L], extract func(result L) []T) (ObjectList[T], error) { - objects := ObjectList[T]{} - - if err := k8sutil.APIList[L](ctx, k, meta.ListOptions{}, func(result L, err error) error { - if err != nil { - return err - } - for _, obj := range extract(result) { - obj.SetManagedFields(nil) +func ListObjects[L generic.ListContinue, T meta.Object](ctx context.Context, k generic.ListInterface[L], extract func(result L) []T) ([]T, error) { + return list.APIList[L, T](ctx, k, meta.ListOptions{}, func(in L) []T { + z := extract(in) - objects[obj.GetUID()] = obj + for id := range z { + z[id].SetManagedFields(nil) } - return nil - }); err != nil { - return nil, err - } - - return objects, nil -} - -func ListObjects[L generic.ListContinue, T meta.Object](ctx context.Context, k generic.ListInterface[L], extract func(result L) []T) ([]T, error) { - objects, err := MapObjects[L, T](ctx, k, extract) - if err != nil { - return nil, err - } - - return objects.AsList(), nil + return z + }) } diff --git a/pkg/debug_package/generators/kubernetes/secrets.go b/pkg/debug_package/generators/kubernetes/secrets.go index 3a65ab49c..69778d4ee 100644 --- a/pkg/debug_package/generators/kubernetes/secrets.go +++ b/pkg/debug_package/generators/kubernetes/secrets.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -51,7 +51,7 @@ func listSecrets(client kubernetes.Interface) func() ([]*core.Secret, error) { z.Data[k] = []byte(util.SHA256(z.Data[k])) } } - q[id] = e.DeepCopy() + q[id] = z.DeepCopy() } return q diff --git a/pkg/deployment/cleanup.go b/pkg/deployment/cleanup.go index e621efb31..d0320588c 100644 --- a/pkg/deployment/cleanup.go +++ b/pkg/deployment/cleanup.go @@ -31,8 +31,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/globals" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector" - pvcv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1" - podv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/pod/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" ) @@ -63,7 +62,7 @@ func (d *Deployment) removePodFinalizers(ctx context.Context, cachedStatus inspe } } return nil - }, podv1.FilterPodsByLabels(k8sutil.LabelsForDeployment(d.GetName(), ""))); err != nil { + }, generic.FilterByLabels[*core.Pod](k8sutil.LabelsForDeployment(d.GetName(), ""))); err != nil { return false, err } @@ -85,7 +84,7 @@ func (d *Deployment) removePVCFinalizers(ctx context.Context, cachedStatus inspe found = true } return nil - }, pvcv1.FilterPersistentVolumeClaimsByLabels(k8sutil.LabelsForDeployment(d.GetName(), ""))); err != nil { + }, generic.FilterByLabels[*core.PersistentVolumeClaim](k8sutil.LabelsForDeployment(d.GetName(), ""))); err != nil { return false, err } diff --git a/pkg/deployment/context_impl.go b/pkg/deployment/context_impl.go index a2c1b0668..f3f151231 100644 --- a/pkg/deployment/context_impl.go +++ b/pkg/deployment/context_impl.go @@ -26,7 +26,9 @@ import ( "net" "strconv" + monitoring "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" core "k8s.io/api/core/v1" + policy "k8s.io/api/policy/v1" apiErrors "k8s.io/apimachinery/pkg/api/errors" meta "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" @@ -57,13 +59,7 @@ import ( operatorHTTP "github.com/arangodb/kube-arangodb/pkg/util/http" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector" - persistentvolumeclaimv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1" - podv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/pod/v1" - poddisruptionbudgetv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/poddisruptionbudget/v1" - secretv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" - servicev1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/service/v1" - serviceaccountv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/serviceaccount/v1" - servicemonitorv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/servicemonitor/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" "github.com/arangodb/kube-arangodb/pkg/util/kclient" ) @@ -557,37 +553,37 @@ func (d *Deployment) WithStatusUpdate(ctx context.Context, action reconciler.Dep }) } -func (d *Deployment) SecretsModInterface() secretv1.ModInterface { +func (d *Deployment) SecretsModInterface() generic.ModClient[*core.Secret] { d.acs.CurrentClusterCache().GetThrottles().Secret().Invalidate() return kclient.NewModInterface(d.deps.Client, d.namespace).Secrets() } -func (d *Deployment) PodsModInterface() podv1.ModInterface { +func (d *Deployment) PodsModInterface() generic.ModClient[*core.Pod] { d.acs.CurrentClusterCache().GetThrottles().Pod().Invalidate() return kclient.NewModInterface(d.deps.Client, d.namespace).Pods() } -func (d *Deployment) ServiceAccountsModInterface() serviceaccountv1.ModInterface { +func (d *Deployment) ServiceAccountsModInterface() generic.ModClient[*core.ServiceAccount] { d.acs.CurrentClusterCache().GetThrottles().ServiceAccount().Invalidate() return kclient.NewModInterface(d.deps.Client, d.namespace).ServiceAccounts() } -func (d *Deployment) ServicesModInterface() servicev1.ModInterface { +func (d *Deployment) ServicesModInterface() generic.ModClient[*core.Service] { d.acs.CurrentClusterCache().GetThrottles().Service().Invalidate() return kclient.NewModInterface(d.deps.Client, d.namespace).Services() } -func (d *Deployment) PersistentVolumeClaimsModInterface() persistentvolumeclaimv1.ModInterface { +func (d *Deployment) PersistentVolumeClaimsModInterface() generic.ModClient[*core.PersistentVolumeClaim] { d.acs.CurrentClusterCache().GetThrottles().PersistentVolumeClaim().Invalidate() return kclient.NewModInterface(d.deps.Client, d.namespace).PersistentVolumeClaims() } -func (d *Deployment) PodDisruptionBudgetsModInterface() poddisruptionbudgetv1.ModInterface { +func (d *Deployment) PodDisruptionBudgetsModInterface() generic.ModClient[*policy.PodDisruptionBudget] { d.acs.CurrentClusterCache().GetThrottles().PodDisruptionBudget().Invalidate() return kclient.NewModInterface(d.deps.Client, d.namespace).PodDisruptionBudgets() } -func (d *Deployment) ServiceMonitorsModInterface() servicemonitorv1.ModInterface { +func (d *Deployment) ServiceMonitorsModInterface() generic.ModClient[*monitoring.ServiceMonitor] { d.acs.CurrentClusterCache().GetThrottles().ServiceMonitor().Invalidate() return kclient.NewModInterface(d.deps.Client, d.namespace).ServiceMonitors() } diff --git a/pkg/deployment/deployment_pod_tls_sni_test.go b/pkg/deployment/deployment_pod_tls_sni_test.go index ef79e5413..2a33838d1 100644 --- a/pkg/deployment/deployment_pod_tls_sni_test.go +++ b/pkg/deployment/deployment_pod_tls_sni_test.go @@ -34,10 +34,10 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" - secretv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) -func createTLSSNISecret(t *testing.T, client secretv1.ModInterface, name, namespace string) { +func createTLSSNISecret(t *testing.T, client generic.ModClient[*core.Secret], name, namespace string) { secret := core.Secret{ ObjectMeta: meta.ObjectMeta{ Name: name, diff --git a/pkg/deployment/deployment_run_test.go b/pkg/deployment/deployment_run_test.go index 848c1f21a..e161d3ee9 100644 --- a/pkg/deployment/deployment_run_test.go +++ b/pkg/deployment/deployment_run_test.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -233,7 +233,6 @@ func runTestCase(t *testing.T, testCase testCaseStruct) { // Assert if testCase.ExpectedError != nil { - if !assert.EqualError(t, err, testCase.ExpectedError.Error()) { println(fmt.Sprintf("%+v", err)) } diff --git a/pkg/deployment/deployment_suite_test.go b/pkg/deployment/deployment_suite_test.go index 940280b27..bb506e2a3 100644 --- a/pkg/deployment/deployment_suite_test.go +++ b/pkg/deployment/deployment_suite_test.go @@ -592,7 +592,7 @@ func createTestDeployment(t *testing.T, config Config, arangoDeployment *api.Ara deps := Dependencies{ EventRecorder: eventRecorder, - Client: kclient.NewStaticClient(kubernetesClientSet, kubernetesExtClientSet, arangoClientSet, monitoringClientSet), + Client: kclient.NewStaticClient(nil, kubernetesClientSet, kubernetesExtClientSet, arangoClientSet, monitoringClientSet), } i := inspector.NewInspector(throttle.NewAlwaysThrottleComponents(), deps.Client, arangoDeployment.GetNamespace(), arangoDeployment.GetName()) diff --git a/pkg/deployment/features/failoverleadership.go b/pkg/deployment/features/active-failover.go similarity index 69% rename from pkg/deployment/features/failoverleadership.go rename to pkg/deployment/features/active-failover.go index 58690819b..e283ea6ca 100644 --- a/pkg/deployment/features/failoverleadership.go +++ b/pkg/deployment/features/active-failover.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -22,11 +22,21 @@ package features func init() { registerFeature(failoverLeadership) + registerFeature(activeFailover) +} + +var activeFailover = &feature{ + name: "active-failover", + description: "Support for ActiveFailover mode", + version: newFeatureVersion("", "3.12"), + enterpriseRequired: false, + enabledByDefault: true, } var failoverLeadership = &feature{ name: "failover-leadership", description: "Support for leadership in fail-over mode", + version: newFeatureVersion("", "3.12"), enterpriseRequired: false, enabledByDefault: false, } @@ -34,3 +44,7 @@ var failoverLeadership = &feature{ func FailoverLeadership() Feature { return failoverLeadership } + +func ActiveFailover() Feature { + return activeFailover +} diff --git a/pkg/deployment/features/features.go b/pkg/deployment/features/features.go index 1b14f4127..c597233e6 100644 --- a/pkg/deployment/features/features.go +++ b/pkg/deployment/features/features.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -32,6 +32,8 @@ import ( const ( Enabled = "true" Disabled = "false" + + NoVersionLimit driver.Version = "" ) type Features []Feature @@ -58,7 +60,7 @@ type Feature interface { Name() string Description() string Dependencies() []Feature - Version() driver.Version + Version() (driver.Version, driver.Version) EnterpriseRequired() bool OperatorEnterpriseRequired() bool EnabledByDefault() bool @@ -73,7 +75,7 @@ type Feature interface { type feature struct { name, description string - version driver.Version + version featureVersion enterpriseRequired, operatorEnterpriseRequired, enabledByDefault, enabled bool deprecated string constValue *bool @@ -81,6 +83,18 @@ type feature struct { dependencies []Feature } +func newFeatureVersion(min, max driver.Version) featureVersion { + return featureVersion{ + min: min, + max: max, + } +} + +type featureVersion struct { + min driver.Version + max driver.Version +} + func (f feature) Dependencies() []Feature { if len(f.dependencies) == 0 { return nil @@ -152,8 +166,8 @@ func (f *feature) EnabledPointer() *bool { return &f.enabled } -func (f feature) Version() driver.Version { - return f.version +func (f feature) Version() (driver.Version, driver.Version) { + return f.version.min, f.version.max } func (f feature) EnterpriseRequired() bool { diff --git a/pkg/deployment/features/local.go b/pkg/deployment/features/local.go index 730203be8..ee744cc94 100644 --- a/pkg/deployment/features/local.go +++ b/pkg/deployment/features/local.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -90,16 +90,21 @@ func Init(cmd *cobra.Command) error { for _, feature := range features { z := "" - version := feature.Version() + minVersion, maxVersion := feature.Version() - if version == "" { - version = MinSupportedArangoDBVersion + if minVersion == "" { + minVersion = MinSupportedArangoDBVersion + } + + versionDesc := fmt.Sprintf(">= %s", minVersion) + if maxVersion != NoVersionLimit { + versionDesc = fmt.Sprintf(">= %s, < %s", minVersion, maxVersion) } if feature.EnterpriseRequired() { - z = fmt.Sprintf("%s - Required ArangoDB EE %s or higher", feature.Description(), version) + z = fmt.Sprintf("%s - Required ArangoDB EE %s", feature.Description(), versionDesc) } else { - z = fmt.Sprintf("%s - Required ArangoDB %s or higher", feature.Description(), version) + z = fmt.Sprintf("%s - Required ArangoDB %s", feature.Description(), versionDesc) } featureArgName = GetFeatureArgName(feature.Name()) @@ -143,8 +148,12 @@ func cmdRun(_ *cobra.Command, _ []string) { } else { println("Enabled: false") } - if v := feature.Version(); v != "" { - println(fmt.Sprintf("ArangoDB Version Required: >= %s", v)) + if min, max := feature.Version(); min != NoVersionLimit && max != NoVersionLimit { + println(fmt.Sprintf("ArangoDB Version Required: >= %s, <= %s", min, max)) + } else if min != NoVersionLimit { + println(fmt.Sprintf("ArangoDB Version Required: >= %s", min)) + } else if max != NoVersionLimit { + println(fmt.Sprintf("ArangoDB Version Required: <= %s", max)) } if feature.EnterpriseRequired() { @@ -186,7 +195,20 @@ func Supported(f Feature, v driver.Version, enterprise bool) bool { } } - return v.CompareTo(f.Version()) >= 0 + min, max := f.Version() + if min != NoVersionLimit { + if v.CompareTo(min) < 0 { + return false + } + } + + if max != NoVersionLimit { + if v.CompareTo(max) >= 0 { + return false + } + } + + return true } // GetFeatureMap returns all features' arguments names. diff --git a/pkg/deployment/features/rebalancer.go b/pkg/deployment/features/rebalancer.go index 29e95c231..be35ac847 100644 --- a/pkg/deployment/features/rebalancer.go +++ b/pkg/deployment/features/rebalancer.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,7 +27,7 @@ func init() { var rebalancerV2 = &feature{ name: "rebalancer-v2", description: "Rebalancer V2 feature", - version: "3.10.0", + version: newFeatureVersion("3.10.0", NoVersionLimit), enterpriseRequired: false, enabledByDefault: false, } diff --git a/pkg/deployment/features/version_3_10.go b/pkg/deployment/features/version_3_10.go index 72b4e188a..6e7ecbec7 100644 --- a/pkg/deployment/features/version_3_10.go +++ b/pkg/deployment/features/version_3_10.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,7 +27,7 @@ func init() { var version310 = &feature{ name: "version.3-10", description: "Enable support for 3.10 features", - version: "3.10.0", + version: newFeatureVersion("3.10.0", NoVersionLimit), enterpriseRequired: false, enabledByDefault: true, hidden: true, diff --git a/pkg/deployment/patch/item.go b/pkg/deployment/patch/item.go index 573f1a79c..e2fe0932f 100644 --- a/pkg/deployment/patch/item.go +++ b/pkg/deployment/patch/item.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -60,6 +60,8 @@ func (p Path) MarshalJSON() ([]byte, error) { return json.Marshal(v) } +type Items []Item + type Item struct { Op Operation `json:"op"` Path Path `json:"path"` diff --git a/pkg/deployment/pod/encryption.go b/pkg/deployment/pod/encryption.go index 1a5c5ab56..14d08f3b4 100644 --- a/pkg/deployment/pod/encryption.go +++ b/pkg/deployment/pod/encryption.go @@ -36,7 +36,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/globals" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" - secretv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/interfaces" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" ) @@ -66,7 +66,7 @@ func GroupEncryptionSupported(mode api.DeploymentMode, group api.ServerGroup) bo } } -func GetEncryptionKey(ctx context.Context, secrets secretv1.ReadInterface, name string) (string, []byte, bool, error) { +func GetEncryptionKey(ctx context.Context, secrets generic.ReadClient[*core.Secret], name string) (string, []byte, bool, error) { ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) defer cancel() diff --git a/pkg/deployment/reconcile/action_pvc_resize.go b/pkg/deployment/reconcile/action_pvc_resize.go index eeaff9f3e..9667458be 100644 --- a/pkg/deployment/reconcile/action_pvc_resize.go +++ b/pkg/deployment/reconcile/action_pvc_resize.go @@ -29,6 +29,7 @@ import ( meta "k8s.io/apimachinery/pkg/apis/meta/v1" api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/globals" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" @@ -89,7 +90,7 @@ func (a *actionPVCResize) Start(ctx context.Context) (bool, error) { return true, nil } - am := cache.ArangoMember().V1().GetSimpleOptional(m.ArangoMemberName(a.actionCtx.GetName(), group)) + am := util.InitOptional(cache.ArangoMember().V1().GetSimple(m.ArangoMemberName(a.actionCtx.GetName(), group))) var res core.ResourceList if am.Spec.Overrides.HasVolumeClaimTemplate(&groupSpec) { diff --git a/pkg/deployment/reconcile/action_wait_for_member_up.go b/pkg/deployment/reconcile/action_wait_for_member_up.go index 9b4b525c7..513d8b156 100644 --- a/pkg/deployment/reconcile/action_wait_for_member_up.go +++ b/pkg/deployment/reconcile/action_wait_for_member_up.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -77,20 +77,20 @@ func (a *actionWaitForMemberUp) CheckProgress(ctx context.Context) (bool, bool, case api.ServerGroupTypeArangoD: switch a.actionCtx.GetMode() { case api.DeploymentModeSingle: - return a.checkProgressSingle(ctxChild) + return a.checkProgressSingle(ctxChild), false, nil case api.DeploymentModeActiveFailover: if a.action.Group == api.ServerGroupAgents { - return a.checkProgressAgent() + return a.checkProgressAgent(), false, nil } - return a.checkProgressSingleInActiveFailover(ctxChild) + return a.checkProgressSingleInActiveFailover(ctxChild), false, nil default: if a.action.Group == api.ServerGroupAgents { - return a.checkProgressAgent() + return a.checkProgressAgent(), false, nil } - return a.checkProgressCluster(ctx) + return a.checkProgressCluster(ctx), false, nil } case api.ServerGroupTypeArangoSync: - return a.checkProgressArangoSync(ctxChild) + return a.checkProgressArangoSync(ctxChild), false, nil default: assertion.InvalidGroupKey.Assert(true, "Unable to execute action WaitForMemberUp for an unknown group: %s", a.action.Group.AsRole()) return true, false, nil @@ -99,68 +99,68 @@ func (a *actionWaitForMemberUp) CheckProgress(ctx context.Context) (bool, bool, // checkProgressSingle checks the progress of the action in the case // of a single server. -func (a *actionWaitForMemberUp) checkProgressSingle(ctx context.Context) (bool, bool, error) { +func (a *actionWaitForMemberUp) checkProgressSingle(ctx context.Context) bool { c, err := a.actionCtx.GetMembersState().State().GetDatabaseClient() if err != nil { a.log.Err(err).Debug("Failed to create database client") - return false, false, nil + return false } if _, err := c.Version(ctx); err != nil { a.log.Err(err).Debug("Failed to get version") - return false, false, nil + return false } - return true, false, nil + return true } // checkProgressSingleInActiveFailover checks the progress of the action in the case // of a single server as part of an active failover deployment. -func (a *actionWaitForMemberUp) checkProgressSingleInActiveFailover(ctx context.Context) (bool, bool, error) { +func (a *actionWaitForMemberUp) checkProgressSingleInActiveFailover(ctx context.Context) bool { c, err := a.actionCtx.GetMembersState().GetMemberClient(a.action.MemberID) if err != nil { a.log.Err(err).Debug("Failed to create database client") - return false, false, nil + return false } if _, err := c.Version(ctx); err != nil { a.log.Err(err).Debug("Failed to get version") - return false, false, nil + return false } - return true, false, nil + return true } // checkProgressAgent checks the progress of the action in the case // of an agent. -func (a *actionWaitForMemberUp) checkProgressAgent() (bool, bool, error) { +func (a *actionWaitForMemberUp) checkProgressAgent() bool { agencyHealth, ok := a.actionCtx.GetAgencyHealth() if !ok { a.log.Debug("Agency health fetch failed") - return false, false, nil + return false } if err := agencyHealth.Healthy(); err != nil { a.log.Err(err).Debug("Not all agents are ready") - return false, false, nil + return false } a.log.Debug("Agency is happy") - return true, false, nil + return true } // checkProgressCluster checks the progress of the action in the case // of a cluster deployment (coordinator/dbserver). -func (a *actionWaitForMemberUp) checkProgressCluster(ctx context.Context) (bool, bool, error) { +func (a *actionWaitForMemberUp) checkProgressCluster(ctx context.Context) bool { h, _ := a.actionCtx.GetMembersState().Health() if h.Error != nil { a.log.Err(h.Error).Debug("Cluster health is missing") - return false, false, nil + return false } sh, found := h.Members[driver.ServerID(a.action.MemberID)] if !found { a.log.Debug("Member not yet found in cluster health") - return false, false, nil + return false } if sh.Status != driver.ServerStatusGood { a.log.Str("status", string(sh.Status)).Debug("Member set status not yet good") - return false, false, nil + return false } // Wait for the member to become ready from a kubernetes point of view @@ -169,13 +169,13 @@ func (a *actionWaitForMemberUp) checkProgressCluster(ctx context.Context) (bool, m, found := a.actionCtx.GetMemberStatusByID(a.MemberID()) if !found { a.log.Error("No such member") - return false, true, nil + return false } imageInfo, found := a.actionCtx.GetCurrentImageInfo() if !found { a.log.Info("Image not found") - return false, false, nil + return false } if resources.IsServerProgressAvailable(a.action.Group, imageInfo) { @@ -189,28 +189,28 @@ func (a *actionWaitForMemberUp) checkProgressCluster(ctx context.Context) (bool, if !m.Conditions.IsTrue(api.ConditionTypeReady) { a.log.Debug("Member not yet ready") - return false, false, nil + return false } - return true, false, nil + return true } // checkProgressArangoSync checks the progress of the action in the case // of a sync master / worker. -func (a *actionWaitForMemberUp) checkProgressArangoSync(ctx context.Context) (bool, bool, error) { +func (a *actionWaitForMemberUp) checkProgressArangoSync(ctx context.Context) bool { c, err := a.actionCtx.GetMembersState().GetMemberSyncClient(a.action.MemberID) if err != nil { a.log.Err(err).Debug("Failed to create arangosync client") - return false, false, nil + return false } // When replication is in initial-sync state, then it can take a long time to be in running state. // This is the reason why Health of ArangoSync can not be checked here. if _, err := c.Version(ctx); err != nil { a.log.Err(err).Debug("Member is not ready yet") - return false, false, nil + return false } - return true, false, nil + return true } func (a actionWaitForMemberUp) getServerStatus(ctx context.Context) (client.ServerStatus, error) { diff --git a/pkg/deployment/reconcile/condition_member_recreation.go b/pkg/deployment/reconcile/condition_member_recreation.go index e9c8313b1..d55d522be 100644 --- a/pkg/deployment/reconcile/condition_member_recreation.go +++ b/pkg/deployment/reconcile/condition_member_recreation.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -113,7 +113,7 @@ func (r *Reconciler) isStorageClassChanged(_ context.Context, apiObject k8sutil. return false, "", nil } - am := cache.ArangoMember().V1().GetSimpleOptional(member.ArangoMemberName(context.GetName(), group)) + am := util.InitOptional(cache.ArangoMember().V1().GetSimple(member.ArangoMemberName(context.GetName(), group))) groupSpec := spec.GetServerGroupSpec(group) storageClassName := am.Spec.Overrides.GetStorageClassName(&groupSpec) @@ -186,7 +186,7 @@ func (r *Reconciler) isVolumeSizeChanged(_ context.Context, _ k8sutil.APIObject, return false, "", nil } - am := cache.ArangoMember().V1().GetSimpleOptional(member.ArangoMemberName(context.GetName(), group)) + am := util.InitOptional(cache.ArangoMember().V1().GetSimple(member.ArangoMemberName(context.GetName(), group))) pvc, ok := cache.PersistentVolumeClaim().V1().GetSimple(member.PersistentVolumeClaim.GetName()) if !ok { diff --git a/pkg/deployment/reconcile/plan_builder_high.go b/pkg/deployment/reconcile/plan_builder_high.go index cd037757f..949585fda 100644 --- a/pkg/deployment/reconcile/plan_builder_high.go +++ b/pkg/deployment/reconcile/plan_builder_high.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -265,10 +265,14 @@ func (r *Reconciler) updateMemberRotationConditions(apiObject k8sutil.APIObject, return nil, nil } - if spec.MemberPropagationMode.Get() == api.DeploymentMemberPropagationModeAlways { - return restartMemberConditionAction(group, member.ID, reason), nil - } else { + switch a := spec.MemberPropagationMode.Get(); a { + case api.DeploymentMemberPropagationModeOnRestart: return api.Plan{pendingRestartMemberConditionAction(group, member.ID, reason)}, nil + case api.DeploymentMemberPropagationModeAlways: + return restartMemberConditionAction(group, member.ID, reason), nil + default: + r.log.Str("mode", a.String()).Warn("Unknown DeploymentMemberPropagationMode, fallback to Default") + return restartMemberConditionAction(group, member.ID, reason), nil } default: return nil, nil diff --git a/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go b/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go index 8843bee35..2c402900b 100644 --- a/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go +++ b/pkg/deployment/reconcile/plan_builder_rotate_upgrade.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -325,7 +325,7 @@ func (r *Reconciler) createUpgradePlanInternal(apiObject k8sutil.APIObject, spec // podNeedsUpgrading decides if an upgrade of the pod is needed (to comply with // the given spec) and if that is allowed. -func (r *Reconciler) podNeedsUpgrading(status api.MemberStatus, spec api.DeploymentSpec, images api.ImageInfoList) upgradeDecision { +func (r *Reconciler) podNeedsUpgrading(mode api.DeploymentMode, status api.MemberStatus, spec api.DeploymentSpec, images api.ImageInfoList) upgradeDecision { currentImage, found := currentImageInfo(spec, images) if !found { // Hold rotation tasks - we do not know image @@ -342,6 +342,7 @@ func (r *Reconciler) podNeedsUpgrading(status api.MemberStatus, spec api.Deploym // No change return upgradeDecision{UpgradeNeeded: false} } + // Image changed, check if change is allowed specVersion := currentImage.ArangoDBVersion memberVersion := memberImage.ArangoDBVersion @@ -364,6 +365,21 @@ func (r *Reconciler) podNeedsUpgrading(status api.MemberStatus, spec api.Deploym UpgradeAllowed: false, } } + + // Check if ActiveFailover is supported on new version + if mode == api.DeploymentModeActiveFailover && !features.ActiveFailover().ImageSupported(¤tImage) { + // Upgrade to 3.12 in Active Failover mode is not supported! + // No change + return upgradeDecision{ + FromVersion: memberVersion, + FromLicense: memberLicense, + ToVersion: specVersion, + ToLicense: specLicense, + UpgradeNeeded: true, + UpgradeAllowed: false, + } + } + if specVersion.Major() != memberVersion.Major() || specVersion.Minor() != memberVersion.Minor() { // Is allowed, with `--database.auto-upgrade` r.planLogger.Str("spec-version", string(specVersion)).Str("pod-version", string(memberVersion)). diff --git a/pkg/deployment/reconcile/plan_builder_rotate_upgrade_decision.go b/pkg/deployment/reconcile/plan_builder_rotate_upgrade_decision.go index eace2f0df..91919e29b 100644 --- a/pkg/deployment/reconcile/plan_builder_rotate_upgrade_decision.go +++ b/pkg/deployment/reconcile/plan_builder_rotate_upgrade_decision.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -67,18 +67,18 @@ func (r *Reconciler) createRotateOrUpgradeDecision(spec api.DeploymentSpec, stat upgradeOrder := util.BoolSwitch(features.UpgradeAlternativeOrder().Enabled(), alternativeUpgradeOrder, api.AllServerGroups) for _, m := range status.Members.AsListInGroups(upgradeOrder...) { - d[m.Member.ID] = r.createRotateOrUpgradeDecisionMember(spec, status, context, m) + d[m.Member.ID] = r.createRotateOrUpgradeDecisionMember(spec.Mode.Get(), spec, status, context, m) } return d } -func (r *Reconciler) createRotateOrUpgradeDecisionMember(spec api.DeploymentSpec, status api.DeploymentStatus, context PlanBuilderContext, element api.DeploymentStatusMemberElement) (d updateUpgradeDecision) { +func (r *Reconciler) createRotateOrUpgradeDecisionMember(mode api.DeploymentMode, spec api.DeploymentSpec, status api.DeploymentStatus, context PlanBuilderContext, element api.DeploymentStatusMemberElement) (d updateUpgradeDecision) { if element.Member.Phase == api.MemberPhaseCreated && element.Member.Pod.GetName() != "" { // Only upgrade when phase is created // Got pod, compare it with what it should be - decision := r.podNeedsUpgrading(element.Member, spec, status.Images) + decision := r.podNeedsUpgrading(mode, element.Member, spec, status.Images) if decision.UpgradeNeeded || decision.Hold { d.upgrade = true diff --git a/pkg/deployment/reconcile/plan_builder_rotate_upgrade_test.go b/pkg/deployment/reconcile/plan_builder_rotate_upgrade_test.go index 6c1915bb6..7d2ee7459 100644 --- a/pkg/deployment/reconcile/plan_builder_rotate_upgrade_test.go +++ b/pkg/deployment/reconcile/plan_builder_rotate_upgrade_test.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -123,7 +123,7 @@ func Test_RotateUpgrade_Condition(t *testing.T) { for n, c := range testCases { t.Run(n, func(t *testing.T) { - c.verify(t, r.podNeedsUpgrading(c.status, c.spec, c.images)) + c.verify(t, r.podNeedsUpgrading(c.spec.Mode.Get(), c.status, c.spec, c.images)) }) } } diff --git a/pkg/deployment/reconcile/plan_builder_storage.go b/pkg/deployment/reconcile/plan_builder_storage.go index e27201870..62fcba9cc 100644 --- a/pkg/deployment/reconcile/plan_builder_storage.go +++ b/pkg/deployment/reconcile/plan_builder_storage.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ import ( api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" "github.com/arangodb/kube-arangodb/pkg/deployment/actions" sharedReconcile "github.com/arangodb/kube-arangodb/pkg/deployment/reconcile/shared" + "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" ) @@ -97,7 +98,7 @@ func (r *Reconciler) createRotateServerStorageResizePlanInternal(spec api.Deploy continue } - am := cache.ArangoMember().V1().GetSimpleOptional(member.Member.ArangoMemberName(context.GetName(), member.Group)) + am := util.InitOptional(cache.ArangoMember().V1().GetSimple(member.Member.ArangoMemberName(context.GetName(), member.Group))) if groupSpec.VolumeResizeMode.Get() != mode { continue diff --git a/pkg/deployment/reconcile/plan_builder_test.go b/pkg/deployment/reconcile/plan_builder_test.go index c212e444e..9d7fbad83 100644 --- a/pkg/deployment/reconcile/plan_builder_test.go +++ b/pkg/deployment/reconcile/plan_builder_test.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -31,6 +31,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" core "k8s.io/api/core/v1" + policy "k8s.io/api/policy/v1" meta "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" @@ -59,14 +60,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/errors/panics" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector" - arangomemberv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangomember/v1" - persistentvolumeclaimv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1" - podv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/pod/v1" - poddisruptionbudgetv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/poddisruptionbudget/v1" - secretv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" - servicev1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/service/v1" - serviceaccountv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/serviceaccount/v1" - servicemonitorv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/servicemonitor/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/kclient" "github.com/arangodb/kube-arangodb/pkg/util/tests" ) @@ -184,35 +178,35 @@ func (c *testContext) GetAgencyCache() (state.State, bool) { return state.State{}, true } -func (c *testContext) SecretsModInterface() secretv1.ModInterface { +func (c *testContext) SecretsModInterface() generic.ModClient[*core.Secret] { panic("implement me") } -func (c *testContext) PodsModInterface() podv1.ModInterface { +func (c *testContext) PodsModInterface() generic.ModClient[*core.Pod] { panic("implement me") } -func (c *testContext) ServiceAccountsModInterface() serviceaccountv1.ModInterface { +func (c *testContext) ServiceAccountsModInterface() generic.ModClient[*core.ServiceAccount] { panic("implement me") } -func (c *testContext) ServicesModInterface() servicev1.ModInterface { +func (c *testContext) ServicesModInterface() generic.ReadClient[*core.Service] { panic("implement me") } -func (c *testContext) PersistentVolumeClaimsModInterface() persistentvolumeclaimv1.ModInterface { +func (c *testContext) PersistentVolumeClaimsModInterface() generic.ModClient[*core.PersistentVolumeClaim] { panic("implement me") } -func (c *testContext) PodDisruptionBudgetsModInterface() poddisruptionbudgetv1.ModInterface { +func (c *testContext) PodDisruptionBudgetsModInterface() generic.ModClient[*policy.PodDisruptionBudget] { panic("implement me") } -func (c *testContext) ServiceMonitorsModInterface() servicemonitorv1.ModInterface { +func (c *testContext) ServiceMonitorsModInterface() generic.ModClient[*core.Service] { panic("implement me") } -func (c *testContext) ArangoMembersModInterface() arangomemberv1.ModInterface { +func (c *testContext) ArangoMembersModInterface() generic.ModClient[*api.ArangoMember] { panic("implement me") } @@ -264,7 +258,7 @@ func (c *testContext) GetBackup(_ context.Context, backup string) (*backupApi.Ar panic("implement me") } -func (c *testContext) SecretsInterface() secretv1.Interface { +func (c *testContext) SecretsInterface() generic.ModClient[*core.Secret] { panic("implement me") } @@ -709,7 +703,7 @@ func (l *LastLogRecord) Run(e *zerolog.Event, level zerolog.Level, msg string) { for _, s := range panics.GetStack(0) { l.t.Logf("Stack: %s", s.String()) } - l.t.Logf(msg) + l.t.Log(msg) l.msg = msg } diff --git a/pkg/deployment/reconcile/utils_timezone.go b/pkg/deployment/reconcile/utils_timezone.go index be5ee21b2..af59bb495 100644 --- a/pkg/deployment/reconcile/utils_timezone.go +++ b/pkg/deployment/reconcile/utils_timezone.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,10 +21,12 @@ package reconcile import ( + core "k8s.io/api/core/v1" + "github.com/arangodb/kube-arangodb/pkg/deployment/pod" "github.com/arangodb/kube-arangodb/pkg/generated/timezones" "github.com/arangodb/kube-arangodb/pkg/util" - secretv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) const defaultTimezone = "UTC" @@ -36,7 +38,7 @@ func GetTimezone(tz *string) (timezones.Timezone, bool) { return timezones.GetTimezone(*tz) } -func IsTimezoneValid(cache secretv1.Inspector, name string, timezone timezones.Timezone) bool { +func IsTimezoneValid(cache generic.Inspector[*core.Secret], name string, timezone timezones.Timezone) bool { sn := pod.TimezoneSecret(name) tzd, ok := timezone.GetData() diff --git a/pkg/deployment/resources/arango_profiles.go b/pkg/deployment/resources/arango_profiles.go index 56da23346..3b0abf34f 100644 --- a/pkg/deployment/resources/arango_profiles.go +++ b/pkg/deployment/resources/arango_profiles.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -25,11 +25,19 @@ import ( "fmt" "time" + core "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/equality" + "k8s.io/apimachinery/pkg/api/resource" meta "k8s.io/apimachinery/pkg/apis/meta/v1" + api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" + schedulerContainerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1/container" schedulerContainerResourcesApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1/container/resources" + schedulerPodApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1/pod" + schedulerPodResourcesApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1/pod/resources" + shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" "github.com/arangodb/kube-arangodb/pkg/deployment/patch" "github.com/arangodb/kube-arangodb/pkg/integrations/sidecar" "github.com/arangodb/kube-arangodb/pkg/metrics" @@ -42,6 +50,11 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/patcher" ) +var ( + divisor1m = resource.MustParse("1m") + divisor1Mi = resource.MustParse("1Mi") +) + var ( inspectedArangoProfilesCounters = metrics.MustRegisterCounterVec(metricsComponent, "inspected_arango_profiles", "Number of ArangoProfiles inspections per deployment", metrics.DeploymentName) inspectArangoProfilesDurationGauges = metrics.MustRegisterGaugeVec(metricsComponent, "inspect_arango_profiles_duration", "Amount of time taken by a single inspection of all ArangoProfiles for a deployment (in sec)", metrics.DeploymentName) @@ -71,12 +84,17 @@ func (r *Resources) EnsureArangoProfiles(ctx context.Context, cachedStatus inspe reconcileRequired := k8sutil.NewReconcile(cachedStatus) - gen := func(name, version string, integrations ...sidecar.Integration) func() (string, *schedulerApi.ArangoProfile, error) { + gen := func(name, version string, generator func() (sidecar.Integration, bool)) func() (string, *schedulerApi.ArangoProfile, error) { return func() (string, *schedulerApi.ArangoProfile, error) { counterMetric.Inc() fullName := fmt.Sprintf("%s-int-%s-%s", deploymentName, name, version) - integration, err := sidecar.NewIntegrationEnablement(integrations...) + intgr, exists := generator() + if !exists { + return fullName, nil, nil + } + + integration, err := sidecar.NewIntegrationEnablement(intgr) if err != nil { return "", nil, err } @@ -102,6 +120,12 @@ func (r *Resources) EnsureArangoProfiles(ctx context.Context, cachedStatus inspe } } + always := func(in sidecar.Integration) func() (sidecar.Integration, bool) { + return func() (sidecar.Integration, bool) { + return in, true + } + } + if changed, err := r.ensureArangoProfilesFactory(ctx, cachedStatus, func() (string, *schedulerApi.ArangoProfile, error) { counterMetric.Inc() @@ -109,7 +133,12 @@ func (r *Resources) EnsureArangoProfiles(ctx context.Context, cachedStatus inspe integration, err := sidecar.NewIntegration(&schedulerContainerResourcesApi.Image{ Image: util.NewType(r.context.GetOperatorImage()), - }, spec.Integration.GetSidecar()) + }, spec.Integration.GetSidecar(), + r.arangoDeploymentProfileTemplate(cachedStatus), + r.arangoDeploymentCATemplate(), + r.templateKubernetesEnvs(), + r.templateResourceEnvs(), + ) if err != nil { return "", nil, err } @@ -130,10 +159,41 @@ func (r *Resources) EnsureArangoProfiles(ctx context.Context, cachedStatus inspe }, }, nil }, - gen(constants.ProfilesIntegrationAuthz, constants.ProfilesIntegrationV0, sidecar.IntegrationAuthorizationV0{}), - gen(constants.ProfilesIntegrationAuthn, constants.ProfilesIntegrationV1, sidecar.IntegrationAuthenticationV1{Spec: spec, DeploymentName: apiObject.GetName()}), - gen(constants.ProfilesIntegrationSched, constants.ProfilesIntegrationV1, sidecar.IntegrationSchedulerV1{}), - ); err != nil { + gen(constants.ProfilesIntegrationAuthz, constants.ProfilesIntegrationV0, always(sidecar.IntegrationAuthorizationV0{})), + gen(constants.ProfilesIntegrationAuthn, constants.ProfilesIntegrationV1, always(sidecar.IntegrationAuthenticationV1{Spec: spec, DeploymentName: apiObject.GetName()})), + gen(constants.ProfilesIntegrationSched, constants.ProfilesIntegrationV1, always(sidecar.IntegrationSchedulerV1{})), + gen(constants.ProfilesIntegrationSched, constants.ProfilesIntegrationV2, always(sidecar.IntegrationSchedulerV2{ + Spec: spec, + DeploymentName: apiObject.GetName(), + })), + gen(constants.ProfilesIntegrationShutdown, constants.ProfilesIntegrationV1, always(sidecar.IntegrationShutdownV1{})), + gen(constants.ProfilesIntegrationEnvoy, constants.ProfilesIntegrationV3, always(sidecar.IntegrationEnvoyV3{Spec: spec})), + gen(constants.ProfilesIntegrationStorage, constants.ProfilesIntegrationV1, func() (sidecar.Integration, bool) { + if v, err := cachedStatus.ArangoPlatformStorage().V1Alpha1(); err == nil { + if p, ok := v.GetSimple(deploymentName); ok { + if p.Status.Conditions.IsTrue(platformApi.ReadyCondition) { + return sidecar.IntegrationStorageV1{ + PlatformStorage: p, + }, true + } + } + } + + return nil, false + }), + gen(constants.ProfilesIntegrationStorage, constants.ProfilesIntegrationV2, func() (sidecar.Integration, bool) { + if v, err := cachedStatus.ArangoPlatformStorage().V1Alpha1(); err == nil { + if p, ok := v.GetSimple(deploymentName); ok { + if p.Status.Conditions.IsTrue(platformApi.ReadyCondition) { + return sidecar.IntegrationStorageV2{ + Storage: p, + }, true + } + } + } + + return nil, false + })); err != nil { return err } else if changed { reconcileRequired.Required() @@ -142,6 +202,206 @@ func (r *Resources) EnsureArangoProfiles(ctx context.Context, cachedStatus inspe return reconcileRequired.Reconcile(ctx) } +func (r *Resources) arangoDeploymentInternalAddress(cachedStatus inspectorInterface.Inspector) string { + spec := r.context.GetSpec() + apiObject := r.context.GetAPIObject() + deploymentName := apiObject.GetName() + + proto := util.BoolSwitch(spec.IsSecure(), "https", "http") + svc, ok := cachedStatus.Service().V1().GetSimple(deploymentName) + if !ok { + return "" + } + + if spec.CommunicationMethod.Get() == api.DeploymentCommunicationMethodIP { + if ip := svc.Spec.ClusterIP; ip != core.ClusterIPNone && ip != "" { + return fmt.Sprintf("%s://%s:%d", proto, ip, shared.ArangoPort) + } + } + + return fmt.Sprintf("%s://%s:%d", proto, k8sutil.CreateDatabaseClientServiceDNSNameWithDomain(svc, spec.ClusterDomain), shared.ArangoPort) +} + +func (r *Resources) arangoDeploymentProfileTemplate(cachedStatus inspectorInterface.Inspector) *schedulerApi.ProfileTemplate { + apiObject := r.context.GetAPIObject() + deploymentName := apiObject.GetName() + + var envs []core.EnvVar + + envs = append(envs, + core.EnvVar{ + Name: "ARANGO_DEPLOYMENT_NAME", + Value: deploymentName, + }, + core.EnvVar{ + Name: "ARANGO_DEPLOYMENT_ENDPOINT", + Value: r.arangoDeploymentInternalAddress(cachedStatus), + }, + core.EnvVar{ + Name: "ARANGODB_ENDPOINT", + Value: r.arangoDeploymentInternalAddress(cachedStatus), + }, + ) + + if !r.context.GetSpec().IsAuthenticated() { + envs = append(envs, core.EnvVar{ + Name: "AUTHENTICATION_ENABLED", + Value: r.arangoDeploymentInternalAddress(cachedStatus), + }) + } + + return &schedulerApi.ProfileTemplate{ + Container: &schedulerApi.ProfileContainerTemplate{ + All: &schedulerContainerApi.Generic{ + Environments: &schedulerContainerResourcesApi.Environments{ + Env: envs, + }, + }, + }, + } +} + +func (r *Resources) templateKubernetesEnvs() *schedulerApi.ProfileTemplate { + return &schedulerApi.ProfileTemplate{ + Container: &schedulerApi.ProfileContainerTemplate{ + All: &schedulerContainerApi.Generic{ + Environments: &schedulerContainerResourcesApi.Environments{ + Env: []core.EnvVar{ + { + Name: "KUBERNETES_NAMESPACE", + ValueFrom: &core.EnvVarSource{ + FieldRef: &core.ObjectFieldSelector{ + FieldPath: "metadata.namespace", + }, + }, + }, + { + Name: "KUBERNETES_POD_NAME", + ValueFrom: &core.EnvVarSource{ + FieldRef: &core.ObjectFieldSelector{ + FieldPath: "metadata.name", + }, + }, + }, + { + Name: "KUBERNETES_POD_IP", + ValueFrom: &core.EnvVarSource{ + FieldRef: &core.ObjectFieldSelector{ + FieldPath: "status.podIP", + }, + }, + }, + { + Name: "KUBERNETES_SERVICE_ACCOUNT", + ValueFrom: &core.EnvVarSource{ + FieldRef: &core.ObjectFieldSelector{ + FieldPath: "spec.serviceAccountName", + }, + }, + }, + }, + }, + }, + }, + } +} + +func (r *Resources) templateResourceEnvs() *schedulerApi.ProfileTemplate { + return &schedulerApi.ProfileTemplate{ + Container: &schedulerApi.ProfileContainerTemplate{ + All: &schedulerContainerApi.Generic{ + Environments: &schedulerContainerResourcesApi.Environments{ + Env: []core.EnvVar{ + + { + Name: "CONTAINER_CPU_REQUESTS", + ValueFrom: &core.EnvVarSource{ + ResourceFieldRef: &core.ResourceFieldSelector{ + Resource: "requests.cpu", + Divisor: divisor1m, + }, + }, + }, + { + Name: "CONTAINER_MEMORY_REQUESTS", + ValueFrom: &core.EnvVarSource{ + ResourceFieldRef: &core.ResourceFieldSelector{ + Resource: "requests.memory", + Divisor: divisor1Mi, + }, + }, + }, + { + Name: "CONTAINER_CPU_LIMITS", + ValueFrom: &core.EnvVarSource{ + ResourceFieldRef: &core.ResourceFieldSelector{ + Resource: "limits.cpu", + Divisor: divisor1m, + }, + }, + }, + { + Name: "CONTAINER_MEMORY_LIMITS", + ValueFrom: &core.EnvVarSource{ + ResourceFieldRef: &core.ResourceFieldSelector{ + Resource: "limits.memory", + Divisor: divisor1Mi, + }, + }, + }, + }, + }, + }, + }, + } +} + +func (r *Resources) arangoDeploymentCATemplate() *schedulerApi.ProfileTemplate { + t := r.context.GetSpec().TLS + if !t.IsSecure() { + return nil + } + + return &schedulerApi.ProfileTemplate{ + Pod: &schedulerPodApi.Pod{ + Volumes: &schedulerPodResourcesApi.Volumes{ + Volumes: []core.Volume{ + { + Name: "deployment-int-ca", + VolumeSource: core.VolumeSource{ + Secret: &core.SecretVolumeSource{ + SecretName: GetCASecretName(r.context.GetAPIObject()), + }, + }, + }, + }, + }, + }, + Container: &schedulerApi.ProfileContainerTemplate{ + All: &schedulerContainerApi.Generic{ + Environments: &schedulerContainerResourcesApi.Environments{ + Env: []core.EnvVar{ + { + Name: "ARANGO_DEPLOYMENT_CA", + Value: fmt.Sprintf("/etc/deployment-int/ca/%s", CACertName), + }, + }, + }, + VolumeMounts: &schedulerContainerResourcesApi.VolumeMounts{ + VolumeMounts: []core.VolumeMount{ + { + Name: "deployment-int-ca", + ReadOnly: true, + RecursiveReadOnly: nil, + MountPath: "/etc/deployment-int/ca", + }, + }, + }, + }, + }, + } +} + func (r *Resources) ensureArangoProfilesFactory(ctx context.Context, cachedStatus inspectorInterface.Inspector, expected ...func() (string, *schedulerApi.ArangoProfile, error)) (bool, error) { var changed bool @@ -163,7 +423,7 @@ func (r *Resources) ensureArangoProfilesFactory(ctx context.Context, cachedStatu func (r *Resources) ensureArangoProfile(ctx context.Context, cachedStatus inspectorInterface.Inspector, name string, expected *schedulerApi.ArangoProfile) (bool, error) { arangoProfiles := cachedStatus.ArangoProfileModInterface().V1Beta1() - if expected.GetName() != name { + if expected != nil && expected.GetName() != name { return false, errors.Errorf("Name mismatch") } diff --git a/pkg/deployment/resources/certificates_client_auth.go b/pkg/deployment/resources/certificates_client_auth.go index 6d803d7ff..9c7ebf1c0 100644 --- a/pkg/deployment/resources/certificates_client_auth.go +++ b/pkg/deployment/resources/certificates_client_auth.go @@ -24,19 +24,20 @@ import ( "context" "fmt" + core "k8s.io/api/core/v1" meta "k8s.io/apimachinery/pkg/apis/meta/v1" api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" - secretv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" ktls "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/tls" ) // createClientAuthCACertificate creates a client authentication CA certificate and stores it in a secret with name // specified in the given spec. -func (r *Resources) createClientAuthCACertificate(ctx context.Context, secrets secretv1.ModInterface, spec api.SyncAuthenticationSpec, deploymentName string, ownerRef *meta.OwnerReference) error { +func (r *Resources) createClientAuthCACertificate(ctx context.Context, secrets generic.ModClient[*core.Secret], spec api.SyncAuthenticationSpec, deploymentName string, ownerRef *meta.OwnerReference) error { log := r.log.Str("section", "secrets") cert, priv, err := ktls.CreateTLSCACertificate(fmt.Sprintf("%s Client Authentication Root Certificate", deploymentName)) diff --git a/pkg/deployment/resources/certificates_tls.go b/pkg/deployment/resources/certificates_tls.go index 06daaa109..e94bdac4c 100644 --- a/pkg/deployment/resources/certificates_tls.go +++ b/pkg/deployment/resources/certificates_tls.go @@ -24,6 +24,7 @@ import ( "context" "fmt" + core "k8s.io/api/core/v1" meta "k8s.io/apimachinery/pkg/apis/meta/v1" api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" @@ -33,14 +34,14 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/globals" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector" - secretv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" ktls "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/tls" ) // createTLSCACertificate creates a CA certificate and stores it in a secret with name // specified in the given spec. -func (r *Resources) createTLSCACertificate(ctx context.Context, secrets secretv1.ModInterface, spec api.TLSSpec, +func (r *Resources) createTLSCACertificate(ctx context.Context, secrets generic.ModClient[*core.Secret], spec api.TLSSpec, deploymentName string, ownerRef *meta.OwnerReference) error { log := r.log.Str("section", "tls").Str("secret", spec.GetCASecretName()) @@ -64,7 +65,7 @@ func (r *Resources) createTLSCACertificate(ctx context.Context, secrets secretv1 // createTLSServerCertificate creates a TLS certificate for a specific server and stores // it in a secret with the given name. -func createTLSServerCertificate(ctx context.Context, log logging.Logger, cachedStatus inspectorInterface.Inspector, secrets secretv1.ModInterface, names ktls.KeyfileInput, spec api.TLSSpec, +func createTLSServerCertificate(ctx context.Context, log logging.Logger, cachedStatus inspectorInterface.Inspector, secrets generic.ModClient[*core.Secret], names ktls.KeyfileInput, spec api.TLSSpec, secretName string, ownerRef *meta.OwnerReference) (bool, error) { log = log.Str("secret", secretName) // Setup defaults diff --git a/pkg/deployment/resources/config_map_gateway.go b/pkg/deployment/resources/config_map_gateway.go index 420f5f117..6c8d23d35 100644 --- a/pkg/deployment/resources/config_map_gateway.go +++ b/pkg/deployment/resources/config_map_gateway.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -34,27 +34,46 @@ import ( networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" "github.com/arangodb/kube-arangodb/pkg/deployment/resources/gateway" + "github.com/arangodb/kube-arangodb/pkg/platform" "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/constants" "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/globals" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector" - configMapsV1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/configmap/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/patcher" ) -func (r *Resources) ensureGatewayConfig(ctx context.Context, cachedStatus inspectorInterface.Inspector, configMaps configMapsV1.ModInterface) error { - deploymentName := r.context.GetAPIObject().GetName() - configMapName := GetGatewayConfigMapName(deploymentName) - - log := r.log.Str("section", "gateway-config").Str("name", configMapName) - +func (r *Resources) ensureGatewayConfig(ctx context.Context, cachedStatus inspectorInterface.Inspector, configMaps generic.ModClient[*core.ConfigMap]) error { cfg, err := r.renderGatewayConfig(cachedStatus) if err != nil { return errors.WithStack(errors.Wrapf(err, "Failed to generate gateway config")) } + _, baseGatewayCfgYamlChecksum, _, err := cfg.RenderYAML() + if err != nil { + return errors.WithStack(errors.Wrapf(err, "Failed to render gateway config")) + } + + cfg.Destinations[constants.EnvoyInventoryConfigDestination] = gateway.ConfigDestination{ + Type: util.NewType(gateway.ConfigDestinationTypeStatic), + AuthExtension: &gateway.ConfigAuthZExtension{ + AuthZExtension: map[string]string{ + pbImplEnvoyAuthV3.AuthConfigAuthRequiredKey: pbImplEnvoyAuthV3.AuthConfigKeywordTrue, + pbImplEnvoyAuthV3.AuthConfigAuthPassModeKey: string(networkingApi.ArangoRouteSpecAuthenticationPassModeRemove), + }, + }, + Static: &gateway.ConfigDestinationStatic{ + Code: util.NewType[uint32](200), + Response: &platform.State{ + Configuration: platform.StateConfiguration{ + Hash: baseGatewayCfgYamlChecksum, + }, + }, + }, + } + gatewayCfgYaml, _, _, err := cfg.RenderYAML() if err != nil { return errors.WithStack(errors.Wrapf(err, "Failed to render gateway config")) @@ -70,20 +89,40 @@ func (r *Resources) ensureGatewayConfig(ctx context.Context, cachedStatus inspec return errors.WithStack(errors.Wrapf(err, "Failed to render gateway lds config")) } - elements, err := r.renderConfigMap(map[string]string{ - GatewayConfigFileName: string(gatewayCfgYaml), - GatewayCDSConfigFileName: string(gatewayCfgCDSYaml), - GatewayLDSConfigFileName: string(gatewayCfgLDSYaml), - }) + if err := r.ensureGatewayConfigMap(ctx, cachedStatus, configMaps, GetGatewayConfigMapName(r.context.GetAPIObject().GetName()), map[string]string{ + constants.GatewayConfigFileName: string(gatewayCfgYaml), + }); err != nil { + return err + } + + if err := r.ensureGatewayConfigMap(ctx, cachedStatus, configMaps, GetGatewayConfigMapName(r.context.GetAPIObject().GetName(), "cds"), map[string]string{ + constants.GatewayConfigFileName: string(gatewayCfgCDSYaml), + }); err != nil { + return err + } + + if err := r.ensureGatewayConfigMap(ctx, cachedStatus, configMaps, GetGatewayConfigMapName(r.context.GetAPIObject().GetName(), "lds"), map[string]string{ + constants.GatewayConfigFileName: string(gatewayCfgLDSYaml), + }); err != nil { + return err + } + + return nil +} + +func (r *Resources) ensureGatewayConfigMap(ctx context.Context, cachedStatus inspectorInterface.Inspector, configMaps generic.ModClient[*core.ConfigMap], name string, data map[string]string) error { + log := r.log.Str("section", "gateway-config").Str("name", name) + + elements, err := r.renderConfigMap(data) if err != nil { return errors.WithStack(errors.Wrapf(err, "Failed to render gateway config")) } - if cm, exists := cachedStatus.ConfigMap().V1().GetSimple(configMapName); !exists { + if cm, exists := cachedStatus.ConfigMap().V1().GetSimple(name); !exists { // Create cm = &core.ConfigMap{ ObjectMeta: meta.ObjectMeta{ - Name: configMapName, + Name: name, }, Data: elements, } @@ -104,7 +143,7 @@ func (r *Resources) ensureGatewayConfig(ctx context.Context, cachedStatus inspec return errors.Reconcile() } else { // CM Exists, checks checksum - if key is not in the map we return empty string - if currentSha, expectedSha := util.Optional(cm.Data, ConfigMapChecksumKey, ""), util.Optional(elements, ConfigMapChecksumKey, ""); currentSha != expectedSha || currentSha == "" { + if currentSha, expectedSha := util.Optional(cm.Data, constants.ConfigMapChecksumKey, ""), util.Optional(elements, constants.ConfigMapChecksumKey, ""); currentSha != expectedSha || currentSha == "" { // We need to do the update if _, changed, err := patcher.Patcher[*core.ConfigMap](ctx, cachedStatus.ConfigMapsModInterface().V1(), cm, meta.PatchOptions{}, patcher.PatchConfigMapData(elements)); err != nil { @@ -133,6 +172,10 @@ func (r *Resources) renderGatewayConfig(cachedStatus inspectorInterface.Inspecto var cfg gateway.Config + cfg.Options = &gateway.ConfigOptions{ + MergeSlashes: util.NewType(true), + } + cfg.IntegrationSidecar = &gateway.ConfigDestinationTarget{ Host: "127.0.0.1", Port: int32(r.context.GetSpec().Integration.GetSidecar().GetListenPort()), @@ -146,6 +189,9 @@ func (r *Resources) renderGatewayConfig(cachedStatus inspectorInterface.Inspecto }, }, AuthExtension: &gateway.ConfigAuthZExtension{}, + Timeout: &meta.Duration{ + Duration: constants.MaxGatewayTimeout, + }, } if spec.TLS.IsSecure() { @@ -206,14 +252,33 @@ func (r *Resources) renderGatewayConfig(cachedStatus inspectorInterface.Inspecto } if tls := target.TLS; tls != nil { dest.Type = util.NewType(gateway.ConfigDestinationTypeHTTPS) + dest.TLS.Insecure = util.NewType(tls.IsInsecure()) + } + switch target.Protocol { + case networkingApi.ArangoRouteDestinationProtocolHTTP1: + dest.Protocol = util.NewType(gateway.ConfigDestinationProtocolHTTP1) + case networkingApi.ArangoRouteDestinationProtocolHTTP2: + dest.Protocol = util.NewType(gateway.ConfigDestinationProtocolHTTP2) + } + if opts := target.Options; opts != nil { + for _, upgrade := range opts.Upgrade { + dest.UpgradeConfigs = append(dest.UpgradeConfigs, gateway.ConfigDestinationUpgrade{ + Type: string(upgrade.Type), + Enabled: util.NewType(util.WithDefault(upgrade.Enabled)), + }) + } } dest.Path = util.NewType(target.Path) + dest.Timeout = target.Timeout.DeepCopy() dest.AuthExtension = &gateway.ConfigAuthZExtension{ AuthZExtension: map[string]string{ pbImplEnvoyAuthV3.AuthConfigAuthRequiredKey: util.BoolSwitch[string](target.Authentication.Type.Get() == networkingApi.ArangoRouteSpecAuthenticationTypeRequired, pbImplEnvoyAuthV3.AuthConfigKeywordTrue, pbImplEnvoyAuthV3.AuthConfigKeywordFalse), pbImplEnvoyAuthV3.AuthConfigAuthPassModeKey: string(target.Authentication.PassMode), }, } + dest.ResponseHeaders = map[string]string{ + constants.EnvoyRouteHeader: at.GetName(), + } cfg.Destinations[at.Spec.GetRoute().GetPath()] = dest } diff --git a/pkg/deployment/resources/config_map_gateway_member.go b/pkg/deployment/resources/config_map_gateway_member.go index 2ca0c509e..fddfa3196 100644 --- a/pkg/deployment/resources/config_map_gateway_member.go +++ b/pkg/deployment/resources/config_map_gateway_member.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ import ( api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" "github.com/arangodb/kube-arangodb/pkg/deployment/resources/gateway" + "github.com/arangodb/kube-arangodb/pkg/util/constants" inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector" ) @@ -34,17 +35,17 @@ func (r *Resources) ensureMemberConfigGatewayConfig(ctx context.Context, cachedS } data, _, _, err := gateway.NodeDynamicConfig("arangodb", member.Member.ID, &gateway.DynamicConfig{ - Path: GatewayVolumeMountDir, - File: GatewayCDSConfigFileName, + Path: constants.GatewayCDSVolumeMountDir, + File: constants.GatewayConfigFileName, }, &gateway.DynamicConfig{ - Path: GatewayVolumeMountDir, - File: GatewayLDSConfigFileName, + Path: constants.GatewayLDSVolumeMountDir, + File: constants.GatewayConfigFileName, }) if err != nil { return nil, err } return map[string]string{ - GatewayDynamicConfigFileName: string(data), + constants.GatewayConfigFileName: string(data), }, nil } diff --git a/pkg/deployment/resources/config_maps_member.go b/pkg/deployment/resources/config_maps_member.go index f65dc2bec..88712a6b1 100644 --- a/pkg/deployment/resources/config_maps_member.go +++ b/pkg/deployment/resources/config_maps_member.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -29,27 +29,19 @@ import ( api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/assertion" + "github.com/arangodb/kube-arangodb/pkg/util/constants" "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/globals" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector" - configMapsV1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/configmap/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/patcher" ) -const ( - ConfigMapChecksumKey = "CHECKSUM" - - MemberConfigVolumeMountDir = "/etc/member/" - MemberConfigVolumeName = "member-config" - - MemberConfigChecksumENV = "MEMBER_CONFIG_CHECKSUM" -) - type memberConfigMapRenderer func(ctx context.Context, cachedStatus inspectorInterface.Inspector, member api.DeploymentStatusMemberElement) (map[string]string, error) -func (r *Resources) ensureMemberConfig(ctx context.Context, cachedStatus inspectorInterface.Inspector, configMaps configMapsV1.ModInterface) error { +func (r *Resources) ensureMemberConfig(ctx context.Context, cachedStatus inspectorInterface.Inspector, configMaps generic.ModClient[*core.ConfigMap]) error { status := r.context.GetStatus() log := r.log.Str("section", "member-config-render") @@ -111,7 +103,7 @@ func (r *Resources) ensureMemberConfig(ctx context.Context, cachedStatus inspect return errors.Reconcile() } else { // CM Exists, checks checksum - if key is not in the map we return empty string - if currentSha, expectedSha := util.Optional(obj.Data, ConfigMapChecksumKey, ""), util.Optional(elements, ConfigMapChecksumKey, ""); currentSha != expectedSha || currentSha == "" { + if currentSha, expectedSha := util.Optional(obj.Data, constants.ConfigMapChecksumKey, ""), util.Optional(elements, constants.ConfigMapChecksumKey, ""); currentSha != expectedSha || currentSha == "" { // We need to do the update if _, changed, err := patcher.Patcher[*core.ConfigMap](ctx, cachedStatus.ConfigMapsModInterface().V1(), obj, meta.PatchOptions{}, patcher.PatchConfigMapData(elements)); err != nil { @@ -152,7 +144,7 @@ func (r *Resources) renderConfigMap(elements ...map[string]string) (map[string]s return nil, nil } - result[ConfigMapChecksumKey] = util.SHA256FromStringMap(result) + result[constants.ConfigMapChecksumKey] = util.SHA256FromStringMap(result) return result, nil } diff --git a/pkg/deployment/resources/gateway/alpn.go b/pkg/deployment/resources/gateway/alpn.go new file mode 100644 index 000000000..8786218a2 --- /dev/null +++ b/pkg/deployment/resources/gateway/alpn.go @@ -0,0 +1,44 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package gateway + +import "strings" + +type ALPNProtocol int + +const ( + ALPNProtocolHTTP1 ALPNProtocol = 1 << iota + ALPNProtocolHTTP2 ALPNProtocol = 1 << iota +) + +func (a ALPNProtocol) String() string { + elements := make([]string, 0, 2) + + if a&ALPNProtocolHTTP2 == ALPNProtocolHTTP2 { + elements = append(elements, "h2") + } + + if a&ALPNProtocolHTTP1 == ALPNProtocolHTTP1 { + elements = append(elements, "http/1.1") + } + + return strings.Join(elements, ",") +} diff --git a/pkg/deployment/resources/gateway/alpn_test.go b/pkg/deployment/resources/gateway/alpn_test.go new file mode 100644 index 000000000..4b413d183 --- /dev/null +++ b/pkg/deployment/resources/gateway/alpn_test.go @@ -0,0 +1,35 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package gateway + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func Test_ALPN(t *testing.T) { + require.Equal(t, "", ALPNProtocol(0).String()) + require.Equal(t, "http/1.1", ALPNProtocolHTTP1.String()) + require.Equal(t, "h2", ALPNProtocolHTTP2.String()) + require.Equal(t, "h2,http/1.1", (ALPNProtocolHTTP1 | ALPNProtocolHTTP2).String()) + require.Equal(t, "h2,http/1.1", (ALPNProtocolHTTP2 | ALPNProtocolHTTP1).String()) +} diff --git a/pkg/deployment/resources/gateway/gateway_authz_extension.go b/pkg/deployment/resources/gateway/gateway_authz_extension.go index b7e6edf0c..931482128 100644 --- a/pkg/deployment/resources/gateway/gateway_authz_extension.go +++ b/pkg/deployment/resources/gateway/gateway_authz_extension.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ import ( pbImplEnvoyAuthV3 "github.com/arangodb/kube-arangodb/integrations/envoy/auth/v3" "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/constants" ) type ConfigAuthZExtension struct { @@ -57,7 +58,7 @@ func (c *ConfigAuthZExtension) RenderTypedFilterConfig() (util.KV[string, *anypb } return util.KV[string, *anypb.Any]{ - K: IntegrationSidecarFilterName, + K: constants.EnvoyIntegrationSidecarFilterName, V: q, }, nil } diff --git a/pkg/deployment/resources/gateway/gateway_config.go b/pkg/deployment/resources/gateway/gateway_config.go index e7c360e61..b18bf335b 100644 --- a/pkg/deployment/resources/gateway/gateway_config.go +++ b/pkg/deployment/resources/gateway/gateway_config.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -37,13 +37,13 @@ import ( httpConnectionManagerAPI "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/network/http_connection_manager/v3" upstreamHttpApi "github.com/envoyproxy/go-control-plane/envoy/extensions/upstreams/http/v3" discoveryApi "github.com/envoyproxy/go-control-plane/envoy/service/discovery/v3" - "github.com/golang/protobuf/ptypes/any" - "github.com/golang/protobuf/ptypes/wrappers" "google.golang.org/protobuf/types/known/anypb" "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/wrapperspb" shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/constants" "github.com/arangodb/kube-arangodb/pkg/util/errors" ) @@ -57,6 +57,8 @@ type Config struct { IntegrationSidecar *ConfigDestinationTarget `json:"integrationSidecar,omitempty"` SNI ConfigSNIList `json:"sni,omitempty"` + + Options *ConfigOptions `json:"options,omitempty"` } func (c Config) Validate() error { @@ -170,7 +172,13 @@ func (c Config) RenderClusters() ([]*clusterAPI.Cluster, error) { UpstreamProtocolOptions: &upstreamHttpApi.HttpProtocolOptions_ExplicitHttpConfig_{ ExplicitHttpConfig: &upstreamHttpApi.HttpProtocolOptions_ExplicitHttpConfig{ ProtocolConfig: &upstreamHttpApi.HttpProtocolOptions_ExplicitHttpConfig_Http2ProtocolOptions{ - Http2ProtocolOptions: &coreAPI.Http2ProtocolOptions{}, + Http2ProtocolOptions: &coreAPI.Http2ProtocolOptions{ + ConnectionKeepalive: &coreAPI.KeepaliveSettings{ + Interval: durationpb.New(15 * time.Second), + Timeout: durationpb.New(30 * time.Second), + ConnectionIdleInterval: durationpb.New(60 * time.Second), + }, + }, }, }, }, @@ -192,7 +200,7 @@ func (c Config) RenderClusters() ([]*clusterAPI.Cluster, error) { }, }, }, - TypedExtensionProtocolOptions: map[string]*any.Any{ + TypedExtensionProtocolOptions: map[string]*anypb.Any{ "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": hpo, }, } @@ -207,6 +215,9 @@ func (c Config) RenderClusters() ([]*clusterAPI.Cluster, error) { return nil, err } + if c == nil { + continue + } clusters = append(clusters, c) } @@ -262,7 +273,7 @@ func (c Config) RenderIntegrationSidecarFilter() (*httpConnectionManagerAPI.Http } return &httpConnectionManagerAPI.HttpFilter{ - Name: IntegrationSidecarFilterName, + Name: constants.EnvoyIntegrationSidecarFilterName, ConfigType: &httpConnectionManagerAPI.HttpFilter_TypedConfig{ TypedConfig: e, }, @@ -292,8 +303,10 @@ func (c Config) RenderFilters() ([]*listenerAPI.Filter, error) { } filterConfigType, err := anypb.New(&httpConnectionManagerAPI.HttpConnectionManager{ - StatPrefix: "ingress_http", - CodecType: httpConnectionManagerAPI.HttpConnectionManager_AUTO, + StatPrefix: "ingress_http", + CodecType: httpConnectionManagerAPI.HttpConnectionManager_AUTO, + ServerHeaderTransformation: httpConnectionManagerAPI.HttpConnectionManager_PASS_THROUGH, + MergeSlashes: c.Options.GetMergeSlashes(), RouteSpecifier: &httpConnectionManagerAPI.HttpConnectionManager_RouteConfig{ RouteConfig: &routeAPI.RouteConfiguration{ Name: "default", @@ -304,7 +317,7 @@ func (c Config) RenderFilters() ([]*listenerAPI.Filter, error) { Routes: routes, }, }, - ValidateClusters: &wrappers.BoolValue{ + ValidateClusters: &wrapperspb.BoolValue{ Value: false, }, }, diff --git a/pkg/deployment/resources/gateway/gateway_config_destination.go b/pkg/deployment/resources/gateway/gateway_config_destination.go index 3139b3f31..feed655e6 100644 --- a/pkg/deployment/resources/gateway/gateway_config_destination.go +++ b/pkg/deployment/resources/gateway/gateway_config_destination.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,14 +21,19 @@ package gateway import ( + "encoding/json" "time" clusterAPI "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3" + coreAPI "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" endpointAPI "github.com/envoyproxy/go-control-plane/envoy/config/endpoint/v3" routeAPI "github.com/envoyproxy/go-control-plane/envoy/config/route/v3" + "google.golang.org/protobuf/types/known/anypb" "google.golang.org/protobuf/types/known/durationpb" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" + "github.com/arangodb/kube-arangodb/pkg/util/constants" "github.com/arangodb/kube-arangodb/pkg/util/errors" ) @@ -60,21 +65,63 @@ type ConfigDestination struct { Type *ConfigDestinationType `json:"type,omitempty"` + Protocol *ConfigDestinationProtocol `json:"protocol,omitempty"` + Path *string `json:"path,omitempty"` AuthExtension *ConfigAuthZExtension `json:"authExtension,omitempty"` + + UpgradeConfigs ConfigDestinationsUpgrade `json:"upgradeConfigs,omitempty"` + + TLS ConfigDestinationTLS `json:"tls,omitempty"` + + Timeout *meta.Duration `json:"timeout,omitempty"` + + ResponseHeaders map[string]string `json:"responseHeaders,omitempty"` + + Static *ConfigDestinationStatic `json:"static,omitempty"` } func (c *ConfigDestination) Validate() error { if c == nil { c = &ConfigDestination{} } - return shared.WithErrors( - shared.PrefixResourceError("targets", c.Targets.Validate()), - shared.PrefixResourceError("type", c.Type.Validate()), - shared.PrefixResourceError("path", shared.ValidateAPIPath(c.GetPath())), - shared.PrefixResourceError("authExtension", c.AuthExtension.Validate()), - ) + + switch c.Type.Get() { + case ConfigDestinationTypeStatic: + return shared.WithErrors( + shared.PrefixResourceError("type", c.Type.Validate()), + shared.PrefixResourceError("path", shared.ValidateAPIPath(c.GetPath())), + shared.PrefixResourceError("authExtension", c.AuthExtension.Validate()), + shared.PrefixResourceError("static", shared.ValidateRequiredInterface(c.Static)), + ) + default: + return shared.WithErrors( + shared.PrefixResourceError("targets", c.Targets.Validate()), + shared.PrefixResourceError("type", c.Type.Validate()), + shared.PrefixResourceError("protocol", c.Protocol.Validate()), + shared.PrefixResourceError("tls", c.TLS.Validate()), + shared.PrefixResourceError("path", shared.ValidateAPIPath(c.GetPath())), + shared.PrefixResourceError("authExtension", c.AuthExtension.Validate()), + shared.PrefixResourceError("upgradeConfigs", c.UpgradeConfigs.Validate()), + shared.PrefixResourceErrorFunc("timeout", func() error { + if t := c.GetTimeout(); t < constants.MinGatewayTimeout { + return errors.Errorf("Timeout lower than %s not allowed", constants.MinGatewayTimeout.String()) + } else if t > constants.MaxGatewayTimeout { + return errors.Errorf("Timeout greater than %s not allowed", constants.MaxGatewayTimeout.String()) + } + return nil + }), + ) + } +} + +func (c *ConfigDestination) GetTimeout() time.Duration { + if c == nil || c.Timeout == nil { + return constants.DefaultEnvoyUpstreamTimeout + } + + return c.Timeout.Duration } func (c *ConfigDestination) GetPath() string { @@ -86,9 +133,25 @@ func (c *ConfigDestination) GetPath() string { } func (c *ConfigDestination) RenderRoute(name, prefix string) (*routeAPI.Route, error) { + if c == nil { + return nil, errors.Errorf("Route cannot be nil") + } + var headers []*coreAPI.HeaderValueOption + + for k, v := range c.ResponseHeaders { + headers = append(headers, &coreAPI.HeaderValueOption{ + Header: &coreAPI.HeaderValue{ + Key: k, + Value: v, + }, + AppendAction: coreAPI.HeaderValueOption_OVERWRITE_IF_EXISTS_OR_ADD, + KeepEmptyValue: false, + }) + } + var tcg []TypedFilterConfigGen - if c != nil && c.AuthExtension != nil { + if c.AuthExtension != nil { tcg = append(tcg, c.AuthExtension) } tc, err := NewTypedFilterConfig(tcg...) @@ -96,25 +159,82 @@ func (c *ConfigDestination) RenderRoute(name, prefix string) (*routeAPI.Route, e return nil, err } - return &routeAPI.Route{ + r := &routeAPI.Route{ Match: &routeAPI.RouteMatch{ PathSpecifier: &routeAPI.RouteMatch_Prefix{ Prefix: prefix, }, }, - Action: &routeAPI.Route_Route{ - Route: &routeAPI.RouteAction{ - ClusterSpecifier: &routeAPI.RouteAction_Cluster{ - Cluster: name, + ResponseHeadersToAdd: headers, + + TypedPerFilterConfig: tc, + } + + if err := c.appendRouteAction(r, name); err != nil { + return nil, err + } + + return r, nil +} + +func (c *ConfigDestination) appendRouteAction(route *routeAPI.Route, name string) error { + if c.Type.Get() == ConfigDestinationTypeStatic { + obj := c.Static.GetResponse() + + if obj == nil { + obj = struct{}{} + } + + data, err := json.Marshal(obj) + if err != nil { + return err + } + + // Return static response + route.Action = &routeAPI.Route_DirectResponse{ + DirectResponse: &routeAPI.DirectResponseAction{ + Status: c.Static.GetCode(), + Body: &coreAPI.DataSource{ + Specifier: &coreAPI.DataSource_InlineBytes{ + InlineBytes: data, + }, }, - PrefixRewrite: c.GetPath(), }, + } + return nil + } + + route.Action = &routeAPI.Route_Route{ + Route: &routeAPI.RouteAction{ + ClusterSpecifier: &routeAPI.RouteAction_Cluster{ + Cluster: name, + }, + UpgradeConfigs: c.getUpgradeConfigs().render(), + PrefixRewrite: c.GetPath(), + Timeout: durationpb.New(c.GetTimeout()), }, - TypedPerFilterConfig: tc, - }, nil + } + return nil +} + +func (c *ConfigDestination) getUpgradeConfigs() ConfigDestinationsUpgrade { + if c == nil { + return nil + } + + return c.UpgradeConfigs } func (c *ConfigDestination) RenderCluster(name string) (*clusterAPI.Cluster, error) { + if c.Type.Get() == ConfigDestinationTypeStatic { + return nil, nil + } + + hpo, err := anypb.New(c.Protocol.Options()) + if err != nil { + return nil, err + } + cluster := &clusterAPI.Cluster{ Name: name, ConnectTimeout: durationpb.New(time.Second), @@ -127,9 +247,12 @@ func (c *ConfigDestination) RenderCluster(name string) (*clusterAPI.Cluster, err }, }, }, + TypedExtensionProtocolOptions: map[string]*anypb.Any{ + "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": hpo, + }, } - if t, err := c.Type.RenderUpstreamTransportSocket(); err != nil { + if t, err := c.Type.RenderUpstreamTransportSocket(c.Protocol, c.TLS); err != nil { return nil, err } else { cluster.TransportSocket = t diff --git a/pkg/deployment/resources/gateway/gateway_config_destination_protocol.go b/pkg/deployment/resources/gateway/gateway_config_destination_protocol.go new file mode 100644 index 000000000..67d3d68b6 --- /dev/null +++ b/pkg/deployment/resources/gateway/gateway_config_destination_protocol.go @@ -0,0 +1,112 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package gateway + +import ( + "time" + + coreAPI "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" + upstreamHttpApi "github.com/envoyproxy/go-control-plane/envoy/extensions/upstreams/http/v3" + "google.golang.org/protobuf/types/known/durationpb" + + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +type ConfigDestinationProtocol int + +const ( + ConfigDestinationProtocolHTTP1 ConfigDestinationProtocol = iota + ConfigDestinationProtocolHTTP2 +) + +func (c *ConfigDestinationProtocol) Get() ConfigDestinationProtocol { + if c == nil { + return ConfigDestinationProtocolHTTP1 + } + + switch v := *c; v { + case ConfigDestinationProtocolHTTP1, ConfigDestinationProtocolHTTP2: + return v + default: + return ConfigDestinationProtocolHTTP1 + } +} + +func (c *ConfigDestinationProtocol) ALPN() ALPNProtocol { + switch c.Get() { + case ConfigDestinationProtocolHTTP1: + return ALPNProtocolHTTP1 + case ConfigDestinationProtocolHTTP2: + return ALPNProtocolHTTP2 + default: + return ALPNProtocolHTTP1 + } +} + +func (c *ConfigDestinationProtocol) Options() *upstreamHttpApi.HttpProtocolOptions { + switch c.Get() { + case ConfigDestinationProtocolHTTP1: + return &upstreamHttpApi.HttpProtocolOptions{ + UpstreamProtocolOptions: &upstreamHttpApi.HttpProtocolOptions_ExplicitHttpConfig_{ + ExplicitHttpConfig: &upstreamHttpApi.HttpProtocolOptions_ExplicitHttpConfig{ + ProtocolConfig: &upstreamHttpApi.HttpProtocolOptions_ExplicitHttpConfig_HttpProtocolOptions{ + HttpProtocolOptions: &coreAPI.Http1ProtocolOptions{}, + }, + }, + }, + } + case ConfigDestinationProtocolHTTP2: + return &upstreamHttpApi.HttpProtocolOptions{ + UpstreamProtocolOptions: &upstreamHttpApi.HttpProtocolOptions_ExplicitHttpConfig_{ + ExplicitHttpConfig: &upstreamHttpApi.HttpProtocolOptions_ExplicitHttpConfig{ + ProtocolConfig: &upstreamHttpApi.HttpProtocolOptions_ExplicitHttpConfig_Http2ProtocolOptions{ + Http2ProtocolOptions: &coreAPI.Http2ProtocolOptions{ + ConnectionKeepalive: &coreAPI.KeepaliveSettings{ + Interval: durationpb.New(15 * time.Second), + Timeout: durationpb.New(30 * time.Second), + ConnectionIdleInterval: durationpb.New(60 * time.Second), + }, + }, + }, + }, + }, + } + default: + return &upstreamHttpApi.HttpProtocolOptions{ + UpstreamProtocolOptions: &upstreamHttpApi.HttpProtocolOptions_ExplicitHttpConfig_{ + ExplicitHttpConfig: &upstreamHttpApi.HttpProtocolOptions_ExplicitHttpConfig{ + ProtocolConfig: &upstreamHttpApi.HttpProtocolOptions_ExplicitHttpConfig_HttpProtocolOptions{ + HttpProtocolOptions: &coreAPI.Http1ProtocolOptions{}, + }, + }, + }, + } + } +} + +func (c *ConfigDestinationProtocol) Validate() error { + switch c.Get() { + case ConfigDestinationProtocolHTTP1, ConfigDestinationProtocolHTTP2: + return nil + default: + return errors.Errorf("Invalid destination protocol") + } +} diff --git a/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1/filters.go b/pkg/deployment/resources/gateway/gateway_config_destination_static.go similarity index 54% rename from pkg/util/k8sutil/inspector/persistentvolumeclaim/v1/filters.go rename to pkg/deployment/resources/gateway/gateway_config_destination_static.go index 2741880db..7979127ec 100644 --- a/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1/filters.go +++ b/pkg/deployment/resources/gateway/gateway_config_destination_static.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,25 +18,34 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package gateway import ( - core "k8s.io/api/core/v1" + "net/http" ) -func FilterPersistentVolumeClaimsByLabels(labels map[string]string) Filter { - return func(pvc *core.PersistentVolumeClaim) bool { - for key, value := range labels { - v, ok := pvc.Labels[key] - if !ok { - return false - } +type ConfigDestinationStatic struct { + Code *uint32 `json:"insecure,omitempty"` - if v != value { - return false - } - } + Response any `json:"response,omitempty"` +} + +func (c *ConfigDestinationStatic) Validate() error { + return nil +} + +func (c *ConfigDestinationStatic) GetResponse() any { + if c == nil || c.Response == nil { + return []byte("{}") + } + + return c.Response +} - return true +func (c *ConfigDestinationStatic) GetCode() uint32 { + if c == nil || c.Code == nil { + return http.StatusOK } + + return *c.Code } diff --git a/pkg/deployment/resources/gateway/gateway_config_destination_tls.go b/pkg/deployment/resources/gateway/gateway_config_destination_tls.go new file mode 100644 index 000000000..a11c76460 --- /dev/null +++ b/pkg/deployment/resources/gateway/gateway_config_destination_tls.go @@ -0,0 +1,37 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package gateway + +type ConfigDestinationTLS struct { + Insecure *bool `json:"insecure,omitempty"` +} + +func (c *ConfigDestinationTLS) Validate() error { + return nil +} + +func (c *ConfigDestinationTLS) IsInsecure() bool { + if c == nil || c.Insecure == nil { + return false + } + + return *c.Insecure +} diff --git a/pkg/deployment/resources/gateway/gateway_config_destination_type.go b/pkg/deployment/resources/gateway/gateway_config_destination_type.go index 590a42a08..ef4638a81 100644 --- a/pkg/deployment/resources/gateway/gateway_config_destination_type.go +++ b/pkg/deployment/resources/gateway/gateway_config_destination_type.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ import ( tlsApi "github.com/envoyproxy/go-control-plane/envoy/extensions/transport_sockets/tls/v3" "google.golang.org/protobuf/types/known/anypb" + "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/errors" ) @@ -33,6 +34,7 @@ type ConfigDestinationType int const ( ConfigDestinationTypeHTTP ConfigDestinationType = iota ConfigDestinationTypeHTTPS + ConfigDestinationTypeStatic ) func (c *ConfigDestinationType) Get() ConfigDestinationType { @@ -41,18 +43,23 @@ func (c *ConfigDestinationType) Get() ConfigDestinationType { } switch v := *c; v { - case ConfigDestinationTypeHTTP, ConfigDestinationTypeHTTPS: + case ConfigDestinationTypeHTTP, ConfigDestinationTypeHTTPS, ConfigDestinationTypeStatic: return v default: return ConfigDestinationTypeHTTP } } -func (c *ConfigDestinationType) RenderUpstreamTransportSocket() (*coreAPI.TransportSocket, error) { +func (c *ConfigDestinationType) RenderUpstreamTransportSocket(protocol *ConfigDestinationProtocol, config ConfigDestinationTLS) (*coreAPI.TransportSocket, error) { if c.Get() == ConfigDestinationTypeHTTPS { tlsConfig, err := anypb.New(&tlsApi.UpstreamTlsContext{ CommonTlsContext: &tlsApi.CommonTlsContext{ - ValidationContextType: &tlsApi.CommonTlsContext_ValidationContext{}, + AlpnProtocols: []string{protocol.ALPN().String()}, + ValidationContextType: &tlsApi.CommonTlsContext_ValidationContext{ + ValidationContext: &tlsApi.CertificateValidationContext{ + TrustChainVerification: util.BoolSwitch(!config.IsInsecure(), tlsApi.CertificateValidationContext_VERIFY_TRUST_CHAIN, tlsApi.CertificateValidationContext_ACCEPT_UNTRUSTED), + }, + }, }, }) if err != nil { @@ -72,7 +79,7 @@ func (c *ConfigDestinationType) RenderUpstreamTransportSocket() (*coreAPI.Transp func (c *ConfigDestinationType) Validate() error { switch c.Get() { - case ConfigDestinationTypeHTTP, ConfigDestinationTypeHTTPS: + case ConfigDestinationTypeHTTP, ConfigDestinationTypeHTTPS, ConfigDestinationTypeStatic: return nil default: return errors.Errorf("Invalid destination type") diff --git a/pkg/deployment/resources/gateway/gateway_config_destination_upgrade.go b/pkg/deployment/resources/gateway/gateway_config_destination_upgrade.go new file mode 100644 index 000000000..f4b90823b --- /dev/null +++ b/pkg/deployment/resources/gateway/gateway_config_destination_upgrade.go @@ -0,0 +1,72 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package gateway + +import ( + routeAPI "github.com/envoyproxy/go-control-plane/envoy/config/route/v3" + "google.golang.org/protobuf/types/known/wrapperspb" + + shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +type ConfigDestinationsUpgrade []ConfigDestinationUpgrade + +func (c ConfigDestinationsUpgrade) render() []*routeAPI.RouteAction_UpgradeConfig { + if len(c) == 0 { + return nil + } + + var r = make([]*routeAPI.RouteAction_UpgradeConfig, len(c)) + + for id := range c { + r[id] = c[id].render() + } + + return r +} + +func (c ConfigDestinationsUpgrade) Validate() error { + return shared.ValidateInterfaceList(c) +} + +type ConfigDestinationUpgrade struct { + Type string `json:"type"` + + Enabled *bool `json:"enabled,omitempty"` +} + +func (c ConfigDestinationUpgrade) render() *routeAPI.RouteAction_UpgradeConfig { + return &routeAPI.RouteAction_UpgradeConfig{ + UpgradeType: c.Type, + Enabled: wrapperspb.Bool(util.OptionalType(c.Enabled, true)), + } +} + +func (c ConfigDestinationUpgrade) Validate() error { + switch c.Type { + case "websocket": + return nil + default: + return shared.PrefixResourceError("type", errors.Errorf("Unknown type: %s", c.Type)) + } +} diff --git a/pkg/deployment/resources/gateway/gateway_config_options.go b/pkg/deployment/resources/gateway/gateway_config_options.go new file mode 100644 index 000000000..2bade44d0 --- /dev/null +++ b/pkg/deployment/resources/gateway/gateway_config_options.go @@ -0,0 +1,37 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package gateway + +type ConfigOptions struct { + MergeSlashes *bool `json:"mergeSlashes,omitempty"` +} + +func (c *ConfigOptions) Validate() error { + return nil +} + +func (c *ConfigOptions) GetMergeSlashes() bool { + if c == nil || c.MergeSlashes == nil { + return true + } + + return *c.MergeSlashes +} diff --git a/pkg/deployment/resources/gateway/gateway_config_sni.go b/pkg/deployment/resources/gateway/gateway_config_sni.go index 6eae003ab..678fc6163 100644 --- a/pkg/deployment/resources/gateway/gateway_config_sni.go +++ b/pkg/deployment/resources/gateway/gateway_config_sni.go @@ -32,8 +32,8 @@ import ( type ConfigSNIList []ConfigSNI func (c ConfigSNIList) RenderFilterChain(filters []*listenerAPI.Filter) ([]*listenerAPI.FilterChain, error) { - var r = make([]*listenerAPI.FilterChain, len(filters)) - for id := range filters { + var r = make([]*listenerAPI.FilterChain, len(c)) + for id := range c { if f, err := c[id].RenderFilterChain(filters); err != nil { return nil, err } else { diff --git a/pkg/deployment/resources/gateway/gateway_config_test.go b/pkg/deployment/resources/gateway/gateway_config_test.go index 0d0a86599..b5a280b8c 100644 --- a/pkg/deployment/resources/gateway/gateway_config_test.go +++ b/pkg/deployment/resources/gateway/gateway_config_test.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,22 +21,31 @@ package gateway import ( + "fmt" "testing" bootstrapAPI "github.com/envoyproxy/go-control-plane/envoy/config/bootstrap/v3" + httpConnectionManagerAPI "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/network/http_connection_manager/v3" "github.com/stretchr/testify/require" "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/tests/tgrpc" ) -func renderAndPrintGatewayConfig(t *testing.T, cfg Config) *bootstrapAPI.Bootstrap { +func renderAndPrintGatewayConfig(t *testing.T, cfg Config, validates ...func(t *testing.T, b *bootstrapAPI.Bootstrap)) { + require.NoError(t, cfg.Validate()) + data, checksum, obj, err := cfg.RenderYAML() require.NoError(t, err) t.Logf("Checksum: %s", checksum) t.Log(string(data)) - return obj + for id := range validates { + t.Run(fmt.Sprintf("Validation%d", id), func(t *testing.T) { + validates[id](t, obj) + }) + } } func Test_GatewayConfig(t *testing.T) { @@ -50,8 +59,157 @@ func Test_GatewayConfig(t *testing.T) { }, }, }, + }, func(t *testing.T, b *bootstrapAPI.Bootstrap) { + require.NotNil(t, b) + require.NotNil(t, b.StaticResources) + require.NotNil(t, b.StaticResources.Clusters) + require.Len(t, b.StaticResources.Clusters, 1) + require.NotNil(t, b.StaticResources.Clusters[0]) + require.NotNil(t, b.StaticResources.Clusters[0].LoadAssignment) + require.NotNil(t, b.StaticResources.Clusters[0].LoadAssignment.Endpoints) + require.Len(t, b.StaticResources.Clusters[0].LoadAssignment.Endpoints, 1) + require.NotNil(t, b.StaticResources.Clusters[0].LoadAssignment.Endpoints[0]) + require.NotNil(t, b.StaticResources.Clusters[0].LoadAssignment.Endpoints[0].LbEndpoints) + require.Len(t, b.StaticResources.Clusters[0].LoadAssignment.Endpoints[0].LbEndpoints, 1) + require.NotNil(t, b.StaticResources.Clusters[0].LoadAssignment.Endpoints[0].LbEndpoints[0]) + require.NotNil(t, b.StaticResources.Clusters[0].LoadAssignment.Endpoints[0].LbEndpoints[0].GetEndpoint()) + require.NotNil(t, b.StaticResources.Clusters[0].LoadAssignment.Endpoints[0].LbEndpoints[0].GetEndpoint().Address) + require.NotNil(t, b.StaticResources.Clusters[0].LoadAssignment.Endpoints[0].LbEndpoints[0].GetEndpoint().Address.GetSocketAddress()) + require.EqualValues(t, "127.0.0.1", b.StaticResources.Clusters[0].LoadAssignment.Endpoints[0].LbEndpoints[0].GetEndpoint().Address.GetSocketAddress().Address) + require.EqualValues(t, 12345, b.StaticResources.Clusters[0].LoadAssignment.Endpoints[0].LbEndpoints[0].GetEndpoint().Address.GetSocketAddress().GetPortValue()) + }) + }) + t.Run("Without WebSocket", func(t *testing.T) { + renderAndPrintGatewayConfig(t, Config{ + DefaultDestination: ConfigDestination{ + Targets: []ConfigDestinationTarget{ + { + Host: "127.0.0.1", + Port: 12345, + }, + }, + }, + }, func(t *testing.T, b *bootstrapAPI.Bootstrap) { + require.NotNil(t, b) + require.NotNil(t, b.StaticResources) + require.NotNil(t, b.StaticResources.Listeners) + require.Len(t, b.StaticResources.Listeners, 1) + require.NotNil(t, b.StaticResources.Listeners[0]) + require.NotNil(t, b.StaticResources.Listeners[0].DefaultFilterChain) + require.NotNil(t, b.StaticResources.Listeners[0].DefaultFilterChain.Filters) + require.Len(t, b.StaticResources.Listeners[0].DefaultFilterChain.Filters, 1) + require.NotNil(t, b.StaticResources.Listeners[0].DefaultFilterChain.Filters[0]) + var o httpConnectionManagerAPI.HttpConnectionManager + tgrpc.GRPCAnyCastAs(t, b.StaticResources.Listeners[0].DefaultFilterChain.Filters[0].GetTypedConfig(), &o) + rc := o.GetRouteConfig() + require.NotNil(t, rc) + require.NotNil(t, rc.VirtualHosts) + require.Len(t, rc.VirtualHosts, 1) + require.NotNil(t, rc.VirtualHosts[0]) + require.Len(t, rc.VirtualHosts[0].Routes, 1) + require.NotNil(t, rc.VirtualHosts[0].Routes[0]) + r := rc.VirtualHosts[0].Routes[0].GetRoute() + require.NotNil(t, r) + require.Len(t, r.UpgradeConfigs, 0) + }) + }) + + t.Run("With WebSocket", func(t *testing.T) { + renderAndPrintGatewayConfig(t, Config{ + DefaultDestination: ConfigDestination{ + Targets: []ConfigDestinationTarget{ + { + Host: "127.0.0.1", + Port: 12345, + }, + }, + UpgradeConfigs: ConfigDestinationsUpgrade{ + { + Type: "websocket", + }, + }, + }, + }, func(t *testing.T, b *bootstrapAPI.Bootstrap) { + require.NotNil(t, b) + require.NotNil(t, b.StaticResources) + require.NotNil(t, b.StaticResources.Listeners) + require.Len(t, b.StaticResources.Listeners, 1) + require.NotNil(t, b.StaticResources.Listeners[0]) + require.NotNil(t, b.StaticResources.Listeners[0].DefaultFilterChain) + require.NotNil(t, b.StaticResources.Listeners[0].DefaultFilterChain.Filters) + require.Len(t, b.StaticResources.Listeners[0].DefaultFilterChain.Filters, 1) + require.NotNil(t, b.StaticResources.Listeners[0].DefaultFilterChain.Filters[0]) + var o httpConnectionManagerAPI.HttpConnectionManager + tgrpc.GRPCAnyCastAs(t, b.StaticResources.Listeners[0].DefaultFilterChain.Filters[0].GetTypedConfig(), &o) + rc := o.GetRouteConfig() + require.NotNil(t, rc) + require.NotNil(t, rc.VirtualHosts) + require.Len(t, rc.VirtualHosts, 1) + require.NotNil(t, rc.VirtualHosts[0]) + require.Len(t, rc.VirtualHosts[0].Routes, 1) + require.NotNil(t, rc.VirtualHosts[0].Routes[0]) + r := rc.VirtualHosts[0].Routes[0].GetRoute() + require.NotNil(t, r) + require.Len(t, r.UpgradeConfigs, 1) + require.NotNil(t, r.UpgradeConfigs[0]) + require.EqualValues(t, "websocket", r.UpgradeConfigs[0].UpgradeType) + require.NotNil(t, r.UpgradeConfigs[0].Enabled) + require.True(t, r.UpgradeConfigs[0].Enabled.GetValue()) }) }) + + t.Run("With Multi WebSocket", func(t *testing.T) { + renderAndPrintGatewayConfig(t, Config{ + DefaultDestination: ConfigDestination{ + Targets: []ConfigDestinationTarget{ + { + Host: "127.0.0.1", + Port: 12345, + }, + }, + UpgradeConfigs: ConfigDestinationsUpgrade{ + { + Type: "websocket", + }, + { + Type: "websocket", + Enabled: util.NewType(false), + }, + }, + }, + }, func(t *testing.T, b *bootstrapAPI.Bootstrap) { + require.NotNil(t, b) + require.NotNil(t, b.StaticResources) + require.NotNil(t, b.StaticResources.Listeners) + require.Len(t, b.StaticResources.Listeners, 1) + require.NotNil(t, b.StaticResources.Listeners[0]) + require.NotNil(t, b.StaticResources.Listeners[0].DefaultFilterChain) + require.NotNil(t, b.StaticResources.Listeners[0].DefaultFilterChain.Filters) + require.Len(t, b.StaticResources.Listeners[0].DefaultFilterChain.Filters, 1) + require.NotNil(t, b.StaticResources.Listeners[0].DefaultFilterChain.Filters[0]) + var o httpConnectionManagerAPI.HttpConnectionManager + tgrpc.GRPCAnyCastAs(t, b.StaticResources.Listeners[0].DefaultFilterChain.Filters[0].GetTypedConfig(), &o) + rc := o.GetRouteConfig() + require.NotNil(t, rc) + require.NotNil(t, rc.VirtualHosts) + require.Len(t, rc.VirtualHosts, 1) + require.NotNil(t, rc.VirtualHosts[0]) + require.Len(t, rc.VirtualHosts[0].Routes, 1) + require.NotNil(t, rc.VirtualHosts[0].Routes[0]) + r := rc.VirtualHosts[0].Routes[0].GetRoute() + require.NotNil(t, r) + require.Len(t, r.UpgradeConfigs, 2) + require.NotNil(t, r.UpgradeConfigs[0]) + require.NotNil(t, r.UpgradeConfigs[1]) + require.EqualValues(t, "websocket", r.UpgradeConfigs[0].UpgradeType) + require.NotNil(t, r.UpgradeConfigs[0].Enabled) + require.True(t, r.UpgradeConfigs[0].Enabled.GetValue()) + require.EqualValues(t, "websocket", r.UpgradeConfigs[1].UpgradeType) + require.NotNil(t, r.UpgradeConfigs[1].Enabled) + require.False(t, r.UpgradeConfigs[1].Enabled.GetValue()) + }) + }) + t.Run("Default", func(t *testing.T) { renderAndPrintGatewayConfig(t, Config{ DefaultDestination: ConfigDestination{ @@ -69,6 +227,7 @@ func Test_GatewayConfig(t *testing.T) { }, }) }) + t.Run("Default", func(t *testing.T) { renderAndPrintGatewayConfig(t, Config{ DefaultDestination: ConfigDestination{ @@ -87,6 +246,7 @@ func Test_GatewayConfig(t *testing.T) { }, }) }) + t.Run("Default", func(t *testing.T) { renderAndPrintGatewayConfig(t, Config{ DefaultDestination: ConfigDestination{ @@ -117,6 +277,7 @@ func Test_GatewayConfig(t *testing.T) { }, }) }) + t.Run("Default", func(t *testing.T) { renderAndPrintGatewayConfig(t, Config{ DefaultDestination: ConfigDestination{ @@ -147,6 +308,7 @@ func Test_GatewayConfig(t *testing.T) { }, }) }) + t.Run("Default", func(t *testing.T) { renderAndPrintGatewayConfig(t, Config{ DefaultDestination: ConfigDestination{ @@ -188,4 +350,117 @@ func Test_GatewayConfig(t *testing.T) { }, }) }) + + t.Run("Default", func(t *testing.T) { + renderAndPrintGatewayConfig(t, Config{ + DefaultDestination: ConfigDestination{ + Targets: []ConfigDestinationTarget{ + { + Host: "127.0.0.1", + Port: 12345, + }, + }, + Path: util.NewType("/test/path/"), + Type: util.NewType(ConfigDestinationTypeHTTPS), + }, + DefaultTLS: &ConfigTLS{ + CertificatePath: "/test", + PrivateKeyPath: "/test12", + }, + SNI: []ConfigSNI{ + { + ConfigTLS: ConfigTLS{ + CertificatePath: "/cp", + PrivateKeyPath: "/pp", + }, + ServerNames: []string{ + "example.com", + }, + }, + { + ConfigTLS: ConfigTLS{ + CertificatePath: "/c2", + PrivateKeyPath: "/p2", + }, + ServerNames: []string{ + "2.example.com", + }, + }, + }, + Destinations: ConfigDestinations{ + "/_test/": { + Targets: []ConfigDestinationTarget{ + { + Host: "127.0.0.1", + Port: 12346, + }, + }, + Path: util.NewType("/test/path/"), + Type: util.NewType(ConfigDestinationTypeHTTP), + }, + }, + }) + }) + + t.Run("Default", func(t *testing.T) { + renderAndPrintGatewayConfig(t, Config{ + DefaultDestination: ConfigDestination{ + Targets: []ConfigDestinationTarget{ + { + Host: "127.0.0.1", + Port: 12345, + }, + }, + Path: util.NewType("/test/path/"), + Type: util.NewType(ConfigDestinationTypeHTTPS), + }, + DefaultTLS: &ConfigTLS{ + CertificatePath: "/test", + PrivateKeyPath: "/test12", + }, + SNI: []ConfigSNI{ + { + ConfigTLS: ConfigTLS{ + CertificatePath: "/cp", + PrivateKeyPath: "/pp", + }, + ServerNames: []string{ + "example.com", + }, + }, + { + ConfigTLS: ConfigTLS{ + CertificatePath: "/c2", + PrivateKeyPath: "/p2", + }, + ServerNames: []string{ + "2.example.com", + }, + }, + }, + Destinations: ConfigDestinations{ + "/_test/": { + Targets: []ConfigDestinationTarget{ + { + Host: "127.0.0.1", + Port: 12346, + }, + }, + Path: util.NewType("/test/path/"), + Type: util.NewType(ConfigDestinationTypeHTTP), + }, + "/_test2": { + Type: util.NewType(ConfigDestinationTypeStatic), + Static: &ConfigDestinationStatic{ + Code: util.NewType[uint32](302), + Response: struct { + Data string `json:"data"` + }{ + Data: "TEST", + }, + }, + }, + }, + }) + }) } diff --git a/pkg/deployment/resources/gateway/gateway_config_tls.go b/pkg/deployment/resources/gateway/gateway_config_tls.go index 98f90fd3a..730782e38 100644 --- a/pkg/deployment/resources/gateway/gateway_config_tls.go +++ b/pkg/deployment/resources/gateway/gateway_config_tls.go @@ -54,6 +54,7 @@ func (c *ConfigTLS) RenderListenerTransportSocket() (*coreAPI.TransportSocket, e }, }, }, + AlpnProtocols: []string{(ALPNProtocolHTTP2 | ALPNProtocolHTTP1).String()}, }, }) if err != nil { diff --git a/pkg/deployment/resources/gateway/marshal.go b/pkg/deployment/resources/gateway/marshal.go index 69bb5b95a..16f3d3d5b 100644 --- a/pkg/deployment/resources/gateway/marshal.go +++ b/pkg/deployment/resources/gateway/marshal.go @@ -39,3 +39,13 @@ func Marshal[T proto.Message](in T) ([]byte, string, T, error) { data, err = yaml.JSONToYAML(data) return data, util.SHA256(data), in, err } + +func Unmarshal[T proto.Message](data []byte) (T, error) { + var v T + + if err := (protojson.UnmarshalOptions{}).Unmarshal(data, v); err != nil { + return util.Default[T](), err + } + + return v, nil +} diff --git a/pkg/deployment/resources/inspector/acs.go b/pkg/deployment/resources/inspector/acs.go index e0e5cbd33..ffbc60563 100644 --- a/pkg/deployment/resources/inspector/acs.go +++ b/pkg/deployment/resources/inspector/acs.go @@ -24,12 +24,12 @@ import ( "context" "time" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoclustersynchronization" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,92 +49,18 @@ func (p arangoClusterSynchronizationsInspectorLoader) Component() definitions.Co func (p arangoClusterSynchronizationsInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q arangoClusterSynchronizationsInspector - p.loadV1(ctx, i, &q) + + q.v1 = newInspectorVersion[*api.ArangoClusterSynchronizationList, *api.ArangoClusterSynchronization](ctx, + constants.ArangoClusterSynchronizationGRv1(), + constants.ArangoClusterSynchronizationGKv1(), + i.client.Arango().DatabaseV1().ArangoClusterSynchronizations(i.namespace), + arangoclustersynchronization.List()) + i.arangoClusterSynchronizations = &q q.state = i q.last = time.Now() } -func (p arangoClusterSynchronizationsInspectorLoader) loadV1(ctx context.Context, i *inspectorState, q *arangoClusterSynchronizationsInspector) { - var z arangoClusterSynchronizationsInspectorV1 - - z.arangoClusterSynchronizationInspector = q - - z.arangoClusterSynchronizations, z.err = p.getV1ArangoClusterSynchronizations(ctx, i) - - q.v1 = &z -} - -func (p arangoClusterSynchronizationsInspectorLoader) getV1ArangoClusterSynchronizations(ctx context.Context, i *inspectorState) (map[string]*api.ArangoClusterSynchronization, error) { - objs, err := p.getV1ArangoClusterSynchronizationsList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*api.ArangoClusterSynchronization, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p arangoClusterSynchronizationsInspectorLoader) getV1ArangoClusterSynchronizationsList(ctx context.Context, i *inspectorState) ([]*api.ArangoClusterSynchronization, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Arango().DatabaseV1().ArangoClusterSynchronizations(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*api.ArangoClusterSynchronization, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1ArangoClusterSynchronizationsListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p arangoClusterSynchronizationsInspectorLoader) getV1ArangoClusterSynchronizationsListRequest(ctx context.Context, i *inspectorState, cont string) ([]api.ArangoClusterSynchronization, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Arango().DatabaseV1().ArangoClusterSynchronizations(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p arangoClusterSynchronizationsInspectorLoader) Verify(i *inspectorState) error { return nil } @@ -159,7 +85,7 @@ type arangoClusterSynchronizationsInspector struct { last time.Time - v1 *arangoClusterSynchronizationsInspectorV1 + v1 *inspectorVersion[*api.ArangoClusterSynchronization] } func (p *arangoClusterSynchronizationsInspector) LastRefresh() time.Time { @@ -190,3 +116,11 @@ func (p *arangoClusterSynchronizationsInspector) validate() error { return p.v1.validate() } + +func (p *arangoClusterSynchronizationsInspector) V1() (generic.Inspector[*api.ArangoClusterSynchronization], error) { + if p.v1.err != nil { + return nil, p.v1.err + } + + return p.v1, nil +} diff --git a/pkg/deployment/resources/inspector/acs_gvk.go b/pkg/deployment/resources/inspector/acs_gvk.go index 822f4d6a1..9d08630af 100644 --- a/pkg/deployment/resources/inspector/acs_gvk.go +++ b/pkg/deployment/resources/inspector/acs_gvk.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *arangoClusterSynchronizationsInspectorV1) GroupVersionKind() schema.GroupVersionKind { - return constants.ArangoClusterSynchronizationGKv1() -} - -func (p *arangoClusterSynchronizationsInspectorV1) GroupVersionResource() schema.GroupVersionResource { - return constants.ArangoClusterSynchronizationGRv1() -} - func (p *arangoClusterSynchronizationsInspector) GroupKind() schema.GroupKind { return constants.ArangoClusterSynchronizationGK() } diff --git a/pkg/deployment/resources/inspector/acs_mod.go b/pkg/deployment/resources/inspector/acs_mod.go index 49ada8bbd..27b3410a3 100644 --- a/pkg/deployment/resources/inspector/acs_mod.go +++ b/pkg/deployment/resources/inspector/acs_mod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -22,7 +22,6 @@ package inspector import ( api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - arangoclustersynchronizationv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoclustersynchronization/v1" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" @@ -38,7 +37,7 @@ type arangoClusterSynchronizationMod struct { i *inspectorState } -func (p arangoClusterSynchronizationMod) V1() arangoclustersynchronizationv1.ModInterface { +func (p arangoClusterSynchronizationMod) V1() generic.ModStatusClient[*api.ArangoClusterSynchronization] { return wrapMod[*api.ArangoClusterSynchronization](definitions.ArangoClusterSynchronization, p.i.GetThrottles, p.clientv1) } diff --git a/pkg/deployment/resources/inspector/acs_v1.go b/pkg/deployment/resources/inspector/acs_v1.go deleted file mode 100644 index e5f175ba7..000000000 --- a/pkg/deployment/resources/inspector/acs_v1.go +++ /dev/null @@ -1,138 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - "github.com/arangodb/kube-arangodb/pkg/util/errors" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoclustersynchronization/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" -) - -func (p *arangoClusterSynchronizationsInspector) V1() (ins.Inspector, error) { - if p.v1.err != nil { - return nil, p.v1.err - } - - return p.v1, nil -} - -type arangoClusterSynchronizationsInspectorV1 struct { - arangoClusterSynchronizationInspector *arangoClusterSynchronizationsInspector - - arangoClusterSynchronizations map[string]*api.ArangoClusterSynchronization - err error -} - -func (p *arangoClusterSynchronizationsInspectorV1) Filter(filters ...ins.Filter) []*api.ArangoClusterSynchronization { - z := p.ListSimple() - - r := make([]*api.ArangoClusterSynchronization, 0, len(z)) - - for _, o := range z { - if !ins.FilterObject(o, filters...) { - continue - } - - r = append(r, o) - } - - return r -} - -func (p *arangoClusterSynchronizationsInspectorV1) validate() error { - if p == nil { - return errors.Errorf("ArangoClusterSynchronizationsV1Inspector is nil") - } - - if p.arangoClusterSynchronizationInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.arangoClusterSynchronizations == nil && p.err == nil { - return errors.Errorf("ListSimple or err should be not nil") - } - - if p.arangoClusterSynchronizations != nil && p.err != nil { - return errors.Errorf("ListSimple or err cannot be not nil together") - } - - return nil -} - -func (p *arangoClusterSynchronizationsInspectorV1) ListSimple() []*api.ArangoClusterSynchronization { - var r []*api.ArangoClusterSynchronization - for _, arangoClusterSynchronization := range p.arangoClusterSynchronizations { - r = append(r, arangoClusterSynchronization) - } - - return r -} - -func (p *arangoClusterSynchronizationsInspectorV1) GetSimple(name string) (*api.ArangoClusterSynchronization, bool) { - arangoClusterSynchronization, ok := p.arangoClusterSynchronizations[name] - if !ok { - return nil, false - } - - return arangoClusterSynchronization, true -} - -func (p *arangoClusterSynchronizationsInspectorV1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, arangoClusterSynchronization := range p.arangoClusterSynchronizations { - if err := p.iterateArangoClusterSynchronization(arangoClusterSynchronization, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *arangoClusterSynchronizationsInspectorV1) iterateArangoClusterSynchronization(arangoClusterSynchronization *api.ArangoClusterSynchronization, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(arangoClusterSynchronization) { - return nil - } - } - - return action(arangoClusterSynchronization) -} - -func (p *arangoClusterSynchronizationsInspectorV1) Read() ins.ReadInterface { - return p -} - -func (p *arangoClusterSynchronizationsInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*api.ArangoClusterSynchronization, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.ArangoClusterSynchronizationGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/am.go b/pkg/deployment/resources/inspector/am.go index 57845e8c7..4f2a56846 100644 --- a/pkg/deployment/resources/inspector/am.go +++ b/pkg/deployment/resources/inspector/am.go @@ -24,12 +24,12 @@ import ( "context" "time" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangomember" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,92 +49,18 @@ func (p arangoMembersInspectorLoader) Component() definitions.Component { func (p arangoMembersInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q arangoMembersInspector - p.loadV1(ctx, i, &q) + + q.v1 = newInspectorVersion[*api.ArangoMemberList, *api.ArangoMember](ctx, + constants.ArangoMemberGRv1(), + constants.ArangoMemberGKv1(), + i.client.Arango().DatabaseV1().ArangoMembers(i.namespace), + arangomember.List()) + i.arangoMembers = &q q.state = i q.last = time.Now() } -func (p arangoMembersInspectorLoader) loadV1(ctx context.Context, i *inspectorState, q *arangoMembersInspector) { - var z arangoMembersInspectorV1 - - z.arangoMemberInspector = q - - z.arangoMembers, z.err = p.getV1ArangoMembers(ctx, i) - - q.v1 = &z -} - -func (p arangoMembersInspectorLoader) getV1ArangoMembers(ctx context.Context, i *inspectorState) (map[string]*api.ArangoMember, error) { - objs, err := p.getV1ArangoMembersList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*api.ArangoMember, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p arangoMembersInspectorLoader) getV1ArangoMembersList(ctx context.Context, i *inspectorState) ([]*api.ArangoMember, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Arango().DatabaseV1().ArangoMembers(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*api.ArangoMember, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1ArangoMembersListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p arangoMembersInspectorLoader) getV1ArangoMembersListRequest(ctx context.Context, i *inspectorState, cont string) ([]api.ArangoMember, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Arango().DatabaseV1().ArangoMembers(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p arangoMembersInspectorLoader) Verify(i *inspectorState) error { if err := i.arangoMembers.v1.err; err != nil { return err @@ -163,7 +89,7 @@ type arangoMembersInspector struct { last time.Time - v1 *arangoMembersInspectorV1 + v1 *inspectorVersion[*api.ArangoMember] } func (p *arangoMembersInspector) LastRefresh() time.Time { @@ -194,3 +120,7 @@ func (p *arangoMembersInspector) validate() error { return p.v1.validate() } + +func (p *arangoMembersInspector) V1() generic.Inspector[*api.ArangoMember] { + return p.v1 +} diff --git a/pkg/deployment/resources/inspector/am_gvk.go b/pkg/deployment/resources/inspector/am_gvk.go index 520ab8147..a813015de 100644 --- a/pkg/deployment/resources/inspector/am_gvk.go +++ b/pkg/deployment/resources/inspector/am_gvk.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *arangoMembersInspectorV1) GroupVersionKind() schema.GroupVersionKind { - return constants.ArangoMemberGKv1() -} - -func (p *arangoMembersInspectorV1) GroupVersionResource() schema.GroupVersionResource { - return constants.ArangoMemberGRv1() -} - func (p *arangoMembersInspector) GroupKind() schema.GroupKind { return constants.ArangoMemberGK() } diff --git a/pkg/deployment/resources/inspector/am_mod.go b/pkg/deployment/resources/inspector/am_mod.go index c33515096..c254e2296 100644 --- a/pkg/deployment/resources/inspector/am_mod.go +++ b/pkg/deployment/resources/inspector/am_mod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -22,7 +22,6 @@ package inspector import ( api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - arangomemberv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangomember/v1" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" @@ -38,7 +37,7 @@ type arangoMemberMod struct { i *inspectorState } -func (p arangoMemberMod) V1() arangomemberv1.ModInterface { +func (p arangoMemberMod) V1() generic.ModStatusClient[*api.ArangoMember] { return wrapMod[*api.ArangoMember](definitions.ArangoMember, p.i.GetThrottles, p.clientv1) } diff --git a/pkg/deployment/resources/inspector/am_v1.go b/pkg/deployment/resources/inspector/am_v1.go deleted file mode 100644 index dc34359e5..000000000 --- a/pkg/deployment/resources/inspector/am_v1.go +++ /dev/null @@ -1,126 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - "github.com/arangodb/kube-arangodb/pkg/util/errors" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangomember/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" -) - -func (p *arangoMembersInspector) V1() ins.Inspector { - return p.v1 -} - -type arangoMembersInspectorV1 struct { - arangoMemberInspector *arangoMembersInspector - - arangoMembers map[string]*api.ArangoMember - err error -} - -func (p *arangoMembersInspectorV1) validate() error { - if p == nil { - return errors.Errorf("ArangoMembersV1Inspector is nil") - } - - if p.arangoMemberInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.arangoMembers == nil { - return errors.Errorf("ArangoMembers or err should be not nil") - } - - if p.err != nil { - return errors.Errorf("ArangoMembers or err cannot be not nil together") - } - - return nil -} - -func (p *arangoMembersInspectorV1) ArangoMembers() []*api.ArangoMember { - var r []*api.ArangoMember - for _, arangoMember := range p.arangoMembers { - r = append(r, arangoMember) - } - - return r -} - -func (p *arangoMembersInspectorV1) GetSimple(name string) (*api.ArangoMember, bool) { - arangoMember, ok := p.arangoMembers[name] - if !ok { - return nil, false - } - - return arangoMember, true -} - -func (p *arangoMembersInspectorV1) GetSimpleOptional(name string) *api.ArangoMember { - a, ok := p.GetSimple(name) - if !ok { - return &api.ArangoMember{} - } - return a -} - -func (p *arangoMembersInspectorV1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, arangoMember := range p.arangoMembers { - if err := p.iterateArangoMember(arangoMember, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *arangoMembersInspectorV1) iterateArangoMember(arangoMember *api.ArangoMember, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(arangoMember) { - return nil - } - } - - return action(arangoMember) -} - -func (p *arangoMembersInspectorV1) Read() ins.ReadInterface { - return p -} - -func (p *arangoMembersInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*api.ArangoMember, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.ArangoMemberGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/ap.go b/pkg/deployment/resources/inspector/ap.go index 611c85ec8..12d5343bf 100644 --- a/pkg/deployment/resources/inspector/ap.go +++ b/pkg/deployment/resources/inspector/ap.go @@ -24,12 +24,12 @@ import ( "context" "time" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoprofile" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,92 +49,18 @@ func (p arangoProfilesInspectorLoader) Component() definitions.Component { func (p arangoProfilesInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q arangoProfilesInspector - p.loadV1Beta1(ctx, i, &q) + + q.v1beta1 = newInspectorVersion[*schedulerApi.ArangoProfileList, *schedulerApi.ArangoProfile](ctx, + constants.ArangoProfileGRv1(), + constants.ArangoProfileGKv1(), + i.client.Arango().SchedulerV1beta1().ArangoProfiles(i.namespace), + arangoprofile.List()) + i.arangoProfiles = &q q.state = i q.last = time.Now() } -func (p arangoProfilesInspectorLoader) loadV1Beta1(ctx context.Context, i *inspectorState, q *arangoProfilesInspector) { - var z arangoProfilesInspectorV1Beta1 - - z.arangoProfileInspector = q - - z.arangoProfiles, z.err = p.getV1ArangoProfiles(ctx, i) - - q.v1beta1 = &z -} - -func (p arangoProfilesInspectorLoader) getV1ArangoProfiles(ctx context.Context, i *inspectorState) (map[string]*schedulerApi.ArangoProfile, error) { - objs, err := p.getV1ArangoProfilesList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*schedulerApi.ArangoProfile, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p arangoProfilesInspectorLoader) getV1ArangoProfilesList(ctx context.Context, i *inspectorState) ([]*schedulerApi.ArangoProfile, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Arango().SchedulerV1beta1().ArangoProfiles(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*schedulerApi.ArangoProfile, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1ArangoProfilesListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p arangoProfilesInspectorLoader) getV1ArangoProfilesListRequest(ctx context.Context, i *inspectorState, cont string) ([]schedulerApi.ArangoProfile, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Arango().SchedulerV1beta1().ArangoProfiles(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p arangoProfilesInspectorLoader) Verify(i *inspectorState) error { return nil } @@ -159,7 +85,7 @@ type arangoProfilesInspector struct { last time.Time - v1beta1 *arangoProfilesInspectorV1Beta1 + v1beta1 *inspectorVersion[*schedulerApi.ArangoProfile] } func (p *arangoProfilesInspector) LastRefresh() time.Time { @@ -190,3 +116,11 @@ func (p *arangoProfilesInspector) validate() error { return p.v1beta1.validate() } + +func (p *arangoProfilesInspector) V1Beta1() (generic.Inspector[*schedulerApi.ArangoProfile], error) { + if p.v1beta1.err != nil { + return nil, p.v1beta1.err + } + + return p.v1beta1, nil +} diff --git a/pkg/deployment/resources/inspector/ap_gvk.go b/pkg/deployment/resources/inspector/ap_gvk.go index f73892fde..60b6e6674 100644 --- a/pkg/deployment/resources/inspector/ap_gvk.go +++ b/pkg/deployment/resources/inspector/ap_gvk.go @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *arangoProfilesInspectorV1Beta1) GroupVersionKind() schema.GroupVersionKind { - return constants.ArangoProfileGKv1() -} - -func (p *arangoProfilesInspectorV1Beta1) GroupVersionResource() schema.GroupVersionResource { - return constants.ArangoProfileGRv1() -} - func (p *arangoProfilesInspector) GroupKind() schema.GroupKind { return constants.ArangoProfileGK() } diff --git a/pkg/deployment/resources/inspector/ap_mod.go b/pkg/deployment/resources/inspector/ap_mod.go index 276bb8935..d81a96c10 100644 --- a/pkg/deployment/resources/inspector/ap_mod.go +++ b/pkg/deployment/resources/inspector/ap_mod.go @@ -22,7 +22,6 @@ package inspector import ( schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" - arangoProfilev1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoprofile/v1beta1" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" @@ -38,7 +37,7 @@ type arangoProfileMod struct { i *inspectorState } -func (p arangoProfileMod) V1Beta1() arangoProfilev1.ModInterface { +func (p arangoProfileMod) V1Beta1() generic.ModStatusClient[*schedulerApi.ArangoProfile] { return wrapMod[*schedulerApi.ArangoProfile](definitions.ArangoProfile, p.i.GetThrottles, p.clientv1beta1) } diff --git a/pkg/deployment/resources/inspector/ap_v1beta1.go b/pkg/deployment/resources/inspector/ap_v1beta1.go deleted file mode 100644 index add18b85c..000000000 --- a/pkg/deployment/resources/inspector/ap_v1beta1.go +++ /dev/null @@ -1,138 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" - "github.com/arangodb/kube-arangodb/pkg/util/errors" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoprofile/v1beta1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" -) - -func (p *arangoProfilesInspector) V1Beta1() (ins.Inspector, error) { - if p.v1beta1.err != nil { - return nil, p.v1beta1.err - } - - return p.v1beta1, nil -} - -type arangoProfilesInspectorV1Beta1 struct { - arangoProfileInspector *arangoProfilesInspector - - arangoProfiles map[string]*schedulerApi.ArangoProfile - err error -} - -func (p *arangoProfilesInspectorV1Beta1) Filter(filters ...ins.Filter) []*schedulerApi.ArangoProfile { - z := p.ListSimple() - - r := make([]*schedulerApi.ArangoProfile, 0, len(z)) - - for _, o := range z { - if !ins.FilterObject(o, filters...) { - continue - } - - r = append(r, o) - } - - return r -} - -func (p *arangoProfilesInspectorV1Beta1) validate() error { - if p == nil { - return errors.Errorf("ArangoProfilesV1AlphaInspector is nil") - } - - if p.arangoProfileInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.arangoProfiles == nil && p.err == nil { - return errors.Errorf("ArangoProfiles or err should be not nil") - } - - if p.arangoProfiles != nil && p.err != nil { - return errors.Errorf("ArangoProfiles or err cannot be not nil together") - } - - return nil -} - -func (p *arangoProfilesInspectorV1Beta1) ListSimple() []*schedulerApi.ArangoProfile { - var r []*schedulerApi.ArangoProfile - for _, arangoProfile := range p.arangoProfiles { - r = append(r, arangoProfile) - } - - return r -} - -func (p *arangoProfilesInspectorV1Beta1) GetSimple(name string) (*schedulerApi.ArangoProfile, bool) { - arangoProfile, ok := p.arangoProfiles[name] - if !ok { - return nil, false - } - - return arangoProfile, true -} - -func (p *arangoProfilesInspectorV1Beta1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, arangoProfile := range p.arangoProfiles { - if err := p.iterateArangoProfile(arangoProfile, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *arangoProfilesInspectorV1Beta1) iterateArangoProfile(arangoProfile *schedulerApi.ArangoProfile, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(arangoProfile) { - return nil - } - } - - return action(arangoProfile) -} - -func (p *arangoProfilesInspectorV1Beta1) Read() ins.ReadInterface { - return p -} - -func (p *arangoProfilesInspectorV1Beta1) Get(ctx context.Context, name string, opts meta.GetOptions) (*schedulerApi.ArangoProfile, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.ArangoProfileGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/aps.go b/pkg/deployment/resources/inspector/aps.go new file mode 100644 index 000000000..083baa927 --- /dev/null +++ b/pkg/deployment/resources/inspector/aps.go @@ -0,0 +1,126 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package inspector + +import ( + "context" + "time" + + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoplatformstorage" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" +) + +func init() { + requireRegisterInspectorLoader(arangoPlatformStoragesInspectorLoaderObj) +} + +var arangoPlatformStoragesInspectorLoaderObj = arangoPlatformStoragesInspectorLoader{} + +type arangoPlatformStoragesInspectorLoader struct { +} + +func (p arangoPlatformStoragesInspectorLoader) Component() definitions.Component { + return definitions.ArangoPlatformStorage +} + +func (p arangoPlatformStoragesInspectorLoader) Load(ctx context.Context, i *inspectorState) { + var q arangoPlatformStoragesInspector + + q.v1alpha1 = newInspectorVersion[*platformApi.ArangoPlatformStorageList, *platformApi.ArangoPlatformStorage](ctx, + constants.ArangoPlatformStorageGRv1(), + constants.ArangoPlatformStorageGKv1(), + i.client.Arango().PlatformV1alpha1().ArangoPlatformStorages(i.namespace), + arangoplatformstorage.List()) + + i.arangoPlatformStorages = &q + q.state = i + q.last = time.Now() +} + +func (p arangoPlatformStoragesInspectorLoader) Verify(i *inspectorState) error { + return nil +} + +func (p arangoPlatformStoragesInspectorLoader) Copy(from, to *inspectorState, override bool) { + if to.arangoPlatformStorages != nil { + if !override { + return + } + } + + to.arangoPlatformStorages = from.arangoPlatformStorages + to.arangoPlatformStorages.state = to +} + +func (p arangoPlatformStoragesInspectorLoader) Name() string { + return "arangoPlatformStorages" +} + +type arangoPlatformStoragesInspector struct { + state *inspectorState + + last time.Time + + v1alpha1 *inspectorVersion[*platformApi.ArangoPlatformStorage] +} + +func (p *arangoPlatformStoragesInspector) LastRefresh() time.Time { + return p.last +} + +func (p *arangoPlatformStoragesInspector) Refresh(ctx context.Context) error { + p.Throttle(p.state.throttles).Invalidate() + return p.state.refresh(ctx, arangoPlatformStoragesInspectorLoaderObj) +} + +func (p *arangoPlatformStoragesInspector) Version() version.Version { + return version.V1 +} + +func (p *arangoPlatformStoragesInspector) Throttle(c throttle.Components) throttle.Throttle { + return c.ArangoPlatformStorage() +} + +func (p *arangoPlatformStoragesInspector) validate() error { + if p == nil { + return errors.Errorf("ArangoPlatformStorageInspector is nil") + } + + if p.state == nil { + return errors.Errorf("Parent is nil") + } + + return p.v1alpha1.validate() +} + +func (p *arangoPlatformStoragesInspector) V1Alpha1() (generic.Inspector[*platformApi.ArangoPlatformStorage], error) { + if p.v1alpha1.err != nil { + return nil, p.v1alpha1.err + } + + return p.v1alpha1, nil +} diff --git a/pkg/deployment/resources/inspector/aps_anonymous.go b/pkg/deployment/resources/inspector/aps_anonymous.go new file mode 100644 index 000000000..9c6737835 --- /dev/null +++ b/pkg/deployment/resources/inspector/aps_anonymous.go @@ -0,0 +1,45 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package inspector + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" +) + +func (p *arangoPlatformStoragesInspector) Anonymous(gvk schema.GroupVersionKind) (anonymous.Interface, bool) { + g := constants.ArangoPlatformStorageGKv1() + + if g.Kind == gvk.Kind && g.Group == gvk.Group { + switch gvk.Version { + case constants.ArangoPlatformStorageVersionV1Beta1, DefaultVersion: + if p.v1alpha1 == nil || p.v1alpha1.err != nil { + return nil, false + } + return anonymous.NewAnonymous[*platformApi.ArangoPlatformStorage](g, p.state.arangoPlatformStorages.v1alpha1, p.state.ArangoPlatformStorageModInterface().V1Alpha1()), true + } + } + + return nil, false +} diff --git a/pkg/deployment/resources/inspector/aps_gvk.go b/pkg/deployment/resources/inspector/aps_gvk.go new file mode 100644 index 000000000..ccc8b0cc8 --- /dev/null +++ b/pkg/deployment/resources/inspector/aps_gvk.go @@ -0,0 +1,35 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package inspector + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" +) + +func (p *arangoPlatformStoragesInspector) GroupKind() schema.GroupKind { + return constants.ArangoPlatformStorageGK() +} + +func (p *arangoPlatformStoragesInspector) GroupResource() schema.GroupResource { + return constants.ArangoPlatformStorageGR() +} diff --git a/pkg/deployment/resources/inspector/aps_mod.go b/pkg/deployment/resources/inspector/aps_mod.go new file mode 100644 index 000000000..d9950eb03 --- /dev/null +++ b/pkg/deployment/resources/inspector/aps_mod.go @@ -0,0 +1,46 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package inspector + +import ( + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" +) + +func (i *inspectorState) ArangoPlatformStorageModInterface() mods.ArangoPlatformStorageMods { + return arangoPlatformStorageMod{ + i: i, + } +} + +type arangoPlatformStorageMod struct { + i *inspectorState +} + +func (p arangoPlatformStorageMod) V1Alpha1() generic.ModStatusClient[*platformApi.ArangoPlatformStorage] { + return wrapMod[*platformApi.ArangoPlatformStorage](definitions.ArangoPlatformStorage, p.i.GetThrottles, p.clientv1beta1) +} + +func (p arangoPlatformStorageMod) clientv1beta1() generic.ModStatusClient[*platformApi.ArangoPlatformStorage] { + return p.i.Client().Arango().PlatformV1alpha1().ArangoPlatformStorages(p.i.Namespace()) +} diff --git a/pkg/deployment/resources/inspector/ar.go b/pkg/deployment/resources/inspector/ar.go index cdb37e4c5..595bf25d8 100644 --- a/pkg/deployment/resources/inspector/ar.go +++ b/pkg/deployment/resources/inspector/ar.go @@ -24,12 +24,12 @@ import ( "context" "time" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoroute" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,92 +49,18 @@ func (p arangoRoutesInspectorLoader) Component() definitions.Component { func (p arangoRoutesInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q arangoRoutesInspector - p.loadV1Alpha1(ctx, i, &q) + + q.v1alpha1 = newInspectorVersion[*networkingApi.ArangoRouteList, *networkingApi.ArangoRoute](ctx, + constants.ArangoRouteGRv1(), + constants.ArangoRouteGKv1(), + i.client.Arango().NetworkingV1alpha1().ArangoRoutes(i.namespace), + arangoroute.List()) + i.arangoRoutes = &q q.state = i q.last = time.Now() } -func (p arangoRoutesInspectorLoader) loadV1Alpha1(ctx context.Context, i *inspectorState, q *arangoRoutesInspector) { - var z arangoRoutesInspectorV1Alpha1 - - z.arangoRouteInspector = q - - z.arangoRoutes, z.err = p.getV1ArangoRoutes(ctx, i) - - q.v1alpha1 = &z -} - -func (p arangoRoutesInspectorLoader) getV1ArangoRoutes(ctx context.Context, i *inspectorState) (map[string]*networkingApi.ArangoRoute, error) { - objs, err := p.getV1ArangoRoutesList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*networkingApi.ArangoRoute, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p arangoRoutesInspectorLoader) getV1ArangoRoutesList(ctx context.Context, i *inspectorState) ([]*networkingApi.ArangoRoute, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Arango().NetworkingV1alpha1().ArangoRoutes(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*networkingApi.ArangoRoute, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1ArangoRoutesListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p arangoRoutesInspectorLoader) getV1ArangoRoutesListRequest(ctx context.Context, i *inspectorState, cont string) ([]networkingApi.ArangoRoute, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Arango().NetworkingV1alpha1().ArangoRoutes(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p arangoRoutesInspectorLoader) Verify(i *inspectorState) error { return nil } @@ -159,7 +85,7 @@ type arangoRoutesInspector struct { last time.Time - v1alpha1 *arangoRoutesInspectorV1Alpha1 + v1alpha1 *inspectorVersion[*networkingApi.ArangoRoute] } func (p *arangoRoutesInspector) LastRefresh() time.Time { @@ -190,3 +116,11 @@ func (p *arangoRoutesInspector) validate() error { return p.v1alpha1.validate() } + +func (p *arangoRoutesInspector) V1Alpha1() (generic.Inspector[*networkingApi.ArangoRoute], error) { + if p.v1alpha1.err != nil { + return nil, p.v1alpha1.err + } + + return p.v1alpha1, nil +} diff --git a/pkg/deployment/resources/inspector/ar_gvk.go b/pkg/deployment/resources/inspector/ar_gvk.go index a1bb4caed..17603fc61 100644 --- a/pkg/deployment/resources/inspector/ar_gvk.go +++ b/pkg/deployment/resources/inspector/ar_gvk.go @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *arangoRoutesInspectorV1Alpha1) GroupVersionKind() schema.GroupVersionKind { - return constants.ArangoRouteGKv1() -} - -func (p *arangoRoutesInspectorV1Alpha1) GroupVersionResource() schema.GroupVersionResource { - return constants.ArangoRouteGRv1() -} - func (p *arangoRoutesInspector) GroupKind() schema.GroupKind { return constants.ArangoRouteGK() } diff --git a/pkg/deployment/resources/inspector/ar_mod.go b/pkg/deployment/resources/inspector/ar_mod.go index eb9fd854f..217fb21a3 100644 --- a/pkg/deployment/resources/inspector/ar_mod.go +++ b/pkg/deployment/resources/inspector/ar_mod.go @@ -22,7 +22,6 @@ package inspector import ( networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" - arangoRoutev1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoroute/v1alpha1" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" @@ -38,7 +37,7 @@ type arangoRouteMod struct { i *inspectorState } -func (p arangoRouteMod) V1Alpha1() arangoRoutev1.ModInterface { +func (p arangoRouteMod) V1Alpha1() generic.ModStatusClient[*networkingApi.ArangoRoute] { return wrapMod[*networkingApi.ArangoRoute](definitions.ArangoRoute, p.i.GetThrottles, p.clientv1alpha1) } diff --git a/pkg/deployment/resources/inspector/ar_v1alpha1.go b/pkg/deployment/resources/inspector/ar_v1alpha1.go deleted file mode 100644 index 7d7c0d655..000000000 --- a/pkg/deployment/resources/inspector/ar_v1alpha1.go +++ /dev/null @@ -1,138 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" - "github.com/arangodb/kube-arangodb/pkg/util/errors" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoroute/v1alpha1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" -) - -func (p *arangoRoutesInspector) V1Alpha1() (ins.Inspector, error) { - if p.v1alpha1.err != nil { - return nil, p.v1alpha1.err - } - - return p.v1alpha1, nil -} - -type arangoRoutesInspectorV1Alpha1 struct { - arangoRouteInspector *arangoRoutesInspector - - arangoRoutes map[string]*networkingApi.ArangoRoute - err error -} - -func (p *arangoRoutesInspectorV1Alpha1) Filter(filters ...ins.Filter) []*networkingApi.ArangoRoute { - z := p.ListSimple() - - r := make([]*networkingApi.ArangoRoute, 0, len(z)) - - for _, o := range z { - if !ins.FilterObject(o, filters...) { - continue - } - - r = append(r, o) - } - - return r -} - -func (p *arangoRoutesInspectorV1Alpha1) validate() error { - if p == nil { - return errors.Errorf("ArangoRoutesV1AlphaInspector is nil") - } - - if p.arangoRouteInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.arangoRoutes == nil && p.err == nil { - return errors.Errorf("ArangoRoutes or err should be not nil") - } - - if p.arangoRoutes != nil && p.err != nil { - return errors.Errorf("ArangoRoutes or err cannot be not nil together") - } - - return nil -} - -func (p *arangoRoutesInspectorV1Alpha1) ListSimple() []*networkingApi.ArangoRoute { - var r []*networkingApi.ArangoRoute - for _, arangoRoute := range p.arangoRoutes { - r = append(r, arangoRoute) - } - - return r -} - -func (p *arangoRoutesInspectorV1Alpha1) GetSimple(name string) (*networkingApi.ArangoRoute, bool) { - arangoRoute, ok := p.arangoRoutes[name] - if !ok { - return nil, false - } - - return arangoRoute, true -} - -func (p *arangoRoutesInspectorV1Alpha1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, arangoRoute := range p.arangoRoutes { - if err := p.iterateArangoRoute(arangoRoute, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *arangoRoutesInspectorV1Alpha1) iterateArangoRoute(arangoRoute *networkingApi.ArangoRoute, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(arangoRoute) { - return nil - } - } - - return action(arangoRoute) -} - -func (p *arangoRoutesInspectorV1Alpha1) Read() ins.ReadInterface { - return p -} - -func (p *arangoRoutesInspectorV1Alpha1) Get(ctx context.Context, name string, opts meta.GetOptions) (*networkingApi.ArangoRoute, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.ArangoRouteGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/at.go b/pkg/deployment/resources/inspector/at.go index d07da7d77..f9c83662c 100644 --- a/pkg/deployment/resources/inspector/at.go +++ b/pkg/deployment/resources/inspector/at.go @@ -24,12 +24,12 @@ import ( "context" "time" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangotask" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,92 +49,18 @@ func (p arangoTasksInspectorLoader) Component() definitions.Component { func (p arangoTasksInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q arangoTasksInspector - p.loadV1(ctx, i, &q) + + q.v1 = newInspectorVersion[*api.ArangoTaskList, *api.ArangoTask](ctx, + constants.ArangoTaskGRv1(), + constants.ArangoTaskGKv1(), + i.client.Arango().DatabaseV1().ArangoTasks(i.namespace), + arangotask.List()) + i.arangoTasks = &q q.state = i q.last = time.Now() } -func (p arangoTasksInspectorLoader) loadV1(ctx context.Context, i *inspectorState, q *arangoTasksInspector) { - var z arangoTasksInspectorV1 - - z.arangoTaskInspector = q - - z.arangoTasks, z.err = p.getV1ArangoTasks(ctx, i) - - q.v1 = &z -} - -func (p arangoTasksInspectorLoader) getV1ArangoTasks(ctx context.Context, i *inspectorState) (map[string]*api.ArangoTask, error) { - objs, err := p.getV1ArangoTasksList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*api.ArangoTask, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p arangoTasksInspectorLoader) getV1ArangoTasksList(ctx context.Context, i *inspectorState) ([]*api.ArangoTask, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Arango().DatabaseV1().ArangoTasks(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*api.ArangoTask, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1ArangoTasksListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p arangoTasksInspectorLoader) getV1ArangoTasksListRequest(ctx context.Context, i *inspectorState, cont string) ([]api.ArangoTask, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Arango().DatabaseV1().ArangoTasks(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p arangoTasksInspectorLoader) Verify(i *inspectorState) error { return nil } @@ -159,7 +85,7 @@ type arangoTasksInspector struct { last time.Time - v1 *arangoTasksInspectorV1 + v1 *inspectorVersion[*api.ArangoTask] } func (p *arangoTasksInspector) LastRefresh() time.Time { @@ -190,3 +116,11 @@ func (p *arangoTasksInspector) validate() error { return p.v1.validate() } + +func (p *arangoTasksInspector) V1() (generic.Inspector[*api.ArangoTask], error) { + if p.v1.err != nil { + return nil, p.v1.err + } + + return p.v1, nil +} diff --git a/pkg/deployment/resources/inspector/at_gvk.go b/pkg/deployment/resources/inspector/at_gvk.go index fcaeace77..98c063b37 100644 --- a/pkg/deployment/resources/inspector/at_gvk.go +++ b/pkg/deployment/resources/inspector/at_gvk.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *arangoTasksInspectorV1) GroupVersionKind() schema.GroupVersionKind { - return constants.ArangoTaskGKv1() -} - -func (p *arangoTasksInspectorV1) GroupVersionResource() schema.GroupVersionResource { - return constants.ArangoTaskGRv1() -} - func (p *arangoTasksInspector) GroupKind() schema.GroupKind { return constants.ArangoTaskGK() } diff --git a/pkg/deployment/resources/inspector/at_mod.go b/pkg/deployment/resources/inspector/at_mod.go index 14b93990b..5909b32b2 100644 --- a/pkg/deployment/resources/inspector/at_mod.go +++ b/pkg/deployment/resources/inspector/at_mod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -22,7 +22,6 @@ package inspector import ( api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - arangotaskv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangotask/v1" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" @@ -38,7 +37,7 @@ type arangoTaskMod struct { i *inspectorState } -func (p arangoTaskMod) V1() arangotaskv1.ModInterface { +func (p arangoTaskMod) V1() generic.ModStatusClient[*api.ArangoTask] { return wrapMod[*api.ArangoTask](definitions.ArangoTask, p.i.GetThrottles, p.clientv1) } diff --git a/pkg/deployment/resources/inspector/at_v1.go b/pkg/deployment/resources/inspector/at_v1.go deleted file mode 100644 index 9a05d1dcd..000000000 --- a/pkg/deployment/resources/inspector/at_v1.go +++ /dev/null @@ -1,138 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - "github.com/arangodb/kube-arangodb/pkg/util/errors" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangotask/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" -) - -func (p *arangoTasksInspector) V1() (ins.Inspector, error) { - if p.v1.err != nil { - return nil, p.v1.err - } - - return p.v1, nil -} - -type arangoTasksInspectorV1 struct { - arangoTaskInspector *arangoTasksInspector - - arangoTasks map[string]*api.ArangoTask - err error -} - -func (p *arangoTasksInspectorV1) Filter(filters ...ins.Filter) []*api.ArangoTask { - z := p.ListSimple() - - r := make([]*api.ArangoTask, 0, len(z)) - - for _, o := range z { - if !ins.FilterObject(o, filters...) { - continue - } - - r = append(r, o) - } - - return r -} - -func (p *arangoTasksInspectorV1) validate() error { - if p == nil { - return errors.Errorf("ArangoTasksV1Inspector is nil") - } - - if p.arangoTaskInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.arangoTasks == nil && p.err == nil { - return errors.Errorf("ArangoTasks or err should be not nil") - } - - if p.arangoTasks != nil && p.err != nil { - return errors.Errorf("ArangoTasks or err cannot be not nil together") - } - - return nil -} - -func (p *arangoTasksInspectorV1) ListSimple() []*api.ArangoTask { - var r []*api.ArangoTask - for _, arangoTask := range p.arangoTasks { - r = append(r, arangoTask) - } - - return r -} - -func (p *arangoTasksInspectorV1) GetSimple(name string) (*api.ArangoTask, bool) { - arangoTask, ok := p.arangoTasks[name] - if !ok { - return nil, false - } - - return arangoTask, true -} - -func (p *arangoTasksInspectorV1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, arangoTask := range p.arangoTasks { - if err := p.iterateArangoTask(arangoTask, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *arangoTasksInspectorV1) iterateArangoTask(arangoTask *api.ArangoTask, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(arangoTask) { - return nil - } - } - - return action(arangoTask) -} - -func (p *arangoTasksInspectorV1) Read() ins.ReadInterface { - return p -} - -func (p *arangoTasksInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*api.ArangoTask, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.ArangoTaskGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/configmaps.go b/pkg/deployment/resources/inspector/configmaps.go index bc235e162..8f79a11ad 100644 --- a/pkg/deployment/resources/inspector/configmaps.go +++ b/pkg/deployment/resources/inspector/configmaps.go @@ -25,11 +25,12 @@ import ( "time" core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/configmap" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,92 +50,18 @@ func (p configMapsInspectorLoader) Component() definitions.Component { func (p configMapsInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q configMapsInspector - p.loadV1(ctx, i, &q) + + q.v1 = newInspectorVersion[*core.ConfigMapList, *core.ConfigMap](ctx, + constants.ConfigMapGRv1(), + constants.ConfigMapGKv1(), + i.client.Kubernetes().CoreV1().ConfigMaps(i.namespace), + configmap.List()) + i.configMaps = &q q.state = i q.last = time.Now() } -func (p configMapsInspectorLoader) loadV1(ctx context.Context, i *inspectorState, q *configMapsInspector) { - var z configMapsInspectorV1 - - z.configMapInspector = q - - z.configMaps, z.err = p.getV1ConfigMaps(ctx, i) - - q.v1 = &z -} - -func (p configMapsInspectorLoader) getV1ConfigMaps(ctx context.Context, i *inspectorState) (map[string]*core.ConfigMap, error) { - objs, err := p.getV1ConfigMapsList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*core.ConfigMap, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p configMapsInspectorLoader) getV1ConfigMapsList(ctx context.Context, i *inspectorState) ([]*core.ConfigMap, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().ConfigMaps(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*core.ConfigMap, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1ConfigMapsListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p configMapsInspectorLoader) getV1ConfigMapsListRequest(ctx context.Context, i *inspectorState, cont string) ([]core.ConfigMap, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().ConfigMaps(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p configMapsInspectorLoader) Verify(i *inspectorState) error { if err := i.configMaps.v1.err; err != nil { return err @@ -163,7 +90,7 @@ type configMapsInspector struct { last time.Time - v1 *configMapsInspectorV1 + v1 *inspectorVersion[*core.ConfigMap] } func (p *configMapsInspector) LastRefresh() time.Time { @@ -194,3 +121,7 @@ func (p *configMapsInspector) validate() error { return p.v1.validate() } + +func (p *configMapsInspector) V1() generic.Inspector[*core.ConfigMap] { + return p.v1 +} diff --git a/pkg/deployment/resources/inspector/configmaps_gvk.go b/pkg/deployment/resources/inspector/configmaps_gvk.go index 053a96549..33e253a22 100644 --- a/pkg/deployment/resources/inspector/configmaps_gvk.go +++ b/pkg/deployment/resources/inspector/configmaps_gvk.go @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *configMapsInspectorV1) GroupVersionKind() schema.GroupVersionKind { - return constants.ConfigMapGKv1() -} - -func (p *configMapsInspectorV1) GroupVersionResource() schema.GroupVersionResource { - return constants.ConfigMapGRv1() -} - func (p *configMapsInspector) GroupKind() schema.GroupKind { return constants.ConfigMapGK() } diff --git a/pkg/deployment/resources/inspector/configmaps_mod.go b/pkg/deployment/resources/inspector/configmaps_mod.go index 3791df565..2ceec955b 100644 --- a/pkg/deployment/resources/inspector/configmaps_mod.go +++ b/pkg/deployment/resources/inspector/configmaps_mod.go @@ -23,7 +23,6 @@ package inspector import ( core "k8s.io/api/core/v1" - configMapv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/configmap/v1" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" @@ -40,7 +39,7 @@ type configMapsMod struct { i *inspectorState } -func (p configMapsMod) V1() configMapv1.ModInterface { +func (p configMapsMod) V1() generic.ModClient[*core.ConfigMap] { return wrapMod[*core.ConfigMap](definitions.ConfigMap, p.i.GetThrottles, generic.WithModStatusGetter[*core.ConfigMap](constants.ConfigMapGKv1(), p.clientv1)) } diff --git a/pkg/deployment/resources/inspector/configmaps_v1.go b/pkg/deployment/resources/inspector/configmaps_v1.go deleted file mode 100644 index b7a2f90fb..000000000 --- a/pkg/deployment/resources/inspector/configmaps_v1.go +++ /dev/null @@ -1,118 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - core "k8s.io/api/core/v1" - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/errors" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/configmap/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" -) - -func (p *configMapsInspector) V1() ins.Inspector { - return p.v1 -} - -type configMapsInspectorV1 struct { - configMapInspector *configMapsInspector - - configMaps map[string]*core.ConfigMap - err error -} - -func (p *configMapsInspectorV1) validate() error { - if p == nil { - return errors.Errorf("ConfigMapsV1Inspector is nil") - } - - if p.configMapInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.configMaps == nil { - return errors.Errorf("ConfigMaps or err should be not nil") - } - - if p.err != nil { - return errors.Errorf("ConfigMaps or err cannot be not nil together") - } - - return nil -} - -func (p *configMapsInspectorV1) ListSimple() []*core.ConfigMap { - var r []*core.ConfigMap - for _, configMap := range p.configMaps { - r = append(r, configMap) - } - - return r -} - -func (p *configMapsInspectorV1) GetSimple(name string) (*core.ConfigMap, bool) { - configMap, ok := p.configMaps[name] - if !ok { - return nil, false - } - - return configMap, true -} - -func (p *configMapsInspectorV1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, configMap := range p.configMaps { - if err := p.iterateConfigMap(configMap, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *configMapsInspectorV1) iterateConfigMap(configMap *core.ConfigMap, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(configMap) { - return nil - } - } - - return action(configMap) -} - -func (p *configMapsInspectorV1) Read() ins.ReadInterface { - return p -} - -func (p *configMapsInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*core.ConfigMap, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.ConfigMapGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/endpoints.go b/pkg/deployment/resources/inspector/endpoints.go index ce02d6814..7ef635277 100644 --- a/pkg/deployment/resources/inspector/endpoints.go +++ b/pkg/deployment/resources/inspector/endpoints.go @@ -25,11 +25,12 @@ import ( "time" core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/endpoints" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,92 +50,18 @@ func (p endpointsInspectorLoader) Component() definitions.Component { func (p endpointsInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q endpointsInspector - p.loadV1(ctx, i, &q) + + q.v1 = newInspectorVersion[*core.EndpointsList, *core.Endpoints](ctx, + constants.EndpointsGRv1(), + constants.EndpointsGKv1(), + i.client.Kubernetes().CoreV1().Endpoints(i.namespace), + endpoints.List()) + i.endpoints = &q q.state = i q.last = time.Now() } -func (p endpointsInspectorLoader) loadV1(ctx context.Context, i *inspectorState, q *endpointsInspector) { - var z endpointsInspectorV1 - - z.endpointsInspector = q - - z.endpoints, z.err = p.getV1Endpoints(ctx, i) - - q.v1 = &z -} - -func (p endpointsInspectorLoader) getV1Endpoints(ctx context.Context, i *inspectorState) (map[string]*core.Endpoints, error) { - objs, err := p.getV1EndpointsList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*core.Endpoints, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p endpointsInspectorLoader) getV1EndpointsList(ctx context.Context, i *inspectorState) ([]*core.Endpoints, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().Endpoints(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*core.Endpoints, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1EndpointsListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p endpointsInspectorLoader) getV1EndpointsListRequest(ctx context.Context, i *inspectorState, cont string) ([]core.Endpoints, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().Endpoints(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p endpointsInspectorLoader) Verify(i *inspectorState) error { return nil } @@ -159,7 +86,7 @@ type endpointsInspector struct { last time.Time - v1 *endpointsInspectorV1 + v1 *inspectorVersion[*core.Endpoints] } func (p *endpointsInspector) LastRefresh() time.Time { @@ -190,3 +117,11 @@ func (p *endpointsInspector) validate() error { return p.v1.validate() } + +func (p *endpointsInspector) V1() (generic.Inspector[*core.Endpoints], error) { + if p.v1.err != nil { + return nil, p.v1.err + } + + return p.v1, nil +} diff --git a/pkg/deployment/resources/inspector/endpoints_gvk.go b/pkg/deployment/resources/inspector/endpoints_gvk.go index 0e9e2f3fa..eaaf57014 100644 --- a/pkg/deployment/resources/inspector/endpoints_gvk.go +++ b/pkg/deployment/resources/inspector/endpoints_gvk.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *endpointsInspectorV1) GroupVersionKind() schema.GroupVersionKind { - return constants.EndpointsGKv1() -} - -func (p *endpointsInspectorV1) GroupVersionResource() schema.GroupVersionResource { - return constants.EndpointsGRv1() -} - func (p *endpointsInspector) GroupKind() schema.GroupKind { return constants.EndpointsGK() } diff --git a/pkg/deployment/resources/inspector/endpoints_mod.go b/pkg/deployment/resources/inspector/endpoints_mod.go index e48fb6093..c806df5b4 100644 --- a/pkg/deployment/resources/inspector/endpoints_mod.go +++ b/pkg/deployment/resources/inspector/endpoints_mod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -25,7 +25,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" - endpointsv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/endpoints/v1" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" ) @@ -40,7 +39,7 @@ type endpointsMod struct { i *inspectorState } -func (p endpointsMod) V1() endpointsv1.ModInterface { +func (p endpointsMod) V1() generic.ModClient[*core.Endpoints] { return wrapMod[*core.Endpoints](definitions.Endpoints, p.i.GetThrottles, generic.WithModStatusGetter[*core.Endpoints](constants.EndpointsGKv1(), p.clientv1)) } diff --git a/pkg/deployment/resources/inspector/endpoints_v1.go b/pkg/deployment/resources/inspector/endpoints_v1.go deleted file mode 100644 index 9c502d715..000000000 --- a/pkg/deployment/resources/inspector/endpoints_v1.go +++ /dev/null @@ -1,138 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - core "k8s.io/api/core/v1" - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/endpoints/v1" -) - -func (p *endpointsInspector) V1() (ins.Inspector, error) { - if p.v1.err != nil { - return nil, p.v1.err - } - - return p.v1, nil -} - -type endpointsInspectorV1 struct { - endpointsInspector *endpointsInspector - - endpoints map[string]*core.Endpoints - err error -} - -func (p *endpointsInspectorV1) Filter(filters ...ins.Filter) []*core.Endpoints { - z := p.ListSimple() - - r := make([]*core.Endpoints, 0, len(z)) - - for _, o := range z { - if !ins.FilterObject(o, filters...) { - continue - } - - r = append(r, o) - } - - return r -} - -func (p *endpointsInspectorV1) validate() error { - if p == nil { - return errors.Errorf("EndpointsV1Inspector is nil") - } - - if p.endpointsInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.endpoints == nil && p.err == nil { - return errors.Errorf("Endpoints or err should be not nil") - } - - if p.endpoints != nil && p.err != nil { - return errors.Errorf("Endpoints or err cannot be not nil together") - } - - return nil -} - -func (p *endpointsInspectorV1) ListSimple() []*core.Endpoints { - var r []*core.Endpoints - for _, endpoints := range p.endpoints { - r = append(r, endpoints) - } - - return r -} - -func (p *endpointsInspectorV1) GetSimple(name string) (*core.Endpoints, bool) { - endpoints, ok := p.endpoints[name] - if !ok { - return nil, false - } - - return endpoints, true -} - -func (p *endpointsInspectorV1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, endpoints := range p.endpoints { - if err := p.iterateEndpoints(endpoints, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *endpointsInspectorV1) iterateEndpoints(endpoints *core.Endpoints, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(endpoints) { - return nil - } - } - - return action(endpoints) -} - -func (p *endpointsInspectorV1) Read() ins.ReadInterface { - return p -} - -func (p *endpointsInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*core.Endpoints, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.EndpointsGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/generic.go b/pkg/deployment/resources/inspector/generic.go new file mode 100644 index 000000000..449c26694 --- /dev/null +++ b/pkg/deployment/resources/inspector/generic.go @@ -0,0 +1,154 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package inspector + +import ( + "context" + + "github.com/pkg/errors" + apiErrors "k8s.io/apimachinery/pkg/api/errors" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/list" +) + +func List[L generic.ListContinue, S meta.Object](ctx context.Context, i generic.ListInterface[L], call generic.ExtractorList[L, S]) (map[string]S, error) { + return list.APIMap[L, S](ctx, i, meta.ListOptions{}, call) +} + +func newInspectorVersion[L generic.ListContinue, S meta.Object](ctx context.Context, + gvr schema.GroupVersionResource, + gvk schema.GroupVersionKind, + i generic.ListInterface[L], + call generic.ExtractorList[L, S]) *inspectorVersion[S] { + var r inspectorVersion[S] + + r.gvr = gvr + r.gvk = gvk + + r.items, r.err = List(ctx, i, call) + + return &r +} + +type inspectorVersion[S meta.Object] struct { + items map[string]S + gvr schema.GroupVersionResource + gvk schema.GroupVersionKind + err error +} + +func (p *inspectorVersion[S]) GroupVersionKind() schema.GroupVersionKind { + return p.gvk +} + +func (p *inspectorVersion[S]) GroupVersionResource() schema.GroupVersionResource { + return p.gvr +} + +func (p *inspectorVersion[S]) Filter(filters ...generic.Filter[S]) []S { + z := p.ListSimple() + + r := make([]S, 0, len(z)) + + for _, o := range z { + if !generic.FilterObject(o, filters...) { + continue + } + + r = append(r, o) + } + + return r +} + +func (p *inspectorVersion[S]) validate() error { + if p == nil { + return errors.Errorf("Inspector is nil") + } + + if p.items == nil && p.err == nil { + return errors.Errorf("Items or err should be not nil") + } + + if p.items != nil && p.err != nil { + return errors.Errorf("Items or err cannot be not nil together") + } + + return nil +} + +func (p *inspectorVersion[S]) ListSimple() []S { + var r []S + for _, item := range p.items { + r = append(r, item) + } + + return r +} + +func (p *inspectorVersion[S]) GetSimple(name string) (S, bool) { + item, ok := p.items[name] + if !ok { + return util.Default[S](), false + } + + return item, true +} + +func (p *inspectorVersion[S]) Iterate(action generic.Action[S], filters ...generic.Filter[S]) error { + for _, item := range p.items { + if err := p.iterateArangoProfile(item, action, filters...); err != nil { + return err + } + } + + return nil +} + +func (p *inspectorVersion[S]) iterateArangoProfile(item S, action generic.Action[S], filters ...generic.Filter[S]) error { + for _, f := range filters { + if f == nil { + continue + } + + if !f(item) { + return nil + } + } + + return action(item) +} + +func (p *inspectorVersion[S]) Read() generic.ReadClient[S] { + return p +} + +func (p *inspectorVersion[S]) Get(ctx context.Context, name string, opts meta.GetOptions) (S, error) { + if s, ok := p.GetSimple(name); !ok { + return util.Default[S](), apiErrors.NewNotFound(p.gvr.GroupResource(), name) + } else { + return s, nil + } +} diff --git a/pkg/deployment/resources/inspector/inspector.go b/pkg/deployment/resources/inspector/inspector.go index 1a8d7a434..86c47548e 100644 --- a/pkg/deployment/resources/inspector/inspector.go +++ b/pkg/deployment/resources/inspector/inspector.go @@ -42,6 +42,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoclustersynchronization" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangomember" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoplatformstorage" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoprofile" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoroute" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangotask" @@ -139,6 +140,7 @@ type inspectorState struct { arangoMembers *arangoMembersInspector arangoTasks *arangoTasksInspector arangoProfiles *arangoProfilesInspector + arangoPlatformStorages *arangoPlatformStoragesInspector arangoRoutes *arangoRoutesInspector arangoClusterSynchronizations *arangoClusterSynchronizationsInspector endpoints *endpointsInspector @@ -174,10 +176,14 @@ func (i *inspectorState) RegisterInformers(k8s informers.SharedInformerFactory, arango.Database().V1().ArangoTasks().Informer().AddEventHandler(i.eventHandler(definitions.ArangoTask)) } - if _, err := i.ArangoProfiles().V1Beta1(); err == nil { + if _, err := i.ArangoProfile().V1Beta1(); err == nil { arango.Scheduler().V1beta1().ArangoProfiles().Informer().AddEventHandler(i.eventHandler(definitions.ArangoProfile)) } + if _, err := i.ArangoPlatformStorage().V1Alpha1(); err == nil { + arango.Platform().V1alpha1().ArangoPlatformStorages().Informer().AddEventHandler(i.eventHandler(definitions.ArangoPlatformStorage)) + } + if _, err := i.ArangoRoute().V1Alpha1(); err == nil { arango.Networking().V1alpha1().ArangoRoutes().Informer().AddEventHandler(i.eventHandler(definitions.ArangoRoute)) } @@ -346,8 +352,8 @@ func (i *inspectorState) ArangoProfile() arangoprofile.Definition { return i.arangoProfiles } -func (i *inspectorState) ArangoProfiles() arangoprofile.Definition { - return i.arangoProfiles +func (i *inspectorState) ArangoPlatformStorage() arangoplatformstorage.Definition { + return i.arangoPlatformStorages } func (i *inspectorState) Refresh(ctx context.Context) error { @@ -509,6 +515,10 @@ func (i *inspectorState) validate() error { return err } + if err := i.arangoPlatformStorages.validate(); err != nil { + return err + } + if err := i.arangoTasks.validate(); err != nil { return err } @@ -543,6 +553,7 @@ func (i *inspectorState) copyCore() *inspectorState { arangoTasks: i.arangoTasks, arangoRoutes: i.arangoRoutes, arangoProfiles: i.arangoProfiles, + arangoPlatformStorages: i.arangoPlatformStorages, arangoClusterSynchronizations: i.arangoClusterSynchronizations, throttles: i.throttles.Copy(), versionInfo: i.versionInfo, diff --git a/pkg/deployment/resources/inspector/inspector_test.go b/pkg/deployment/resources/inspector/inspector_test.go index 40b057b76..54610c454 100644 --- a/pkg/deployment/resources/inspector/inspector_test.go +++ b/pkg/deployment/resources/inspector/inspector_test.go @@ -142,7 +142,7 @@ func getAllTypes() []string { func Test_Inspector_RefreshMatrix(t *testing.T) { c := kclient.NewFakeClient() - tc := throttle.NewThrottleComponents(time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour) + tc := throttle.NewThrottleComponents(time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour) i := NewInspector(tc, c, "test", "test") @@ -302,7 +302,7 @@ func Test_Inspector_Load(t *testing.T) { func Test_Inspector_Invalidate(t *testing.T) { c := kclient.NewFakeClient() - tc := throttle.NewThrottleComponents(time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour) + tc := throttle.NewThrottleComponents(time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour) i := NewInspector(tc, c, "test", "test") diff --git a/pkg/deployment/resources/inspector/nodes.go b/pkg/deployment/resources/inspector/nodes.go index 6da09e025..7e973ed00 100644 --- a/pkg/deployment/resources/inspector/nodes.go +++ b/pkg/deployment/resources/inspector/nodes.go @@ -25,11 +25,12 @@ import ( "time" core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/node" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,92 +50,18 @@ func (p nodesInspectorLoader) Component() definitions.Component { func (p nodesInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q nodesInspector - p.loadV1(ctx, i, &q) + + q.v1 = newInspectorVersion[*core.NodeList, *core.Node](ctx, + constants.NodeGRv1(), + constants.NodeGKv1(), + i.client.Kubernetes().CoreV1().Nodes(), + node.List()) + i.nodes = &q q.state = i q.last = time.Now() } -func (p nodesInspectorLoader) loadV1(ctx context.Context, i *inspectorState, q *nodesInspector) { - var z nodesInspectorV1 - - z.nodeInspector = q - - z.nodes, z.err = p.getV1Nodes(ctx, i) - - q.v1 = &z -} - -func (p nodesInspectorLoader) getV1Nodes(ctx context.Context, i *inspectorState) (map[string]*core.Node, error) { - objs, err := p.getV1NodesList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*core.Node, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p nodesInspectorLoader) getV1NodesList(ctx context.Context, i *inspectorState) ([]*core.Node, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().Nodes().List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*core.Node, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1NodesListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p nodesInspectorLoader) getV1NodesListRequest(ctx context.Context, i *inspectorState, cont string) ([]core.Node, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().Nodes().List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p nodesInspectorLoader) Verify(i *inspectorState) error { return nil } @@ -159,7 +86,7 @@ type nodesInspector struct { last time.Time - v1 *nodesInspectorV1 + v1 *inspectorVersion[*core.Node] } func (p *nodesInspector) LastRefresh() time.Time { @@ -190,3 +117,11 @@ func (p *nodesInspector) validate() error { return p.v1.validate() } + +func (p *nodesInspector) V1() (generic.Inspector[*core.Node], error) { + if p.v1.err != nil { + return nil, p.v1.err + } + + return p.v1, nil +} diff --git a/pkg/deployment/resources/inspector/nodes_gvk.go b/pkg/deployment/resources/inspector/nodes_gvk.go index e300845dc..5fae37ad3 100644 --- a/pkg/deployment/resources/inspector/nodes_gvk.go +++ b/pkg/deployment/resources/inspector/nodes_gvk.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *nodesInspectorV1) GroupVersionKind() schema.GroupVersionKind { - return constants.NodeGKv1() -} - -func (p *nodesInspectorV1) GroupVersionResource() schema.GroupVersionResource { - return constants.NodeGRv1() -} - func (p *nodesInspector) GroupKind() schema.GroupKind { return constants.NodeGK() } diff --git a/pkg/deployment/resources/inspector/nodes_v1.go b/pkg/deployment/resources/inspector/nodes_v1.go deleted file mode 100644 index 5fac5a7b0..000000000 --- a/pkg/deployment/resources/inspector/nodes_v1.go +++ /dev/null @@ -1,122 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - core "k8s.io/api/core/v1" - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/node/v1" -) - -func (p *nodesInspector) V1() (ins.Inspector, error) { - if p.v1.err != nil { - return nil, p.v1.err - } - - return p.v1, nil -} - -type nodesInspectorV1 struct { - nodeInspector *nodesInspector - - nodes map[string]*core.Node - err error -} - -func (p *nodesInspectorV1) validate() error { - if p == nil { - return errors.Errorf("NodesV1Inspector is nil") - } - - if p.nodeInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.nodes == nil && p.err == nil { - return errors.Errorf("Nodes or err should be not nil") - } - - if p.nodes != nil && p.err != nil { - return errors.Errorf("Nodes or err cannot be not nil together") - } - - return nil -} - -func (p *nodesInspectorV1) ListSimple() []*core.Node { - var r []*core.Node - for _, node := range p.nodes { - r = append(r, node) - } - - return r -} - -func (p *nodesInspectorV1) GetSimple(name string) (*core.Node, bool) { - node, ok := p.nodes[name] - if !ok { - return nil, false - } - - return node, true -} - -func (p *nodesInspectorV1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, node := range p.nodes { - if err := p.iterateNode(node, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *nodesInspectorV1) iterateNode(node *core.Node, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(node) { - return nil - } - } - - return action(node) -} - -func (p *nodesInspectorV1) Read() ins.ReadInterface { - return p -} - -func (p *nodesInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*core.Node, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.NodeGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/pdbs.go b/pkg/deployment/resources/inspector/pdbs.go index ac1b7c8ec..f80b7dba2 100644 --- a/pkg/deployment/resources/inspector/pdbs.go +++ b/pkg/deployment/resources/inspector/pdbs.go @@ -25,11 +25,12 @@ import ( "time" policy "k8s.io/api/policy/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/poddisruptionbudget" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -51,11 +52,14 @@ func (p podDisruptionBudgetsInspectorLoader) Load(ctx context.Context, i *inspec var q podDisruptionBudgetsInspector if i.versionInfo.CompareTo("1.21") >= 1 { - p.loadV1(ctx, i, &q) + q.v1 = newInspectorVersion[*policy.PodDisruptionBudgetList, *policy.PodDisruptionBudget](ctx, + constants.PodDisruptionBudgetGRv1(), + constants.PodDisruptionBudgetGKv1(), + i.client.Kubernetes().PolicyV1().PodDisruptionBudgets(i.namespace), + poddisruptionbudget.List()) } else { - q.v1 = &podDisruptionBudgetsInspectorV1{ - podDisruptionBudgetInspector: &q, - err: newMinK8SVersion("1.20"), + q.v1 = &inspectorVersion[*policy.PodDisruptionBudget]{ + err: newMinK8SVersion("1.20"), } } @@ -64,86 +68,6 @@ func (p podDisruptionBudgetsInspectorLoader) Load(ctx context.Context, i *inspec q.last = time.Now() } -func (p podDisruptionBudgetsInspectorLoader) loadV1(ctx context.Context, i *inspectorState, q *podDisruptionBudgetsInspector) { - var z podDisruptionBudgetsInspectorV1 - - z.podDisruptionBudgetInspector = q - - z.podDisruptionBudgets, z.err = p.getV1PodDisruptionBudgets(ctx, i) - - q.v1 = &z -} - -func (p podDisruptionBudgetsInspectorLoader) getV1PodDisruptionBudgets(ctx context.Context, i *inspectorState) (map[string]*policy.PodDisruptionBudget, error) { - objs, err := p.getV1PodDisruptionBudgetsList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*policy.PodDisruptionBudget, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p podDisruptionBudgetsInspectorLoader) getV1PodDisruptionBudgetsList(ctx context.Context, i *inspectorState) ([]*policy.PodDisruptionBudget, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().PolicyV1().PodDisruptionBudgets(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*policy.PodDisruptionBudget, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1PodDisruptionBudgetsListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p podDisruptionBudgetsInspectorLoader) getV1PodDisruptionBudgetsListRequest(ctx context.Context, i *inspectorState, cont string) ([]policy.PodDisruptionBudget, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().PolicyV1().PodDisruptionBudgets(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p podDisruptionBudgetsInspectorLoader) Verify(i *inspectorState) error { return nil } @@ -168,7 +92,7 @@ type podDisruptionBudgetsInspector struct { last time.Time - v1 *podDisruptionBudgetsInspectorV1 + v1 *inspectorVersion[*policy.PodDisruptionBudget] } func (p *podDisruptionBudgetsInspector) LastRefresh() time.Time { @@ -205,3 +129,11 @@ func (p *podDisruptionBudgetsInspector) validate() error { return nil } + +func (p *podDisruptionBudgetsInspector) V1() (generic.Inspector[*policy.PodDisruptionBudget], error) { + if p.v1.err != nil { + return nil, p.v1.err + } + + return p.v1, nil +} diff --git a/pkg/deployment/resources/inspector/pdbs_gvk.go b/pkg/deployment/resources/inspector/pdbs_gvk.go index 9031b9392..9511ffaa0 100644 --- a/pkg/deployment/resources/inspector/pdbs_gvk.go +++ b/pkg/deployment/resources/inspector/pdbs_gvk.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *podDisruptionBudgetsInspectorV1) GroupVersionKind() schema.GroupVersionKind { - return constants.PodDisruptionBudgetGKv1() -} - -func (p *podDisruptionBudgetsInspectorV1) GroupVersionResource() schema.GroupVersionResource { - return constants.PodDisruptionBudgetGRv1() -} - func (p *podDisruptionBudgetsInspector) GroupKind() schema.GroupKind { return constants.PodDisruptionBudgetGK() } diff --git a/pkg/deployment/resources/inspector/pdbs_mod.go b/pkg/deployment/resources/inspector/pdbs_mod.go index 9fc8d0c57..bceb587c8 100644 --- a/pkg/deployment/resources/inspector/pdbs_mod.go +++ b/pkg/deployment/resources/inspector/pdbs_mod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,7 +27,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" - policyv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/poddisruptionbudget/v1" ) func (i *inspectorState) PodDisruptionBudgetsModInterface() mods.PodDisruptionBudgetsMods { @@ -40,7 +39,7 @@ type podDisruptionBudgetsMod struct { i *inspectorState } -func (p podDisruptionBudgetsMod) V1() policyv1.ModInterface { +func (p podDisruptionBudgetsMod) V1() generic.ModClient[*policy.PodDisruptionBudget] { return wrapMod[*policy.PodDisruptionBudget](definitions.PodDisruptionBudget, p.i.GetThrottles, generic.WithModStatusGetter[*policy.PodDisruptionBudget](constants.PodDisruptionBudgetGKv1(), p.clientv1)) } diff --git a/pkg/deployment/resources/inspector/pdbs_v1.go b/pkg/deployment/resources/inspector/pdbs_v1.go deleted file mode 100644 index 5a17bfd63..000000000 --- a/pkg/deployment/resources/inspector/pdbs_v1.go +++ /dev/null @@ -1,122 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - policy "k8s.io/api/policy/v1" - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/poddisruptionbudget/v1" -) - -func (p *podDisruptionBudgetsInspector) V1() (ins.Inspector, error) { - if p.v1.err != nil { - return nil, p.v1.err - } - - return p.v1, nil -} - -type podDisruptionBudgetsInspectorV1 struct { - podDisruptionBudgetInspector *podDisruptionBudgetsInspector - - podDisruptionBudgets map[string]*policy.PodDisruptionBudget - err error -} - -func (p *podDisruptionBudgetsInspectorV1) validate() error { - if p == nil { - return errors.Errorf("PodDisruptionBudgetsV1Inspector is nil") - } - - if p.podDisruptionBudgetInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.podDisruptionBudgets == nil && p.err == nil { - return errors.Errorf("PodDisruptionBudgets or err should be not nil") - } - - if p.podDisruptionBudgets != nil && p.err != nil { - return errors.Errorf("PodDisruptionBudgets or err cannot be not nil together") - } - - return nil -} - -func (p *podDisruptionBudgetsInspectorV1) PodDisruptionBudgets() []*policy.PodDisruptionBudget { - var r []*policy.PodDisruptionBudget - for _, podDisruptionBudget := range p.podDisruptionBudgets { - r = append(r, podDisruptionBudget) - } - - return r -} - -func (p *podDisruptionBudgetsInspectorV1) GetSimple(name string) (*policy.PodDisruptionBudget, bool) { - podDisruptionBudget, ok := p.podDisruptionBudgets[name] - if !ok { - return nil, false - } - - return podDisruptionBudget, true -} - -func (p *podDisruptionBudgetsInspectorV1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, podDisruptionBudget := range p.podDisruptionBudgets { - if err := p.iteratePodDisruptionBudget(podDisruptionBudget, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *podDisruptionBudgetsInspectorV1) iteratePodDisruptionBudget(podDisruptionBudget *policy.PodDisruptionBudget, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(podDisruptionBudget) { - return nil - } - } - - return action(podDisruptionBudget) -} - -func (p *podDisruptionBudgetsInspectorV1) Read() ins.ReadInterface { - return p -} - -func (p *podDisruptionBudgetsInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*policy.PodDisruptionBudget, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.PodDisruptionBudgetGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/pdbs_version_test.go b/pkg/deployment/resources/inspector/pdbs_version_test.go index 01e03d309..80320ce89 100644 --- a/pkg/deployment/resources/inspector/pdbs_version_test.go +++ b/pkg/deployment/resources/inspector/pdbs_version_test.go @@ -52,7 +52,7 @@ func Test_PDB_Versions(t *testing.T) { GitVersion: v, }) - tc := throttle.NewThrottleComponents(time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour) + tc := throttle.NewThrottleComponents(time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour) i := NewInspector(tc, c, "test", "test") require.NoError(t, i.Refresh(context.Background())) diff --git a/pkg/deployment/resources/inspector/pods.go b/pkg/deployment/resources/inspector/pods.go index af3dc4092..a16908a6b 100644 --- a/pkg/deployment/resources/inspector/pods.go +++ b/pkg/deployment/resources/inspector/pods.go @@ -25,11 +25,12 @@ import ( "time" core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/pod" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,92 +50,18 @@ func (p podsInspectorLoader) Component() definitions.Component { func (p podsInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q podsInspector - p.loadV1(ctx, i, &q) + + q.v1 = newInspectorVersion[*core.PodList, *core.Pod](ctx, + constants.PodGRv1(), + constants.PodGKv1(), + i.client.Kubernetes().CoreV1().Pods(i.namespace), + pod.List()) + i.pods = &q q.state = i q.last = time.Now() } -func (p podsInspectorLoader) loadV1(ctx context.Context, i *inspectorState, q *podsInspector) { - var z podsInspectorV1 - - z.podInspector = q - - z.pods, z.err = p.getV1Pods(ctx, i) - - q.v1 = &z -} - -func (p podsInspectorLoader) getV1Pods(ctx context.Context, i *inspectorState) (map[string]*core.Pod, error) { - objs, err := p.getV1PodsList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*core.Pod, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p podsInspectorLoader) getV1PodsList(ctx context.Context, i *inspectorState) ([]*core.Pod, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().Pods(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*core.Pod, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1PodsListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p podsInspectorLoader) getV1PodsListRequest(ctx context.Context, i *inspectorState, cont string) ([]core.Pod, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().Pods(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p podsInspectorLoader) Verify(i *inspectorState) error { if err := i.pods.v1.err; err != nil { return err @@ -163,7 +90,7 @@ type podsInspector struct { last time.Time - v1 *podsInspectorV1 + v1 *inspectorVersion[*core.Pod] } func (p *podsInspector) LastRefresh() time.Time { @@ -194,3 +121,8 @@ func (p *podsInspector) validate() error { return p.v1.validate() } + +func (p *podsInspector) V1() generic.Inspector[*core.Pod] { + + return p.v1 +} diff --git a/pkg/deployment/resources/inspector/pods_gvk.go b/pkg/deployment/resources/inspector/pods_gvk.go index dc953e927..7e54a7a8e 100644 --- a/pkg/deployment/resources/inspector/pods_gvk.go +++ b/pkg/deployment/resources/inspector/pods_gvk.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *podsInspectorV1) GroupVersionKind() schema.GroupVersionKind { - return constants.PodGKv1() -} - -func (p *podsInspectorV1) GroupVersionResource() schema.GroupVersionResource { - return constants.PodGRv1() -} - func (p *podsInspector) GroupKind() schema.GroupKind { return constants.PodGK() } diff --git a/pkg/deployment/resources/inspector/pods_mod.go b/pkg/deployment/resources/inspector/pods_mod.go index 1262e9221..0d95c4543 100644 --- a/pkg/deployment/resources/inspector/pods_mod.go +++ b/pkg/deployment/resources/inspector/pods_mod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,7 +27,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" - podv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/pod/v1" ) func (i *inspectorState) PodsModInterface() mods.PodsMods { @@ -40,7 +39,7 @@ type podsMod struct { i *inspectorState } -func (p podsMod) V1() podv1.ModInterface { +func (p podsMod) V1() generic.ModClient[*core.Pod] { return wrapMod[*core.Pod](definitions.Pod, p.i.GetThrottles, generic.WithModStatusGetter[*core.Pod](constants.PodGKv1(), p.clientv1)) } diff --git a/pkg/deployment/resources/inspector/pods_v1.go b/pkg/deployment/resources/inspector/pods_v1.go deleted file mode 100644 index 23c562bfa..000000000 --- a/pkg/deployment/resources/inspector/pods_v1.go +++ /dev/null @@ -1,119 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - core "k8s.io/api/core/v1" - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/pod/v1" -) - -func (p *podsInspector) V1() ins.Inspector { - - return p.v1 -} - -type podsInspectorV1 struct { - podInspector *podsInspector - - pods map[string]*core.Pod - err error -} - -func (p *podsInspectorV1) validate() error { - if p == nil { - return errors.Errorf("PodsV1Inspector is nil") - } - - if p.podInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.pods == nil { - return errors.Errorf("Pods or err should be not nil") - } - - if p.err != nil { - return errors.Errorf("Pods or err cannot be not nil together") - } - - return nil -} - -func (p *podsInspectorV1) ListSimple() []*core.Pod { - var r []*core.Pod - for _, pod := range p.pods { - r = append(r, pod) - } - - return r -} - -func (p *podsInspectorV1) GetSimple(name string) (*core.Pod, bool) { - pod, ok := p.pods[name] - if !ok { - return nil, false - } - - return pod, true -} - -func (p *podsInspectorV1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, pod := range p.pods { - if err := p.iteratePod(pod, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *podsInspectorV1) iteratePod(pod *core.Pod, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(pod) { - return nil - } - } - - return action(pod) -} - -func (p *podsInspectorV1) Read() ins.ReadInterface { - return p -} - -func (p *podsInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*core.Pod, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.PodGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/pvcs.go b/pkg/deployment/resources/inspector/pvcs.go index 9ecdc11f8..eb9a4e1d3 100644 --- a/pkg/deployment/resources/inspector/pvcs.go +++ b/pkg/deployment/resources/inspector/pvcs.go @@ -25,11 +25,12 @@ import ( "time" core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolumeclaim" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,92 +50,18 @@ func (p persistentVolumeClaimsInspectorLoader) Component() definitions.Component func (p persistentVolumeClaimsInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q persistentVolumeClaimsInspector - p.loadV1(ctx, i, &q) + + q.v1 = newInspectorVersion[*core.PersistentVolumeClaimList, *core.PersistentVolumeClaim](ctx, + constants.PersistentVolumeClaimGRv1(), + constants.PersistentVolumeClaimGKv1(), + i.client.Kubernetes().CoreV1().PersistentVolumeClaims(i.namespace), + persistentvolumeclaim.List()) + i.persistentVolumeClaims = &q q.state = i q.last = time.Now() } -func (p persistentVolumeClaimsInspectorLoader) loadV1(ctx context.Context, i *inspectorState, q *persistentVolumeClaimsInspector) { - var z persistentVolumeClaimsInspectorV1 - - z.persistentVolumeClaimInspector = q - - z.persistentVolumeClaims, z.err = p.getV1PersistentVolumeClaims(ctx, i) - - q.v1 = &z -} - -func (p persistentVolumeClaimsInspectorLoader) getV1PersistentVolumeClaims(ctx context.Context, i *inspectorState) (map[string]*core.PersistentVolumeClaim, error) { - objs, err := p.getV1PersistentVolumeClaimsList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*core.PersistentVolumeClaim, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p persistentVolumeClaimsInspectorLoader) getV1PersistentVolumeClaimsList(ctx context.Context, i *inspectorState) ([]*core.PersistentVolumeClaim, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().PersistentVolumeClaims(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*core.PersistentVolumeClaim, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1PersistentVolumeClaimsListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p persistentVolumeClaimsInspectorLoader) getV1PersistentVolumeClaimsListRequest(ctx context.Context, i *inspectorState, cont string) ([]core.PersistentVolumeClaim, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().PersistentVolumeClaims(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p persistentVolumeClaimsInspectorLoader) Verify(i *inspectorState) error { if err := i.persistentVolumeClaims.v1.err; err != nil { return err @@ -163,7 +90,7 @@ type persistentVolumeClaimsInspector struct { last time.Time - v1 *persistentVolumeClaimsInspectorV1 + v1 *inspectorVersion[*core.PersistentVolumeClaim] } func (p *persistentVolumeClaimsInspector) LastRefresh() time.Time { @@ -194,3 +121,7 @@ func (p *persistentVolumeClaimsInspector) validate() error { return p.v1.validate() } + +func (p *persistentVolumeClaimsInspector) V1() generic.Inspector[*core.PersistentVolumeClaim] { + return p.v1 +} diff --git a/pkg/deployment/resources/inspector/pvcs_gvk.go b/pkg/deployment/resources/inspector/pvcs_gvk.go index b4095fa26..c1096783a 100644 --- a/pkg/deployment/resources/inspector/pvcs_gvk.go +++ b/pkg/deployment/resources/inspector/pvcs_gvk.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *persistentVolumeClaimsInspectorV1) GroupVersionKind() schema.GroupVersionKind { - return constants.PersistentVolumeClaimGKv1() -} - -func (p *persistentVolumeClaimsInspectorV1) GroupVersionResource() schema.GroupVersionResource { - return constants.PersistentVolumeClaimGRv1() -} - func (p *persistentVolumeClaimsInspector) GroupKind() schema.GroupKind { return constants.PersistentVolumeClaimGK() } diff --git a/pkg/deployment/resources/inspector/pvcs_mod.go b/pkg/deployment/resources/inspector/pvcs_mod.go index 95dcce9c3..05a49f358 100644 --- a/pkg/deployment/resources/inspector/pvcs_mod.go +++ b/pkg/deployment/resources/inspector/pvcs_mod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,7 +27,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" - persistentvolumeclaimv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1" ) func (i *inspectorState) PersistentVolumeClaimsModInterface() mods.PersistentVolumeClaimsMods { @@ -40,7 +39,7 @@ type persistentVolumeClaimsMod struct { i *inspectorState } -func (p persistentVolumeClaimsMod) V1() persistentvolumeclaimv1.ModInterface { +func (p persistentVolumeClaimsMod) V1() generic.ModClient[*core.PersistentVolumeClaim] { return wrapMod[*core.PersistentVolumeClaim](definitions.PersistentVolumeClaim, p.i.GetThrottles, generic.WithModStatusGetter[*core.PersistentVolumeClaim](constants.PersistentVolumeClaimGKv1(), p.clientv1)) } diff --git a/pkg/deployment/resources/inspector/pvcs_v1.go b/pkg/deployment/resources/inspector/pvcs_v1.go deleted file mode 100644 index e375a31ca..000000000 --- a/pkg/deployment/resources/inspector/pvcs_v1.go +++ /dev/null @@ -1,118 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - core "k8s.io/api/core/v1" - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1" -) - -func (p *persistentVolumeClaimsInspector) V1() ins.Inspector { - return p.v1 -} - -type persistentVolumeClaimsInspectorV1 struct { - persistentVolumeClaimInspector *persistentVolumeClaimsInspector - - persistentVolumeClaims map[string]*core.PersistentVolumeClaim - err error -} - -func (p *persistentVolumeClaimsInspectorV1) validate() error { - if p == nil { - return errors.Errorf("PersistentVolumeClaimsV1Inspector is nil") - } - - if p.persistentVolumeClaimInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.persistentVolumeClaims == nil { - return errors.Errorf("PersistentVolumeClaims or err should be not nil") - } - - if p.err != nil { - return errors.Errorf("PersistentVolumeClaims or err cannot be not nil together") - } - - return nil -} - -func (p *persistentVolumeClaimsInspectorV1) ListSimple() []*core.PersistentVolumeClaim { - var r []*core.PersistentVolumeClaim - for _, persistentVolumeClaim := range p.persistentVolumeClaims { - r = append(r, persistentVolumeClaim) - } - - return r -} - -func (p *persistentVolumeClaimsInspectorV1) GetSimple(name string) (*core.PersistentVolumeClaim, bool) { - persistentVolumeClaim, ok := p.persistentVolumeClaims[name] - if !ok { - return nil, false - } - - return persistentVolumeClaim, true -} - -func (p *persistentVolumeClaimsInspectorV1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, persistentVolumeClaim := range p.persistentVolumeClaims { - if err := p.iteratePersistentVolumeClaim(persistentVolumeClaim, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *persistentVolumeClaimsInspectorV1) iteratePersistentVolumeClaim(persistentVolumeClaim *core.PersistentVolumeClaim, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(persistentVolumeClaim) { - return nil - } - } - - return action(persistentVolumeClaim) -} - -func (p *persistentVolumeClaimsInspectorV1) Read() ins.ReadInterface { - return p -} - -func (p *persistentVolumeClaimsInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*core.PersistentVolumeClaim, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.PersistentVolumeClaimGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/pvs.go b/pkg/deployment/resources/inspector/pvs.go index 2ef931ea8..b73c24b1b 100644 --- a/pkg/deployment/resources/inspector/pvs.go +++ b/pkg/deployment/resources/inspector/pvs.go @@ -25,11 +25,12 @@ import ( "time" core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolume" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,92 +50,18 @@ func (p persistentVolumesInspectorLoader) Component() definitions.Component { func (p persistentVolumesInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q persistentVolumesInspector - p.loadV1(ctx, i, &q) + + q.v1 = newInspectorVersion[*core.PersistentVolumeList, *core.PersistentVolume](ctx, + constants.PersistentVolumeGRv1(), + constants.PersistentVolumeGKv1(), + i.client.Kubernetes().CoreV1().PersistentVolumes(), + persistentvolume.List()) + i.persistentVolumes = &q q.state = i q.last = time.Now() } -func (p persistentVolumesInspectorLoader) loadV1(ctx context.Context, i *inspectorState, q *persistentVolumesInspector) { - var z persistentVolumesInspectorV1 - - z.persistentVolumeInspector = q - - z.persistentVolumes, z.err = p.getV1PersistentVolumes(ctx, i) - - q.v1 = &z -} - -func (p persistentVolumesInspectorLoader) getV1PersistentVolumes(ctx context.Context, i *inspectorState) (map[string]*core.PersistentVolume, error) { - objs, err := p.getV1PersistentVolumesList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*core.PersistentVolume, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p persistentVolumesInspectorLoader) getV1PersistentVolumesList(ctx context.Context, i *inspectorState) ([]*core.PersistentVolume, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().PersistentVolumes().List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*core.PersistentVolume, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1PersistentVolumesListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p persistentVolumesInspectorLoader) getV1PersistentVolumesListRequest(ctx context.Context, i *inspectorState, cont string) ([]core.PersistentVolume, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().PersistentVolumes().List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p persistentVolumesInspectorLoader) Verify(i *inspectorState) error { return nil } @@ -159,7 +86,7 @@ type persistentVolumesInspector struct { last time.Time - v1 *persistentVolumesInspectorV1 + v1 *inspectorVersion[*core.PersistentVolume] } func (p *persistentVolumesInspector) LastRefresh() time.Time { @@ -190,3 +117,11 @@ func (p *persistentVolumesInspector) validate() error { return p.v1.validate() } + +func (p *persistentVolumesInspector) V1() (generic.Inspector[*core.PersistentVolume], error) { + if p.v1.err != nil { + return nil, p.v1.err + } + + return p.v1, nil +} diff --git a/pkg/deployment/resources/inspector/pvs_gvk.go b/pkg/deployment/resources/inspector/pvs_gvk.go index 055c622fa..3d7d1c856 100644 --- a/pkg/deployment/resources/inspector/pvs_gvk.go +++ b/pkg/deployment/resources/inspector/pvs_gvk.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *persistentVolumesInspectorV1) GroupVersionKind() schema.GroupVersionKind { - return constants.PersistentVolumeGKv1() -} - -func (p *persistentVolumesInspectorV1) GroupVersionResource() schema.GroupVersionResource { - return constants.PersistentVolumeGRv1() -} - func (p *persistentVolumesInspector) GroupKind() schema.GroupKind { return constants.PersistentVolumeGK() } diff --git a/pkg/deployment/resources/inspector/pvs_v1.go b/pkg/deployment/resources/inspector/pvs_v1.go deleted file mode 100644 index 818762e95..000000000 --- a/pkg/deployment/resources/inspector/pvs_v1.go +++ /dev/null @@ -1,122 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - core "k8s.io/api/core/v1" - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolume/v1" -) - -func (p *persistentVolumesInspector) V1() (ins.Inspector, error) { - if p.v1.err != nil { - return nil, p.v1.err - } - - return p.v1, nil -} - -type persistentVolumesInspectorV1 struct { - persistentVolumeInspector *persistentVolumesInspector - - persistentVolumes map[string]*core.PersistentVolume - err error -} - -func (p *persistentVolumesInspectorV1) validate() error { - if p == nil { - return errors.Errorf("PersistentVolumesV1Inspector is nil") - } - - if p.persistentVolumeInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.persistentVolumes == nil && p.err == nil { - return errors.Errorf("PersistentVolumes or err should be not nil") - } - - if p.persistentVolumes != nil && p.err != nil { - return errors.Errorf("PersistentVolumes or err cannot be not nil together") - } - - return nil -} - -func (p *persistentVolumesInspectorV1) ListSimple() []*core.PersistentVolume { - var r []*core.PersistentVolume - for _, persistentVolume := range p.persistentVolumes { - r = append(r, persistentVolume) - } - - return r -} - -func (p *persistentVolumesInspectorV1) GetSimple(name string) (*core.PersistentVolume, bool) { - persistentVolume, ok := p.persistentVolumes[name] - if !ok { - return nil, false - } - - return persistentVolume, true -} - -func (p *persistentVolumesInspectorV1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, persistentVolume := range p.persistentVolumes { - if err := p.iteratePersistentVolume(persistentVolume, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *persistentVolumesInspectorV1) iteratePersistentVolume(persistentVolume *core.PersistentVolume, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(persistentVolume) { - return nil - } - } - - return action(persistentVolume) -} - -func (p *persistentVolumesInspectorV1) Read() ins.ReadInterface { - return p -} - -func (p *persistentVolumesInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*core.PersistentVolume, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.PersistentVolumeGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/sa.go b/pkg/deployment/resources/inspector/sa.go index a9896ee92..1be1058e5 100644 --- a/pkg/deployment/resources/inspector/sa.go +++ b/pkg/deployment/resources/inspector/sa.go @@ -25,11 +25,12 @@ import ( "time" core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/serviceaccount" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,92 +50,18 @@ func (p serviceAccountsInspectorLoader) Component() definitions.Component { func (p serviceAccountsInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q serviceAccountsInspector - p.loadV1(ctx, i, &q) + + q.v1 = newInspectorVersion[*core.ServiceAccountList, *core.ServiceAccount](ctx, + constants.ServiceAccountGRv1(), + constants.ServiceAccountGKv1(), + i.client.Kubernetes().CoreV1().ServiceAccounts(i.namespace), + serviceaccount.List()) + i.serviceAccounts = &q q.state = i q.last = time.Now() } -func (p serviceAccountsInspectorLoader) loadV1(ctx context.Context, i *inspectorState, q *serviceAccountsInspector) { - var z serviceAccountsInspectorV1 - - z.serviceAccountInspector = q - - z.serviceAccounts, z.err = p.getV1ServiceAccounts(ctx, i) - - q.v1 = &z -} - -func (p serviceAccountsInspectorLoader) getV1ServiceAccounts(ctx context.Context, i *inspectorState) (map[string]*core.ServiceAccount, error) { - objs, err := p.getV1ServiceAccountsList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*core.ServiceAccount, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p serviceAccountsInspectorLoader) getV1ServiceAccountsList(ctx context.Context, i *inspectorState) ([]*core.ServiceAccount, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().ServiceAccounts(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*core.ServiceAccount, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1ServiceAccountsListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p serviceAccountsInspectorLoader) getV1ServiceAccountsListRequest(ctx context.Context, i *inspectorState, cont string) ([]core.ServiceAccount, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().ServiceAccounts(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p serviceAccountsInspectorLoader) Verify(i *inspectorState) error { if err := i.serviceAccounts.v1.err; err != nil { return err @@ -163,7 +90,7 @@ type serviceAccountsInspector struct { last time.Time - v1 *serviceAccountsInspectorV1 + v1 *inspectorVersion[*core.ServiceAccount] } func (p *serviceAccountsInspector) LastRefresh() time.Time { @@ -194,3 +121,7 @@ func (p *serviceAccountsInspector) validate() error { return p.v1.validate() } + +func (p *serviceAccountsInspector) V1() generic.Inspector[*core.ServiceAccount] { + return p.v1 +} diff --git a/pkg/deployment/resources/inspector/sa_gvk.go b/pkg/deployment/resources/inspector/sa_gvk.go index 7a1f778b1..76e2e8ca6 100644 --- a/pkg/deployment/resources/inspector/sa_gvk.go +++ b/pkg/deployment/resources/inspector/sa_gvk.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *serviceAccountsInspectorV1) GroupVersionKind() schema.GroupVersionKind { - return constants.ServiceAccountGKv1() -} - -func (p *serviceAccountsInspectorV1) GroupVersionResource() schema.GroupVersionResource { - return constants.ServiceAccountGRv1() -} - func (p *serviceAccountsInspector) GroupKind() schema.GroupKind { return constants.ServiceAccountGK() } diff --git a/pkg/deployment/resources/inspector/sa_mod.go b/pkg/deployment/resources/inspector/sa_mod.go index 0918097b9..b305c0c8f 100644 --- a/pkg/deployment/resources/inspector/sa_mod.go +++ b/pkg/deployment/resources/inspector/sa_mod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,7 +27,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" - serviceaccountv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/serviceaccount/v1" ) func (i *inspectorState) ServiceAccountsModInterface() mods.ServiceAccountsMods { @@ -40,7 +39,7 @@ type serviceAccountsMod struct { i *inspectorState } -func (p serviceAccountsMod) V1() serviceaccountv1.ModInterface { +func (p serviceAccountsMod) V1() generic.ModClient[*core.ServiceAccount] { return wrapMod[*core.ServiceAccount](definitions.ServiceAccount, p.i.GetThrottles, generic.WithModStatusGetter[*core.ServiceAccount](constants.ServiceAccountGKv1(), p.clientv1)) } diff --git a/pkg/deployment/resources/inspector/sa_v1.go b/pkg/deployment/resources/inspector/sa_v1.go deleted file mode 100644 index 1746b8275..000000000 --- a/pkg/deployment/resources/inspector/sa_v1.go +++ /dev/null @@ -1,118 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - core "k8s.io/api/core/v1" - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/serviceaccount/v1" -) - -func (p *serviceAccountsInspector) V1() ins.Inspector { - return p.v1 -} - -type serviceAccountsInspectorV1 struct { - serviceAccountInspector *serviceAccountsInspector - - serviceAccounts map[string]*core.ServiceAccount - err error -} - -func (p *serviceAccountsInspectorV1) validate() error { - if p == nil { - return errors.Errorf("ServiceAccountsV1Inspector is nil") - } - - if p.serviceAccountInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.serviceAccounts == nil { - return errors.Errorf("ServiceAccounts or err should be not nil") - } - - if p.err != nil { - return errors.Errorf("ServiceAccounts or err cannot be not nil together") - } - - return nil -} - -func (p *serviceAccountsInspectorV1) ServiceAccounts() []*core.ServiceAccount { - var r []*core.ServiceAccount - for _, serviceAccount := range p.serviceAccounts { - r = append(r, serviceAccount) - } - - return r -} - -func (p *serviceAccountsInspectorV1) GetSimple(name string) (*core.ServiceAccount, bool) { - serviceAccount, ok := p.serviceAccounts[name] - if !ok { - return nil, false - } - - return serviceAccount, true -} - -func (p *serviceAccountsInspectorV1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, serviceAccount := range p.serviceAccounts { - if err := p.iterateServiceAccount(serviceAccount, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *serviceAccountsInspectorV1) iterateServiceAccount(serviceAccount *core.ServiceAccount, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(serviceAccount) { - return nil - } - } - - return action(serviceAccount) -} - -func (p *serviceAccountsInspectorV1) Read() ins.ReadInterface { - return p -} - -func (p *serviceAccountsInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*core.ServiceAccount, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.ServiceAccountGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/secrets.go b/pkg/deployment/resources/inspector/secrets.go index 326b25b8c..c3f0b1ba2 100644 --- a/pkg/deployment/resources/inspector/secrets.go +++ b/pkg/deployment/resources/inspector/secrets.go @@ -25,11 +25,12 @@ import ( "time" core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,92 +50,18 @@ func (p secretsInspectorLoader) Component() definitions.Component { func (p secretsInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q secretsInspector - p.loadV1(ctx, i, &q) + + q.v1 = newInspectorVersion[*core.SecretList, *core.Secret](ctx, + constants.SecretGRv1(), + constants.SecretGKv1(), + i.client.Kubernetes().CoreV1().Secrets(i.namespace), + secret.List()) + i.secrets = &q q.state = i q.last = time.Now() } -func (p secretsInspectorLoader) loadV1(ctx context.Context, i *inspectorState, q *secretsInspector) { - var z secretsInspectorV1 - - z.secretInspector = q - - z.secrets, z.err = p.getV1Secrets(ctx, i) - - q.v1 = &z -} - -func (p secretsInspectorLoader) getV1Secrets(ctx context.Context, i *inspectorState) (map[string]*core.Secret, error) { - objs, err := p.getV1SecretsList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*core.Secret, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p secretsInspectorLoader) getV1SecretsList(ctx context.Context, i *inspectorState) ([]*core.Secret, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().Secrets(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*core.Secret, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1SecretsListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p secretsInspectorLoader) getV1SecretsListRequest(ctx context.Context, i *inspectorState, cont string) ([]core.Secret, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().Secrets(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p secretsInspectorLoader) Verify(i *inspectorState) error { if err := i.secrets.v1.err; err != nil { return err @@ -163,7 +90,7 @@ type secretsInspector struct { last time.Time - v1 *secretsInspectorV1 + v1 *inspectorVersion[*core.Secret] } func (p *secretsInspector) LastRefresh() time.Time { @@ -194,3 +121,7 @@ func (p *secretsInspector) validate() error { return p.v1.validate() } + +func (p *secretsInspector) V1() generic.Inspector[*core.Secret] { + return p.v1 +} diff --git a/pkg/deployment/resources/inspector/secrets_gvk.go b/pkg/deployment/resources/inspector/secrets_gvk.go index b38f4369c..28f101233 100644 --- a/pkg/deployment/resources/inspector/secrets_gvk.go +++ b/pkg/deployment/resources/inspector/secrets_gvk.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *secretsInspectorV1) GroupVersionKind() schema.GroupVersionKind { - return constants.SecretGKv1() -} - -func (p *secretsInspectorV1) GroupVersionResource() schema.GroupVersionResource { - return constants.SecretGRv1() -} - func (p *secretsInspector) GroupKind() schema.GroupKind { return constants.SecretGK() } diff --git a/pkg/deployment/resources/inspector/secrets_mod.go b/pkg/deployment/resources/inspector/secrets_mod.go index 3b6429afd..8fda662c9 100644 --- a/pkg/deployment/resources/inspector/secrets_mod.go +++ b/pkg/deployment/resources/inspector/secrets_mod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,7 +27,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" - secretv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" ) func (i *inspectorState) SecretsModInterface() mods.SecretsMods { @@ -40,7 +39,7 @@ type secretsMod struct { i *inspectorState } -func (p secretsMod) V1() secretv1.ModInterface { +func (p secretsMod) V1() generic.ModClient[*core.Secret] { return wrapMod[*core.Secret](definitions.Secret, p.i.GetThrottles, generic.WithModStatusGetter[*core.Secret](constants.SecretGKv1(), p.clientv1)) } diff --git a/pkg/deployment/resources/inspector/secrets_v1.go b/pkg/deployment/resources/inspector/secrets_v1.go deleted file mode 100644 index 6925d8f5f..000000000 --- a/pkg/deployment/resources/inspector/secrets_v1.go +++ /dev/null @@ -1,118 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - core "k8s.io/api/core/v1" - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" -) - -func (p *secretsInspector) V1() ins.Inspector { - return p.v1 -} - -type secretsInspectorV1 struct { - secretInspector *secretsInspector - - secrets map[string]*core.Secret - err error -} - -func (p *secretsInspectorV1) validate() error { - if p == nil { - return errors.Errorf("SecretsV1Inspector is nil") - } - - if p.secretInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.secrets == nil { - return errors.Errorf("Secrets or err should be not nil") - } - - if p.err != nil { - return errors.Errorf("Secrets or err cannot be not nil together") - } - - return nil -} - -func (p *secretsInspectorV1) ListSimple() []*core.Secret { - var r []*core.Secret - for _, secret := range p.secrets { - r = append(r, secret) - } - - return r -} - -func (p *secretsInspectorV1) GetSimple(name string) (*core.Secret, bool) { - secret, ok := p.secrets[name] - if !ok { - return nil, false - } - - return secret, true -} - -func (p *secretsInspectorV1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, secret := range p.secrets { - if err := p.iterateSecret(secret, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *secretsInspectorV1) iterateSecret(secret *core.Secret, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(secret) { - return nil - } - } - - return action(secret) -} - -func (p *secretsInspectorV1) Read() ins.ReadInterface { - return p -} - -func (p *secretsInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*core.Secret, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.SecretGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/services.go b/pkg/deployment/resources/inspector/services.go index 58e210e4d..2313ecd54 100644 --- a/pkg/deployment/resources/inspector/services.go +++ b/pkg/deployment/resources/inspector/services.go @@ -25,11 +25,12 @@ import ( "time" core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/service" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,92 +50,18 @@ func (p servicesInspectorLoader) Component() definitions.Component { func (p servicesInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q servicesInspector - p.loadV1(ctx, i, &q) + + q.v1 = newInspectorVersion[*core.ServiceList, *core.Service](ctx, + constants.ServiceGRv1(), + constants.ServiceGKv1(), + i.client.Kubernetes().CoreV1().Services(i.namespace), + service.List()) + i.services = &q q.state = i q.last = time.Now() } -func (p servicesInspectorLoader) loadV1(ctx context.Context, i *inspectorState, q *servicesInspector) { - var z servicesInspectorV1 - - z.serviceInspector = q - - z.services, z.err = p.getV1Services(ctx, i) - - q.v1 = &z -} - -func (p servicesInspectorLoader) getV1Services(ctx context.Context, i *inspectorState) (map[string]*core.Service, error) { - objs, err := p.getV1ServicesList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*core.Service, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p servicesInspectorLoader) getV1ServicesList(ctx context.Context, i *inspectorState) ([]*core.Service, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().Services(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*core.Service, 0, s) - - for { - for id := range items { - ptrs = append(ptrs, &items[id]) - } - - if cont == "" { - break - } - - items, cont, err = p.getV1ServicesListRequest(ctx, i, cont) - - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p servicesInspectorLoader) getV1ServicesListRequest(ctx context.Context, i *inspectorState, cont string) ([]core.Service, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Kubernetes().CoreV1().Services(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p servicesInspectorLoader) Verify(i *inspectorState) error { if err := i.services.v1.err; err != nil { return err @@ -163,7 +90,7 @@ type servicesInspector struct { last time.Time - v1 *servicesInspectorV1 + v1 *inspectorVersion[*core.Service] } func (p *servicesInspector) LastRefresh() time.Time { @@ -194,3 +121,7 @@ func (p *servicesInspector) validate() error { return p.v1.validate() } + +func (p *servicesInspector) V1() generic.Inspector[*core.Service] { + return p.v1 +} diff --git a/pkg/deployment/resources/inspector/services_gvk.go b/pkg/deployment/resources/inspector/services_gvk.go index 1225fb972..d7ba274b3 100644 --- a/pkg/deployment/resources/inspector/services_gvk.go +++ b/pkg/deployment/resources/inspector/services_gvk.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *servicesInspectorV1) GroupVersionKind() schema.GroupVersionKind { - return constants.ServiceGKv1() -} - -func (p *servicesInspectorV1) GroupVersionResource() schema.GroupVersionResource { - return constants.ServiceGRv1() -} - func (p *servicesInspector) GroupKind() schema.GroupKind { return constants.ServiceGK() } diff --git a/pkg/deployment/resources/inspector/services_mod.go b/pkg/deployment/resources/inspector/services_mod.go index 6d9d3e794..e3af1879f 100644 --- a/pkg/deployment/resources/inspector/services_mod.go +++ b/pkg/deployment/resources/inspector/services_mod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,7 +27,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" - servicev1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/service/v1" ) func (i *inspectorState) ServicesModInterface() mods.ServicesMods { @@ -40,7 +39,7 @@ type servicesMod struct { i *inspectorState } -func (p servicesMod) V1() servicev1.ModInterface { +func (p servicesMod) V1() generic.ModClient[*core.Service] { return wrapMod[*core.Service](definitions.Service, p.i.GetThrottles, generic.WithModStatusGetter[*core.Service](constants.ServiceGKv1(), p.clientv1)) } diff --git a/pkg/deployment/resources/inspector/services_v1.go b/pkg/deployment/resources/inspector/services_v1.go deleted file mode 100644 index b7ad1b28a..000000000 --- a/pkg/deployment/resources/inspector/services_v1.go +++ /dev/null @@ -1,109 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - core "k8s.io/api/core/v1" - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/service/v1" -) - -func (p *servicesInspector) V1() ins.Inspector { - return p.v1 -} - -type servicesInspectorV1 struct { - serviceInspector *servicesInspector - - services map[string]*core.Service - err error -} - -func (p *servicesInspectorV1) validate() error { - if p == nil { - return errors.Errorf("ServicesV1Inspector is nil") - } - - if p.serviceInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.services == nil { - return errors.Errorf("Services or err should be not nil") - } - - if p.err != nil { - return errors.Errorf("Services or err cannot be not nil together") - } - - return nil -} - -func (p *servicesInspectorV1) GetSimple(name string) (*core.Service, bool) { - service, ok := p.services[name] - if !ok { - return nil, false - } - - return service, true -} - -func (p *servicesInspectorV1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, service := range p.services { - if err := p.iterateService(service, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *servicesInspectorV1) iterateService(service *core.Service, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(service) { - return nil - } - } - - return action(service) -} - -func (p *servicesInspectorV1) Read() ins.ReadInterface { - return p -} - -func (p *servicesInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*core.Service, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.ServiceGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/sm.go b/pkg/deployment/resources/inspector/sm.go index 1f1e59700..85478cfc1 100644 --- a/pkg/deployment/resources/inspector/sm.go +++ b/pkg/deployment/resources/inspector/sm.go @@ -25,11 +25,12 @@ import ( "time" monitoring "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/servicemonitor" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) @@ -49,88 +50,18 @@ func (p serviceMonitorsInspectorLoader) Component() definitions.Component { func (p serviceMonitorsInspectorLoader) Load(ctx context.Context, i *inspectorState) { var q serviceMonitorsInspector - p.loadV1(ctx, i, &q) + + q.v1 = newInspectorVersion[*monitoring.ServiceMonitorList, *monitoring.ServiceMonitor](ctx, + constants.ServiceMonitorGRv1(), + constants.ServiceMonitorGKv1(), + i.client.Monitoring().MonitoringV1().ServiceMonitors(i.namespace), + servicemonitor.List()) + i.serviceMonitors = &q q.state = i q.last = time.Now() } -func (p serviceMonitorsInspectorLoader) loadV1(ctx context.Context, i *inspectorState, q *serviceMonitorsInspector) { - var z serviceMonitorsInspectorV1 - - z.serviceMonitorInspector = q - - z.serviceMonitors, z.err = p.getV1ServiceMonitors(ctx, i) - - q.v1 = &z -} - -func (p serviceMonitorsInspectorLoader) getV1ServiceMonitors(ctx context.Context, i *inspectorState) (map[string]*monitoring.ServiceMonitor, error) { - objs, err := p.getV1ServiceMonitorsList(ctx, i) - if err != nil { - return nil, err - } - - r := make(map[string]*monitoring.ServiceMonitor, len(objs)) - - for id := range objs { - r[objs[id].GetName()] = objs[id] - } - - return r, nil -} - -func (p serviceMonitorsInspectorLoader) getV1ServiceMonitorsList(ctx context.Context, i *inspectorState) ([]*monitoring.ServiceMonitor, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Monitoring().MonitoringV1().ServiceMonitors(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }) - - if err != nil { - return nil, err - } - - items := obj.Items - cont := obj.Continue - var s = int64(len(items)) - - if z := obj.RemainingItemCount; z != nil { - s += *z - } - - ptrs := make([]*monitoring.ServiceMonitor, 0, s) - - for { - ptrs = append(ptrs, items...) - if cont == "" { - break - } - - items, cont, err = p.getV1ServiceMonitorsListRequest(ctx, i, cont) - if err != nil { - return nil, err - } - } - - return ptrs, nil -} - -func (p serviceMonitorsInspectorLoader) getV1ServiceMonitorsListRequest(ctx context.Context, i *inspectorState, cont string) ([]*monitoring.ServiceMonitor, string, error) { - ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) - defer cancel() - obj, err := i.client.Monitoring().MonitoringV1().ServiceMonitors(i.namespace).List(ctxChild, meta.ListOptions{ - Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - Continue: cont, - }) - - if err != nil { - return nil, "", err - } - - return obj.Items, obj.Continue, err -} - func (p serviceMonitorsInspectorLoader) Verify(i *inspectorState) error { return nil } @@ -155,7 +86,7 @@ type serviceMonitorsInspector struct { last time.Time - v1 *serviceMonitorsInspectorV1 + v1 *inspectorVersion[*monitoring.ServiceMonitor] } func (p *serviceMonitorsInspector) LastRefresh() time.Time { @@ -186,3 +117,11 @@ func (p *serviceMonitorsInspector) validate() error { return p.v1.validate() } + +func (p *serviceMonitorsInspector) V1() (generic.Inspector[*monitoring.ServiceMonitor], error) { + if p.v1.err != nil { + return nil, p.v1.err + } + + return p.v1, nil +} diff --git a/pkg/deployment/resources/inspector/sm_gvk.go b/pkg/deployment/resources/inspector/sm_gvk.go index 892d67d8b..948e03696 100644 --- a/pkg/deployment/resources/inspector/sm_gvk.go +++ b/pkg/deployment/resources/inspector/sm_gvk.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,14 +26,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" ) -func (p *serviceMonitorsInspectorV1) GroupVersionKind() schema.GroupVersionKind { - return constants.ServiceMonitorGKv1() -} - -func (p *serviceMonitorsInspectorV1) GroupVersionResource() schema.GroupVersionResource { - return constants.ServiceMonitorGRv1() -} - func (p *serviceMonitorsInspector) GroupKind() schema.GroupKind { return constants.ServiceMonitorGK() } diff --git a/pkg/deployment/resources/inspector/sm_mod.go b/pkg/deployment/resources/inspector/sm_mod.go index 9991a9c3b..6b24ce564 100644 --- a/pkg/deployment/resources/inspector/sm_mod.go +++ b/pkg/deployment/resources/inspector/sm_mod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,7 +27,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" - servicemonitorv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/servicemonitor/v1" ) func (i *inspectorState) ServiceMonitorsModInterface() mods.ServiceMonitorsMods { @@ -40,7 +39,7 @@ type serviceMonitorsMod struct { i *inspectorState } -func (p serviceMonitorsMod) V1() servicemonitorv1.ModInterface { +func (p serviceMonitorsMod) V1() generic.ModClient[*monitoring.ServiceMonitor] { return wrapMod[*monitoring.ServiceMonitor](definitions.ServiceMonitor, p.i.GetThrottles, generic.WithModStatusGetter[*monitoring.ServiceMonitor](constants.ServiceMonitorGKv1(), p.clientv1)) } diff --git a/pkg/deployment/resources/inspector/sm_v1.go b/pkg/deployment/resources/inspector/sm_v1.go deleted file mode 100644 index 53c6258a7..000000000 --- a/pkg/deployment/resources/inspector/sm_v1.go +++ /dev/null @@ -1,122 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package inspector - -import ( - "context" - - monitoring "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" - apiErrors "k8s.io/apimachinery/pkg/api/errors" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" - ins "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/servicemonitor/v1" -) - -func (p *serviceMonitorsInspector) V1() (ins.Inspector, error) { - if p.v1.err != nil { - return nil, p.v1.err - } - - return p.v1, nil -} - -type serviceMonitorsInspectorV1 struct { - serviceMonitorInspector *serviceMonitorsInspector - - serviceMonitors map[string]*monitoring.ServiceMonitor - err error -} - -func (p *serviceMonitorsInspectorV1) validate() error { - if p == nil { - return errors.Errorf("ServiceMonitorsV1Inspector is nil") - } - - if p.serviceMonitorInspector == nil { - return errors.Errorf("Parent is nil") - } - - if p.serviceMonitors == nil && p.err == nil { - return errors.Errorf("ServiceMonitors or err should be not nil") - } - - if p.serviceMonitors != nil && p.err != nil { - return errors.Errorf("ServiceMonitors or err cannot be not nil together") - } - - return nil -} - -func (p *serviceMonitorsInspectorV1) ServiceMonitors() []*monitoring.ServiceMonitor { - var r []*monitoring.ServiceMonitor - for _, serviceMonitor := range p.serviceMonitors { - r = append(r, serviceMonitor) - } - - return r -} - -func (p *serviceMonitorsInspectorV1) GetSimple(name string) (*monitoring.ServiceMonitor, bool) { - serviceMonitor, ok := p.serviceMonitors[name] - if !ok { - return nil, false - } - - return serviceMonitor, true -} - -func (p *serviceMonitorsInspectorV1) Iterate(action ins.Action, filters ...ins.Filter) error { - for _, serviceMonitor := range p.serviceMonitors { - if err := p.iterateServiceMonitor(serviceMonitor, action, filters...); err != nil { - return err - } - } - - return nil -} - -func (p *serviceMonitorsInspectorV1) iterateServiceMonitor(serviceMonitor *monitoring.ServiceMonitor, action ins.Action, filters ...ins.Filter) error { - for _, f := range filters { - if f == nil { - continue - } - - if !f(serviceMonitor) { - return nil - } - } - - return action(serviceMonitor) -} - -func (p *serviceMonitorsInspectorV1) Read() ins.ReadInterface { - return p -} - -func (p *serviceMonitorsInspectorV1) Get(ctx context.Context, name string, opts meta.GetOptions) (*monitoring.ServiceMonitor, error) { - if s, ok := p.GetSimple(name); !ok { - return nil, apiErrors.NewNotFound(constants.ServiceMonitorGR(), name) - } else { - return s, nil - } -} diff --git a/pkg/deployment/resources/inspector/throttles.go b/pkg/deployment/resources/inspector/throttles.go index 67a245a48..92c2784c9 100644 --- a/pkg/deployment/resources/inspector/throttles.go +++ b/pkg/deployment/resources/inspector/throttles.go @@ -33,6 +33,7 @@ func NewDefaultThrottle() throttle.Components { 30*time.Second, // ArangoTask 30*time.Second, // ArangoRoute 30*time.Second, // ArangoProfile + 30*time.Second, // ArangoPlatformStorage 30*time.Second, // Node 30*time.Second, // PV 15*time.Second, // PVC diff --git a/pkg/deployment/resources/member_cleanup.go b/pkg/deployment/resources/member_cleanup.go index f604c86c8..05594265a 100644 --- a/pkg/deployment/resources/member_cleanup.go +++ b/pkg/deployment/resources/member_cleanup.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -34,7 +34,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/globals" inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector" - arangomemberv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangomember/v1" ) const ( @@ -190,7 +189,9 @@ func (r *Resources) EnsureArangoMembers(ctx context.Context, cachedStatus inspec } return nil - }, arangomemberv1.FilterByDeploymentUID(obj.GetUID())); err != nil { + }, func(obj *api.ArangoMember) bool { + return obj != nil && obj.Spec.DeploymentUID == obj.GetUID() + }); err != nil { return err } diff --git a/pkg/deployment/resources/pod_cleanup.go b/pkg/deployment/resources/pod_cleanup.go index 7276f7f9d..e1a136f20 100644 --- a/pkg/deployment/resources/pod_cleanup.go +++ b/pkg/deployment/resources/pod_cleanup.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -34,7 +34,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/globals" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/info" - podv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/pod/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" ) @@ -104,7 +104,7 @@ func (r *Resources) CleanupTerminatedPods(ctx context.Context) (util.Interval, e } return nil - }, podv1.FilterPodsByLabels(k8sutil.LabelsForDeployment(r.context.GetAPIObject().GetName(), ""))) + }, generic.FilterByLabels[*core.Pod](k8sutil.LabelsForDeployment(r.context.GetAPIObject().GetName(), ""))) }); err != nil { return 0, err } diff --git a/pkg/deployment/resources/pod_creator.go b/pkg/deployment/resources/pod_creator.go index 518f43b6a..efaef3ef5 100644 --- a/pkg/deployment/resources/pod_creator.go +++ b/pkg/deployment/resources/pod_creator.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -49,7 +49,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/globals" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector" - podv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/pod/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/interfaces" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" ktls "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/tls" @@ -290,9 +290,9 @@ func createArangoSyncArgs(apiObject meta.Object, spec api.DeploymentSpec, group func createArangoGatewayArgs(input pod.Input, additionalOptions ...k8sutil.OptionPair) []string { options := k8sutil.CreateOptionPairs(64) if input.Deployment.Gateway.IsDynamic() { - options.Add("--config-path", path.Join(MemberConfigVolumeMountDir, GatewayDynamicConfigFileName)) + options.Add("--config-path", path.Join(constants.MemberConfigVolumeMountDir, constants.GatewayConfigFileName)) } else { - options.Add("--config-path", path.Join(GatewayVolumeMountDir, GatewayConfigFileName)) + options.Add("--config-path", path.Join(constants.GatewayVolumeMountDir, constants.GatewayConfigFileName)) } options.Append(additionalOptions...) @@ -330,6 +330,10 @@ func (r *Resources) RenderPodForMember(ctx context.Context, acs sutil.ACS, spec } groupSpec := spec.GetServerGroupSpec(group) + if spec.Mode.Get() == api.DeploymentModeActiveFailover && !features.ActiveFailover().ImageSupported(&imageInfo) { + return nil, errors.Errorf("ActiveFailover starting from ArangoDB 3.12 is not supported") + } + memberName := m.ArangoMemberName(r.context.GetAPIObject().GetName(), group) member, ok := acs.CurrentClusterCache().ArangoMember().V1().GetSimple(memberName) @@ -634,6 +638,7 @@ func (r *Resources) createPodForMember(ctx context.Context, cachedStatus inspect } // Create event r.context.CreateEvent(k8sutil.NewPodCreatedEvent(m.Pod.GetName(), role, apiObject)) + cachedStatus.GetThrottles().Pod().Invalidate() return nil } @@ -715,7 +720,7 @@ func RenderArangoPod(ctx context.Context, cachedStatus inspectorInterface.Inspec // CreateArangoPod creates a new Pod with container provided by parameter 'containerCreator' // If the pod already exists, nil is returned. // If another error occurs, that error is returned. -func CreateArangoPod(ctx context.Context, c podv1.ModInterface, deployment k8sutil.APIObject, +func CreateArangoPod(ctx context.Context, c generic.ModClient[*core.Pod], deployment k8sutil.APIObject, deploymentSpec api.DeploymentSpec, group api.ServerGroup, pod *core.Pod) (string, types.UID, error) { podName, uid, err := k8sutil.CreatePod(ctx, c, pod, deployment.GetNamespace(), deployment.AsOwner()) if err != nil { @@ -754,7 +759,6 @@ func (r *Resources) EnsurePods(ctx context.Context, cachedStatus inspectorInterf iterator := r.context.GetServerGroupIterator() deploymentStatus := r.context.GetStatus() imageNotFoundOnce := &sync.Once{} - changed := false log := r.log.Str("section", "member") @@ -778,25 +782,25 @@ func (r *Resources) EnsurePods(ctx context.Context, cachedStatus inspectorInterf log.Warn("Ensuring pod") + if err := cachedStatus.Refresh(ctx); err != nil { + return err + } + spec := r.context.GetSpec() if err := r.createPodForMember(ctx, cachedStatus, spec, member, m.ID, imageNotFoundOnce); err != nil { log.Err(err).Warn("Ensuring pod failed") return errors.WithStack(err) } - changed = true + if err := cachedStatus.Refresh(ctx); err != nil { + return err + } } return nil }, &deploymentStatus); err != nil { return errors.WithStack(err) } - if changed { - if err := cachedStatus.Refresh(ctx); err != nil { - return err - } - } - return nil } diff --git a/pkg/deployment/resources/pod_creator_gateway.go b/pkg/deployment/resources/pod_creator_gateway.go index 0450b007e..8bcd41b29 100644 --- a/pkg/deployment/resources/pod_creator_gateway.go +++ b/pkg/deployment/resources/pod_creator_gateway.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -22,41 +22,48 @@ package resources import ( "fmt" + "strings" core "k8s.io/api/core/v1" "github.com/arangodb/kube-arangodb/pkg/deployment/pod" + "github.com/arangodb/kube-arangodb/pkg/util/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" ) -const ( - ArangoGatewayExecutor = "/usr/local/bin/envoy" - GatewayVolumeMountDir = "/etc/gateway/" - GatewayVolumeName = "gateway" - GatewayConfigFileName = "gateway.yaml" - GatewayDynamicConfigFileName = "gateway.dynamic.yaml" - GatewayCDSConfigFileName = "gateway.dynamic.cds.yaml" - GatewayLDSConfigFileName = "gateway.dynamic.lds.yaml" - GatewayConfigChecksumENV = "GATEWAY_CONFIG_CHECKSUM" -) +func GetGatewayConfigMapName(name string, parts ...string) string { + if len(parts) == 0 { + return fmt.Sprintf("%s-gateway", name) + } -func GetGatewayConfigMapName(name string) string { - return fmt.Sprintf("%s-gateway", name) + return fmt.Sprintf("%s-gateway-%s", name, strings.Join(parts, "-")) } func createGatewayVolumes(input pod.Input) pod.Volumes { volumes := pod.NewVolumes() - volumes.AddVolume(k8sutil.CreateVolumeWithConfigMap(GatewayVolumeName, GetGatewayConfigMapName(input.ApiObject.GetName()))) - volumes.AddVolume(k8sutil.CreateVolumeWithConfigMap(MemberConfigVolumeName, input.ArangoMember.GetName())) + volumes.AddVolume(k8sutil.CreateVolumeWithConfigMap(constants.GatewayVolumeName, GetGatewayConfigMapName(input.ApiObject.GetName()))) + volumes.AddVolume(k8sutil.CreateVolumeWithConfigMap(constants.GatewayCDSVolumeName, GetGatewayConfigMapName(input.ApiObject.GetName(), "cds"))) + volumes.AddVolume(k8sutil.CreateVolumeWithConfigMap(constants.GatewayLDSVolumeName, GetGatewayConfigMapName(input.ApiObject.GetName(), "lds"))) + volumes.AddVolume(k8sutil.CreateVolumeWithConfigMap(constants.MemberConfigVolumeName, input.ArangoMember.GetName())) + volumes.AddVolumeMount(core.VolumeMount{ + Name: constants.GatewayVolumeName, + MountPath: constants.GatewayVolumeMountDir, + ReadOnly: true, + }) + volumes.AddVolumeMount(core.VolumeMount{ + Name: constants.GatewayCDSVolumeName, + MountPath: constants.GatewayCDSVolumeMountDir, + ReadOnly: true, + }) volumes.AddVolumeMount(core.VolumeMount{ - Name: GatewayVolumeName, - MountPath: GatewayVolumeMountDir, + Name: constants.GatewayLDSVolumeName, + MountPath: constants.GatewayLDSVolumeMountDir, ReadOnly: true, }) volumes.AddVolumeMount(core.VolumeMount{ - Name: MemberConfigVolumeName, - MountPath: MemberConfigVolumeMountDir, + Name: constants.MemberConfigVolumeName, + MountPath: constants.MemberConfigVolumeMountDir, ReadOnly: true, }) diff --git a/pkg/deployment/resources/pod_creator_gateway_container.go b/pkg/deployment/resources/pod_creator_gateway_container.go index 2a9989427..4d893e4ee 100644 --- a/pkg/deployment/resources/pod_creator_gateway_container.go +++ b/pkg/deployment/resources/pod_creator_gateway_container.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ import ( api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" "github.com/arangodb/kube-arangodb/pkg/deployment/pod" + "github.com/arangodb/kube-arangodb/pkg/util/constants" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/interfaces" kresources "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/resources" @@ -70,7 +71,7 @@ func (a *ArangoGatewayContainer) GetPorts() []core.ContainerPort { } func (a *ArangoGatewayContainer) GetExecutor() string { - return a.groupSpec.GetEntrypoint(ArangoGatewayExecutor) + return a.groupSpec.GetEntrypoint(constants.ArangoGatewayExecutor) } func (a *ArangoGatewayContainer) GetSecurityContext() *core.SecurityContext { @@ -131,20 +132,11 @@ func (a *ArangoGatewayContainer) GetEnvs() ([]core.EnvVar, []core.EnvFromSource) envs.Add(true, k8sutil.GetLifecycleEnv()...) - if cm, ok := a.cachedStatus.ConfigMap().V1().GetSimple(GetGatewayConfigMapName(a.input.ArangoMember.GetName())); ok { - if v, ok := cm.Data[ConfigMapChecksumKey]; ok { - envs.Add(true, core.EnvVar{ - Name: MemberConfigChecksumENV, - Value: v, - }) - } - } - if !a.spec.Gateway.IsDynamic() { if cm, ok := a.cachedStatus.ConfigMap().V1().GetSimple(GetGatewayConfigMapName(a.input.ApiObject.GetName())); ok { - if v, ok := cm.Data[ConfigMapChecksumKey]; ok { + if v, ok := cm.Data[constants.ConfigMapChecksumKey]; ok { envs.Add(true, core.EnvVar{ - Name: GatewayConfigChecksumENV, + Name: constants.GatewayConfigChecksumENV, Value: v, }) } diff --git a/pkg/deployment/resources/pod_inspector.go b/pkg/deployment/resources/pod_inspector.go index bf85c699a..a734d5358 100644 --- a/pkg/deployment/resources/pod_inspector.go +++ b/pkg/deployment/resources/pod_inspector.go @@ -42,7 +42,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/info" inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector" - podv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/pod/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" kresources "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/resources" ) @@ -474,7 +474,7 @@ func (r *Resources) InspectPods(ctx context.Context, cachedStatus inspectorInter } return nil - }, podv1.FilterPodsByLabels(k8sutil.LabelsForDeployment(deploymentName, ""))) + }, generic.FilterByLabels[*core.Pod](k8sutil.LabelsForDeployment(deploymentName, ""))) if err != nil { return 0, err } diff --git a/pkg/deployment/resources/pvc_inspector.go b/pkg/deployment/resources/pvc_inspector.go index f369f3be2..2fdad5ad8 100644 --- a/pkg/deployment/resources/pvc_inspector.go +++ b/pkg/deployment/resources/pvc_inspector.go @@ -36,7 +36,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/globals" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector" - pvcv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) var ( @@ -157,7 +157,7 @@ func (r *Resources) InspectPVCs(ctx context.Context, cachedStatus inspectorInter } return nil - }, pvcv1.FilterPersistentVolumeClaimsByLabels(k8sutil.LabelsForDeployment(deploymentName, ""))); err != nil { + }, generic.FilterByLabels[*core.PersistentVolumeClaim](k8sutil.LabelsForDeployment(deploymentName, ""))); err != nil { return 0, err } diff --git a/pkg/deployment/resources/secrets.go b/pkg/deployment/resources/secrets.go index e08302238..72d03c607 100644 --- a/pkg/deployment/resources/secrets.go +++ b/pkg/deployment/resources/secrets.go @@ -47,7 +47,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/globals" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector" - secretv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" ktls "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/tls" "github.com/arangodb/kube-arangodb/pkg/util/token" @@ -197,7 +197,7 @@ func (r *Resources) EnsureSecrets(ctx context.Context, cachedStatus inspectorInt return reconcileRequired.Reconcile(ctx) } -func (r *Resources) ensureTokenSecretFolder(ctx context.Context, cachedStatus inspectorInterface.Inspector, secrets secretv1.ModInterface, secretName, folderSecretName string) error { +func (r *Resources) ensureTokenSecretFolder(ctx context.Context, cachedStatus inspectorInterface.Inspector, secrets generic.ModClient[*core.Secret], secretName, folderSecretName string) error { if f, exists := cachedStatus.Secret().V1().GetSimple(folderSecretName); exists { if len(f.Data) == 0 { s, exists := cachedStatus.Secret().V1().GetSimple(secretName) @@ -295,7 +295,7 @@ func (r *Resources) ensureTokenSecretFolder(ctx context.Context, cachedStatus in return nil } -func (r *Resources) ensureTokenSecret(ctx context.Context, cachedStatus inspectorInterface.Inspector, secrets secretv1.ModInterface, secretName string) error { +func (r *Resources) ensureTokenSecret(ctx context.Context, cachedStatus inspectorInterface.Inspector, secrets generic.ModClient[*core.Secret], secretName string) error { if _, exists := cachedStatus.Secret().V1().GetSimple(secretName); !exists { return r.createTokenSecret(ctx, secrets, secretName) } @@ -303,7 +303,7 @@ func (r *Resources) ensureTokenSecret(ctx context.Context, cachedStatus inspecto return nil } -func (r *Resources) ensureSecretWithEmptyKey(ctx context.Context, cachedStatus inspectorInterface.Inspector, secrets secretv1.ModInterface, secretName, keyName string) error { +func (r *Resources) ensureSecretWithEmptyKey(ctx context.Context, cachedStatus inspectorInterface.Inspector, secrets generic.ModClient[*core.Secret], secretName, keyName string) error { if _, exists := cachedStatus.Secret().V1().GetSimple(secretName); !exists { return r.createSecretWithKey(ctx, secrets, secretName, keyName, nil) } @@ -311,7 +311,7 @@ func (r *Resources) ensureSecretWithEmptyKey(ctx context.Context, cachedStatus i return nil } -func (r *Resources) createSecretWithMod(ctx context.Context, secrets secretv1.ModInterface, secretName string, f func(s *core.Secret)) error { +func (r *Resources) createSecretWithMod(ctx context.Context, secrets generic.ModClient[*core.Secret], secretName string, f func(s *core.Secret)) error { // Create secret secret := &core.Secret{ ObjectMeta: meta.ObjectMeta{ @@ -337,13 +337,13 @@ func (r *Resources) createSecretWithMod(ctx context.Context, secrets secretv1.Mo return errors.Reconcile() } -func (r *Resources) createSecretWithKey(ctx context.Context, secrets secretv1.ModInterface, secretName, keyName string, value []byte) error { +func (r *Resources) createSecretWithKey(ctx context.Context, secrets generic.ModClient[*core.Secret], secretName, keyName string, value []byte) error { return r.createSecretWithMod(ctx, secrets, secretName, func(s *core.Secret) { s.Data[keyName] = value }) } -func (r *Resources) createTokenSecret(ctx context.Context, secrets secretv1.ModInterface, secretName string) error { +func (r *Resources) createTokenSecret(ctx context.Context, secrets generic.ModClient[*core.Secret], secretName string) error { tokenData := make([]byte, 32) util.Rand().Read(tokenData) token := hex.EncodeToString(tokenData) @@ -364,7 +364,7 @@ func (r *Resources) createTokenSecret(ctx context.Context, secrets secretv1.ModI return errors.Reconcile() } -func (r *Resources) ensureEncryptionKeyfolderSecret(ctx context.Context, cachedStatus inspectorInterface.Inspector, secrets secretv1.ModInterface, keyfileSecretName, secretName string) error { +func (r *Resources) ensureEncryptionKeyfolderSecret(ctx context.Context, cachedStatus inspectorInterface.Inspector, secrets generic.ModClient[*core.Secret], keyfileSecretName, secretName string) error { _, folderExists := cachedStatus.Secret().V1().GetSimple(secretName) keyfile, exists := cachedStatus.Secret().V1().GetSimple(keyfileSecretName) @@ -401,7 +401,7 @@ func (r *Resources) ensureEncryptionKeyfolderSecret(ctx context.Context, cachedS } func AppendKeyfileToKeyfolder(ctx context.Context, cachedStatus inspectorInterface.Inspector, - secrets secretv1.ModInterface, ownerRef *meta.OwnerReference, secretName string, encryptionKey []byte) error { + secrets generic.ModClient[*core.Secret], ownerRef *meta.OwnerReference, secretName string, encryptionKey []byte) error { encSha := fmt.Sprintf("%0x", sha256.Sum256(encryptionKey)) if _, exists := cachedStatus.Secret().V1().GetSimple(secretName); !exists { @@ -443,7 +443,7 @@ var ( // ensureExporterTokenSecret checks if a secret with given name exists in the namespace // of the deployment. If not, it will add such a secret with correct access. func (r *Resources) ensureExporterTokenSecret(ctx context.Context, cachedStatus inspectorInterface.Inspector, - secrets secretv1.ModInterface, tokenSecretName, secretSecretName string) error { + secrets generic.ModClient[*core.Secret], tokenSecretName, secretSecretName string) error { if update, exists, err := r.ensureExporterTokenSecretCreateRequired(cachedStatus, tokenSecretName, secretSecretName); err != nil { return err } else if update { @@ -513,7 +513,7 @@ func (r *Resources) ensureExporterTokenSecretCreateRequired(cachedStatus inspect // ensureTLSCACertificateSecret checks if a secret with given name exists in the namespace // of the deployment. If not, it will add such a secret with a generated CA certificate. -func (r *Resources) ensureTLSCACertificateSecret(ctx context.Context, cachedStatus inspectorInterface.Inspector, secrets secretv1.ModInterface, spec api.TLSSpec) error { +func (r *Resources) ensureTLSCACertificateSecret(ctx context.Context, cachedStatus inspectorInterface.Inspector, secrets generic.ModClient[*core.Secret], spec api.TLSSpec) error { if _, exists := cachedStatus.Secret().V1().GetSimple(spec.GetCASecretName()); !exists { // Secret not found, create it apiObject := r.context.GetAPIObject() @@ -537,7 +537,7 @@ func (r *Resources) ensureTLSCACertificateSecret(ctx context.Context, cachedStat // ensureClientAuthCACertificateSecret checks if a secret with given name exists in the namespace // of the deployment. If not, it will add such a secret with a generated CA certificate. -func (r *Resources) ensureClientAuthCACertificateSecret(ctx context.Context, cachedStatus inspectorInterface.Inspector, secrets secretv1.ModInterface, spec api.SyncAuthenticationSpec) error { +func (r *Resources) ensureClientAuthCACertificateSecret(ctx context.Context, cachedStatus inspectorInterface.Inspector, secrets generic.ModClient[*core.Secret], spec api.SyncAuthenticationSpec) error { if _, exists := cachedStatus.Secret().V1().GetSimple(spec.GetClientCASecretName()); !exists { // Secret not found, create it apiObject := r.context.GetAPIObject() diff --git a/pkg/deployment/resources/services.go b/pkg/deployment/resources/services.go index 6e691e41a..96bca9ffc 100644 --- a/pkg/deployment/resources/services.go +++ b/pkg/deployment/resources/services.go @@ -38,8 +38,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/globals" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangomember/v1" - servicev1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/service/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/patcher" ) @@ -302,7 +301,7 @@ func (r *Resources) EnsureServices(ctx context.Context, cachedStatus inspectorIn // ensureExternalAccessServices ensures all services needed for a deployment. func (r *Resources) ensureExternalAccessServices(ctx context.Context, cachedStatus inspectorInterface.Inspector, - svcs servicev1.ModInterface, eaServiceName, role string, port int, noneIsClusterIP bool, withLeader bool, + svcs generic.ModClient[*core.Service], eaServiceName, role string, port int, noneIsClusterIP bool, withLeader bool, spec api.ExternalAccessSpec, apiObject k8sutil.APIObject) error { eaPorts, eaSelector := k8sutil.ExternalAccessDetails(port, spec.GetNodePort(), apiObject.GetName(), role, withLeader) @@ -475,7 +474,7 @@ func (r *Resources) ensureExternalAccessManagedServices(ctx context.Context, cac } // CreateServerServicePortsWithSidecars returns ports for the service. -func CreateServerServicePortsWithSidecars(amInspector v1.Inspector, am string) []core.ServicePort { +func CreateServerServicePortsWithSidecars(amInspector generic.Inspector[*api.ArangoMember], am string) []core.ServicePort { // Create service port for the `server` container. ports := []core.ServicePort{CreateServerServicePort()} diff --git a/pkg/exporter/exporter.go b/pkg/exporter/exporter.go index b3f0a98d3..d5babb9f8 100644 --- a/pkg/exporter/exporter.go +++ b/pkg/exporter/exporter.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,13 +20,6 @@ package exporter -import ( - "net/http" - "time" - - operatorHTTP "github.com/arangodb/kube-arangodb/pkg/util/http" -) - type Authentication func() (string, error) // CreateArangodJwtAuthorizationHeader calculates a JWT authorization header, for authorization @@ -35,27 +28,3 @@ type Authentication func() (string, error) func CreateArangodJwtAuthorizationHeader(jwt string) (string, error) { return "bearer " + jwt, nil } - -func NewExporter(endpoint string, url string, handler http.Handler) operatorHTTP.PlainServer { - s := http.NewServeMux() - - s.Handle(url, handler) - - s.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - w.Write([]byte(` - ArangoDB Exporter - -

ArangoDB Exporter

-

Metrics

- - `)) - }) - - return operatorHTTP.NewServer(&http.Server{ - Addr: endpoint, - ReadTimeout: time.Second * 30, - ReadHeaderTimeout: time.Second * 15, - WriteTimeout: time.Second * 30, - Handler: s, - }) -} diff --git a/pkg/generated/clientset/versioned/clientset.go b/pkg/generated/clientset/versioned/clientset.go index a4de07d21..e8ca3d516 100644 --- a/pkg/generated/clientset/versioned/clientset.go +++ b/pkg/generated/clientset/versioned/clientset.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -34,6 +34,7 @@ import ( mlv1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/ml/v1alpha1" mlv1beta1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/ml/v1beta1" networkingv1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/networking/v1alpha1" + platformv1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/platform/v1alpha1" replicationv1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/replication/v1" replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/replication/v2alpha1" schedulerv1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1" @@ -54,6 +55,7 @@ type Interface interface { MlV1alpha1() mlv1alpha1.MlV1alpha1Interface MlV1beta1() mlv1beta1.MlV1beta1Interface NetworkingV1alpha1() networkingv1alpha1.NetworkingV1alpha1Interface + PlatformV1alpha1() platformv1alpha1.PlatformV1alpha1Interface ReplicationV1() replicationv1.ReplicationV1Interface ReplicationV2alpha1() replicationv2alpha1.ReplicationV2alpha1Interface SchedulerV1alpha1() schedulerv1alpha1.SchedulerV1alpha1Interface @@ -72,6 +74,7 @@ type Clientset struct { mlV1alpha1 *mlv1alpha1.MlV1alpha1Client mlV1beta1 *mlv1beta1.MlV1beta1Client networkingV1alpha1 *networkingv1alpha1.NetworkingV1alpha1Client + platformV1alpha1 *platformv1alpha1.PlatformV1alpha1Client replicationV1 *replicationv1.ReplicationV1Client replicationV2alpha1 *replicationv2alpha1.ReplicationV2alpha1Client schedulerV1alpha1 *schedulerv1alpha1.SchedulerV1alpha1Client @@ -119,6 +122,11 @@ func (c *Clientset) NetworkingV1alpha1() networkingv1alpha1.NetworkingV1alpha1In return c.networkingV1alpha1 } +// PlatformV1alpha1 retrieves the PlatformV1alpha1Client +func (c *Clientset) PlatformV1alpha1() platformv1alpha1.PlatformV1alpha1Interface { + return c.platformV1alpha1 +} + // ReplicationV1 retrieves the ReplicationV1Client func (c *Clientset) ReplicationV1() replicationv1.ReplicationV1Interface { return c.replicationV1 @@ -220,6 +228,10 @@ func NewForConfigAndClient(c *rest.Config, httpClient *http.Client) (*Clientset, if err != nil { return nil, err } + cs.platformV1alpha1, err = platformv1alpha1.NewForConfigAndClient(&configShallowCopy, httpClient) + if err != nil { + return nil, err + } cs.replicationV1, err = replicationv1.NewForConfigAndClient(&configShallowCopy, httpClient) if err != nil { return nil, err @@ -269,6 +281,7 @@ func New(c rest.Interface) *Clientset { cs.mlV1alpha1 = mlv1alpha1.New(c) cs.mlV1beta1 = mlv1beta1.New(c) cs.networkingV1alpha1 = networkingv1alpha1.New(c) + cs.platformV1alpha1 = platformv1alpha1.New(c) cs.replicationV1 = replicationv1.New(c) cs.replicationV2alpha1 = replicationv2alpha1.New(c) cs.schedulerV1alpha1 = schedulerv1alpha1.New(c) diff --git a/pkg/generated/clientset/versioned/fake/clientset_generated.go b/pkg/generated/clientset/versioned/fake/clientset_generated.go index 661164523..87a5731cc 100644 --- a/pkg/generated/clientset/versioned/fake/clientset_generated.go +++ b/pkg/generated/clientset/versioned/fake/clientset_generated.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -40,6 +40,8 @@ import ( fakemlv1beta1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake" networkingv1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/networking/v1alpha1" fakenetworkingv1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake" + platformv1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/platform/v1alpha1" + fakeplatformv1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake" replicationv1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/replication/v1" fakereplicationv1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/replication/v1/fake" replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/replication/v2alpha1" @@ -59,8 +61,12 @@ import ( // NewSimpleClientset returns a clientset that will respond with the provided objects. // It's backed by a very simple object tracker that processes creates, updates and deletions as-is, -// without applying any validations and/or defaults. It shouldn't be considered a replacement +// without applying any field management, validations and/or defaults. It shouldn't be considered a replacement // for a real clientset and is mostly useful in simple unit tests. +// +// DEPRECATED: NewClientset replaces this with support for field management, which significantly improves +// server side apply testing. NewClientset is only available when apply configurations are generated (e.g. +// via --with-applyconfig). func NewSimpleClientset(objects ...runtime.Object) *Clientset { o := testing.NewObjectTracker(scheme, codecs.UniversalDecoder()) for _, obj := range objects { @@ -147,6 +153,11 @@ func (c *Clientset) NetworkingV1alpha1() networkingv1alpha1.NetworkingV1alpha1In return &fakenetworkingv1alpha1.FakeNetworkingV1alpha1{Fake: &c.Fake} } +// PlatformV1alpha1 retrieves the PlatformV1alpha1Client +func (c *Clientset) PlatformV1alpha1() platformv1alpha1.PlatformV1alpha1Interface { + return &fakeplatformv1alpha1.FakePlatformV1alpha1{Fake: &c.Fake} +} + // ReplicationV1 retrieves the ReplicationV1Client func (c *Clientset) ReplicationV1() replicationv1.ReplicationV1Interface { return &fakereplicationv1.FakeReplicationV1{Fake: &c.Fake} diff --git a/pkg/generated/clientset/versioned/fake/doc.go b/pkg/generated/clientset/versioned/fake/doc.go index c5ff2afb0..a71387bed 100644 --- a/pkg/generated/clientset/versioned/fake/doc.go +++ b/pkg/generated/clientset/versioned/fake/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/fake/register.go b/pkg/generated/clientset/versioned/fake/register.go index 1804338cb..3cb06e9a9 100644 --- a/pkg/generated/clientset/versioned/fake/register.go +++ b/pkg/generated/clientset/versioned/fake/register.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -31,6 +31,7 @@ import ( mlv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" mlv1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" networkingv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" + platformv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" replicationv1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v1" replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1" schedulerv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1" @@ -55,6 +56,7 @@ var localSchemeBuilder = runtime.SchemeBuilder{ mlv1alpha1.AddToScheme, mlv1beta1.AddToScheme, networkingv1alpha1.AddToScheme, + platformv1alpha1.AddToScheme, replicationv1.AddToScheme, replicationv2alpha1.AddToScheme, schedulerv1alpha1.AddToScheme, diff --git a/pkg/generated/clientset/versioned/scheme/doc.go b/pkg/generated/clientset/versioned/scheme/doc.go index ad865a875..8d2a4861a 100644 --- a/pkg/generated/clientset/versioned/scheme/doc.go +++ b/pkg/generated/clientset/versioned/scheme/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/scheme/register.go b/pkg/generated/clientset/versioned/scheme/register.go index 3e5ad3944..a6a7c34ad 100644 --- a/pkg/generated/clientset/versioned/scheme/register.go +++ b/pkg/generated/clientset/versioned/scheme/register.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -31,6 +31,7 @@ import ( mlv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" mlv1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" networkingv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" + platformv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" replicationv1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v1" replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1" schedulerv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1" @@ -55,6 +56,7 @@ var localSchemeBuilder = runtime.SchemeBuilder{ mlv1alpha1.AddToScheme, mlv1beta1.AddToScheme, networkingv1alpha1.AddToScheme, + platformv1alpha1.AddToScheme, replicationv1.AddToScheme, replicationv2alpha1.AddToScheme, schedulerv1alpha1.AddToScheme, diff --git a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/analytics_client.go b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/analytics_client.go index e6143718f..734bc99c4 100644 --- a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/analytics_client.go +++ b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/analytics_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/doc.go b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/doc.go index f45dab6c5..2ad43a88a 100644 --- a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/doc.go +++ b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/fake/doc.go b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/fake/doc.go index cc487d814..cb60dd032 100644 --- a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/fake/doc.go +++ b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/fake/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/fake/fake_analytics_client.go b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/fake/fake_analytics_client.go index 44ddf3e43..301311257 100644 --- a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/fake/fake_analytics_client.go +++ b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/fake/fake_analytics_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/fake/fake_graphanalyticsengine.go b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/fake/fake_graphanalyticsengine.go index b10ff47e3..0258f8f11 100644 --- a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/fake/fake_graphanalyticsengine.go +++ b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/fake/fake_graphanalyticsengine.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var graphanalyticsenginesKind = v1alpha1.SchemeGroupVersion.WithKind("GraphAnaly // Get takes name of the graphAnalyticsEngine, and returns the corresponding graphAnalyticsEngine object, and an error if there is any. func (c *FakeGraphAnalyticsEngines) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) { + emptyResult := &v1alpha1.GraphAnalyticsEngine{} obj, err := c.Fake. - Invokes(testing.NewGetAction(graphanalyticsenginesResource, c.ns, name), &v1alpha1.GraphAnalyticsEngine{}) + Invokes(testing.NewGetActionWithOptions(graphanalyticsenginesResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.GraphAnalyticsEngine), err } // List takes label and field selectors, and returns the list of GraphAnalyticsEngines that match those selectors. func (c *FakeGraphAnalyticsEngines) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.GraphAnalyticsEngineList, err error) { + emptyResult := &v1alpha1.GraphAnalyticsEngineList{} obj, err := c.Fake. - Invokes(testing.NewListAction(graphanalyticsenginesResource, graphanalyticsenginesKind, c.ns, opts), &v1alpha1.GraphAnalyticsEngineList{}) + Invokes(testing.NewListActionWithOptions(graphanalyticsenginesResource, graphanalyticsenginesKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeGraphAnalyticsEngines) List(ctx context.Context, opts v1.ListOption // Watch returns a watch.Interface that watches the requested graphAnalyticsEngines. func (c *FakeGraphAnalyticsEngines) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(graphanalyticsenginesResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(graphanalyticsenginesResource, c.ns, opts)) } // Create takes the representation of a graphAnalyticsEngine and creates it. Returns the server's representation of the graphAnalyticsEngine, and an error, if there is any. func (c *FakeGraphAnalyticsEngines) Create(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.CreateOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) { + emptyResult := &v1alpha1.GraphAnalyticsEngine{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(graphanalyticsenginesResource, c.ns, graphAnalyticsEngine), &v1alpha1.GraphAnalyticsEngine{}) + Invokes(testing.NewCreateActionWithOptions(graphanalyticsenginesResource, c.ns, graphAnalyticsEngine, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.GraphAnalyticsEngine), err } // Update takes the representation of a graphAnalyticsEngine and updates it. Returns the server's representation of the graphAnalyticsEngine, and an error, if there is any. func (c *FakeGraphAnalyticsEngines) Update(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.UpdateOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) { + emptyResult := &v1alpha1.GraphAnalyticsEngine{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(graphanalyticsenginesResource, c.ns, graphAnalyticsEngine), &v1alpha1.GraphAnalyticsEngine{}) + Invokes(testing.NewUpdateActionWithOptions(graphanalyticsenginesResource, c.ns, graphAnalyticsEngine, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.GraphAnalyticsEngine), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeGraphAnalyticsEngines) UpdateStatus(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.UpdateOptions) (*v1alpha1.GraphAnalyticsEngine, error) { +func (c *FakeGraphAnalyticsEngines) UpdateStatus(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.UpdateOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) { + emptyResult := &v1alpha1.GraphAnalyticsEngine{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(graphanalyticsenginesResource, "status", c.ns, graphAnalyticsEngine), &v1alpha1.GraphAnalyticsEngine{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(graphanalyticsenginesResource, "status", c.ns, graphAnalyticsEngine, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.GraphAnalyticsEngine), err } @@ -127,7 +132,7 @@ func (c *FakeGraphAnalyticsEngines) Delete(ctx context.Context, name string, opt // DeleteCollection deletes a collection of objects. func (c *FakeGraphAnalyticsEngines) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(graphanalyticsenginesResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(graphanalyticsenginesResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1alpha1.GraphAnalyticsEngineList{}) return err @@ -135,11 +140,12 @@ func (c *FakeGraphAnalyticsEngines) DeleteCollection(ctx context.Context, opts v // Patch applies the patch and returns the patched graphAnalyticsEngine. func (c *FakeGraphAnalyticsEngines) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.GraphAnalyticsEngine, err error) { + emptyResult := &v1alpha1.GraphAnalyticsEngine{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(graphanalyticsenginesResource, c.ns, name, pt, data, subresources...), &v1alpha1.GraphAnalyticsEngine{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(graphanalyticsenginesResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.GraphAnalyticsEngine), err } diff --git a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/generated_expansion.go index 7cdfc22bf..c06486708 100644 --- a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/generated_expansion.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/graphanalyticsengine.go b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/graphanalyticsengine.go index 2ca7273b5..c681333af 100644 --- a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/graphanalyticsengine.go +++ b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/graphanalyticsengine.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1alpha1 import ( "context" - "time" v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // GraphAnalyticsEnginesGetter has a method to return a GraphAnalyticsEngineInterface. @@ -44,6 +43,7 @@ type GraphAnalyticsEnginesGetter interface { type GraphAnalyticsEngineInterface interface { Create(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.CreateOptions) (*v1alpha1.GraphAnalyticsEngine, error) Update(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.UpdateOptions) (*v1alpha1.GraphAnalyticsEngine, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.UpdateOptions) (*v1alpha1.GraphAnalyticsEngine, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type GraphAnalyticsEngineInterface interface { // graphAnalyticsEngines implements GraphAnalyticsEngineInterface type graphAnalyticsEngines struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1alpha1.GraphAnalyticsEngine, *v1alpha1.GraphAnalyticsEngineList] } // newGraphAnalyticsEngines returns a GraphAnalyticsEngines func newGraphAnalyticsEngines(c *AnalyticsV1alpha1Client, namespace string) *graphAnalyticsEngines { return &graphAnalyticsEngines{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1alpha1.GraphAnalyticsEngine, *v1alpha1.GraphAnalyticsEngineList]( + "graphanalyticsengines", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1alpha1.GraphAnalyticsEngine { return &v1alpha1.GraphAnalyticsEngine{} }, + func() *v1alpha1.GraphAnalyticsEngineList { return &v1alpha1.GraphAnalyticsEngineList{} }), } } - -// Get takes name of the graphAnalyticsEngine, and returns the corresponding graphAnalyticsEngine object, and an error if there is any. -func (c *graphAnalyticsEngines) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) { - result = &v1alpha1.GraphAnalyticsEngine{} - err = c.client.Get(). - Namespace(c.ns). - Resource("graphanalyticsengines"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of GraphAnalyticsEngines that match those selectors. -func (c *graphAnalyticsEngines) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.GraphAnalyticsEngineList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1alpha1.GraphAnalyticsEngineList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("graphanalyticsengines"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested graphAnalyticsEngines. -func (c *graphAnalyticsEngines) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("graphanalyticsengines"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a graphAnalyticsEngine and creates it. Returns the server's representation of the graphAnalyticsEngine, and an error, if there is any. -func (c *graphAnalyticsEngines) Create(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.CreateOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) { - result = &v1alpha1.GraphAnalyticsEngine{} - err = c.client.Post(). - Namespace(c.ns). - Resource("graphanalyticsengines"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(graphAnalyticsEngine). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a graphAnalyticsEngine and updates it. Returns the server's representation of the graphAnalyticsEngine, and an error, if there is any. -func (c *graphAnalyticsEngines) Update(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.UpdateOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) { - result = &v1alpha1.GraphAnalyticsEngine{} - err = c.client.Put(). - Namespace(c.ns). - Resource("graphanalyticsengines"). - Name(graphAnalyticsEngine.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(graphAnalyticsEngine). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *graphAnalyticsEngines) UpdateStatus(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.UpdateOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) { - result = &v1alpha1.GraphAnalyticsEngine{} - err = c.client.Put(). - Namespace(c.ns). - Resource("graphanalyticsengines"). - Name(graphAnalyticsEngine.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(graphAnalyticsEngine). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the graphAnalyticsEngine and deletes it. Returns an error if one occurs. -func (c *graphAnalyticsEngines) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("graphanalyticsengines"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *graphAnalyticsEngines) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("graphanalyticsengines"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched graphAnalyticsEngine. -func (c *graphAnalyticsEngines) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.GraphAnalyticsEngine, err error) { - result = &v1alpha1.GraphAnalyticsEngine{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("graphanalyticsengines"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/apps/v1/apps_client.go b/pkg/generated/clientset/versioned/typed/apps/v1/apps_client.go index 459dfa66c..67727e335 100644 --- a/pkg/generated/clientset/versioned/typed/apps/v1/apps_client.go +++ b/pkg/generated/clientset/versioned/typed/apps/v1/apps_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/apps/v1/arangojob.go b/pkg/generated/clientset/versioned/typed/apps/v1/arangojob.go index a6a4d1ec8..939a73d67 100644 --- a/pkg/generated/clientset/versioned/typed/apps/v1/arangojob.go +++ b/pkg/generated/clientset/versioned/typed/apps/v1/arangojob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1 import ( "context" - "time" v1 "github.com/arangodb/kube-arangodb/pkg/apis/apps/v1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoJobsGetter has a method to return a ArangoJobInterface. @@ -44,6 +43,7 @@ type ArangoJobsGetter interface { type ArangoJobInterface interface { Create(ctx context.Context, arangoJob *v1.ArangoJob, opts metav1.CreateOptions) (*v1.ArangoJob, error) Update(ctx context.Context, arangoJob *v1.ArangoJob, opts metav1.UpdateOptions) (*v1.ArangoJob, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoJob *v1.ArangoJob, opts metav1.UpdateOptions) (*v1.ArangoJob, error) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoJobInterface interface { // arangoJobs implements ArangoJobInterface type arangoJobs struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1.ArangoJob, *v1.ArangoJobList] } // newArangoJobs returns a ArangoJobs func newArangoJobs(c *AppsV1Client, namespace string) *arangoJobs { return &arangoJobs{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1.ArangoJob, *v1.ArangoJobList]( + "arangojobs", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1.ArangoJob { return &v1.ArangoJob{} }, + func() *v1.ArangoJobList { return &v1.ArangoJobList{} }), } } - -// Get takes name of the arangoJob, and returns the corresponding arangoJob object, and an error if there is any. -func (c *arangoJobs) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoJob, err error) { - result = &v1.ArangoJob{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangojobs"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoJobs that match those selectors. -func (c *arangoJobs) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoJobList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1.ArangoJobList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangojobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoJobs. -func (c *arangoJobs) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangojobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoJob and creates it. Returns the server's representation of the arangoJob, and an error, if there is any. -func (c *arangoJobs) Create(ctx context.Context, arangoJob *v1.ArangoJob, opts metav1.CreateOptions) (result *v1.ArangoJob, err error) { - result = &v1.ArangoJob{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangojobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoJob). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoJob and updates it. Returns the server's representation of the arangoJob, and an error, if there is any. -func (c *arangoJobs) Update(ctx context.Context, arangoJob *v1.ArangoJob, opts metav1.UpdateOptions) (result *v1.ArangoJob, err error) { - result = &v1.ArangoJob{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangojobs"). - Name(arangoJob.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoJob). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoJobs) UpdateStatus(ctx context.Context, arangoJob *v1.ArangoJob, opts metav1.UpdateOptions) (result *v1.ArangoJob, err error) { - result = &v1.ArangoJob{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangojobs"). - Name(arangoJob.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoJob). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoJob and deletes it. Returns an error if one occurs. -func (c *arangoJobs) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangojobs"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoJobs) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangojobs"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoJob. -func (c *arangoJobs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoJob, err error) { - result = &v1.ArangoJob{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangojobs"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/apps/v1/doc.go b/pkg/generated/clientset/versioned/typed/apps/v1/doc.go index ad6cab742..825ae42b5 100644 --- a/pkg/generated/clientset/versioned/typed/apps/v1/doc.go +++ b/pkg/generated/clientset/versioned/typed/apps/v1/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/apps/v1/fake/doc.go b/pkg/generated/clientset/versioned/typed/apps/v1/fake/doc.go index cc487d814..cb60dd032 100644 --- a/pkg/generated/clientset/versioned/typed/apps/v1/fake/doc.go +++ b/pkg/generated/clientset/versioned/typed/apps/v1/fake/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/apps/v1/fake/fake_apps_client.go b/pkg/generated/clientset/versioned/typed/apps/v1/fake/fake_apps_client.go index 974d37e67..873aefabe 100644 --- a/pkg/generated/clientset/versioned/typed/apps/v1/fake/fake_apps_client.go +++ b/pkg/generated/clientset/versioned/typed/apps/v1/fake/fake_apps_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/apps/v1/fake/fake_arangojob.go b/pkg/generated/clientset/versioned/typed/apps/v1/fake/fake_arangojob.go index 55b5bdd32..2c9ae54cd 100644 --- a/pkg/generated/clientset/versioned/typed/apps/v1/fake/fake_arangojob.go +++ b/pkg/generated/clientset/versioned/typed/apps/v1/fake/fake_arangojob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangojobsKind = v1.SchemeGroupVersion.WithKind("ArangoJob") // Get takes name of the arangoJob, and returns the corresponding arangoJob object, and an error if there is any. func (c *FakeArangoJobs) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoJob, err error) { + emptyResult := &v1.ArangoJob{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangojobsResource, c.ns, name), &v1.ArangoJob{}) + Invokes(testing.NewGetActionWithOptions(arangojobsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoJob), err } // List takes label and field selectors, and returns the list of ArangoJobs that match those selectors. func (c *FakeArangoJobs) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoJobList, err error) { + emptyResult := &v1.ArangoJobList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangojobsResource, arangojobsKind, c.ns, opts), &v1.ArangoJobList{}) + Invokes(testing.NewListActionWithOptions(arangojobsResource, arangojobsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoJobs) List(ctx context.Context, opts metav1.ListOptions) (res // Watch returns a watch.Interface that watches the requested arangoJobs. func (c *FakeArangoJobs) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangojobsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangojobsResource, c.ns, opts)) } // Create takes the representation of a arangoJob and creates it. Returns the server's representation of the arangoJob, and an error, if there is any. func (c *FakeArangoJobs) Create(ctx context.Context, arangoJob *v1.ArangoJob, opts metav1.CreateOptions) (result *v1.ArangoJob, err error) { + emptyResult := &v1.ArangoJob{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangojobsResource, c.ns, arangoJob), &v1.ArangoJob{}) + Invokes(testing.NewCreateActionWithOptions(arangojobsResource, c.ns, arangoJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoJob), err } // Update takes the representation of a arangoJob and updates it. Returns the server's representation of the arangoJob, and an error, if there is any. func (c *FakeArangoJobs) Update(ctx context.Context, arangoJob *v1.ArangoJob, opts metav1.UpdateOptions) (result *v1.ArangoJob, err error) { + emptyResult := &v1.ArangoJob{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangojobsResource, c.ns, arangoJob), &v1.ArangoJob{}) + Invokes(testing.NewUpdateActionWithOptions(arangojobsResource, c.ns, arangoJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoJob), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoJobs) UpdateStatus(ctx context.Context, arangoJob *v1.ArangoJob, opts metav1.UpdateOptions) (*v1.ArangoJob, error) { +func (c *FakeArangoJobs) UpdateStatus(ctx context.Context, arangoJob *v1.ArangoJob, opts metav1.UpdateOptions) (result *v1.ArangoJob, err error) { + emptyResult := &v1.ArangoJob{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangojobsResource, "status", c.ns, arangoJob), &v1.ArangoJob{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangojobsResource, "status", c.ns, arangoJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoJob), err } @@ -127,7 +132,7 @@ func (c *FakeArangoJobs) Delete(ctx context.Context, name string, opts metav1.De // DeleteCollection deletes a collection of objects. func (c *FakeArangoJobs) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangojobsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangojobsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1.ArangoJobList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoJobs) DeleteCollection(ctx context.Context, opts metav1.Delet // Patch applies the patch and returns the patched arangoJob. func (c *FakeArangoJobs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoJob, err error) { + emptyResult := &v1.ArangoJob{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangojobsResource, c.ns, name, pt, data, subresources...), &v1.ArangoJob{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangojobsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoJob), err } diff --git a/pkg/generated/clientset/versioned/typed/apps/v1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/apps/v1/generated_expansion.go index f65723379..aab621768 100644 --- a/pkg/generated/clientset/versioned/typed/apps/v1/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/apps/v1/generated_expansion.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/backup/v1/arangobackup.go b/pkg/generated/clientset/versioned/typed/backup/v1/arangobackup.go index 29d58ce8b..809652367 100644 --- a/pkg/generated/clientset/versioned/typed/backup/v1/arangobackup.go +++ b/pkg/generated/clientset/versioned/typed/backup/v1/arangobackup.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1 import ( "context" - "time" v1 "github.com/arangodb/kube-arangodb/pkg/apis/backup/v1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoBackupsGetter has a method to return a ArangoBackupInterface. @@ -44,6 +43,7 @@ type ArangoBackupsGetter interface { type ArangoBackupInterface interface { Create(ctx context.Context, arangoBackup *v1.ArangoBackup, opts metav1.CreateOptions) (*v1.ArangoBackup, error) Update(ctx context.Context, arangoBackup *v1.ArangoBackup, opts metav1.UpdateOptions) (*v1.ArangoBackup, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoBackup *v1.ArangoBackup, opts metav1.UpdateOptions) (*v1.ArangoBackup, error) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoBackupInterface interface { // arangoBackups implements ArangoBackupInterface type arangoBackups struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1.ArangoBackup, *v1.ArangoBackupList] } // newArangoBackups returns a ArangoBackups func newArangoBackups(c *BackupV1Client, namespace string) *arangoBackups { return &arangoBackups{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1.ArangoBackup, *v1.ArangoBackupList]( + "arangobackups", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1.ArangoBackup { return &v1.ArangoBackup{} }, + func() *v1.ArangoBackupList { return &v1.ArangoBackupList{} }), } } - -// Get takes name of the arangoBackup, and returns the corresponding arangoBackup object, and an error if there is any. -func (c *arangoBackups) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoBackup, err error) { - result = &v1.ArangoBackup{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangobackups"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoBackups that match those selectors. -func (c *arangoBackups) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoBackupList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1.ArangoBackupList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangobackups"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoBackups. -func (c *arangoBackups) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangobackups"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoBackup and creates it. Returns the server's representation of the arangoBackup, and an error, if there is any. -func (c *arangoBackups) Create(ctx context.Context, arangoBackup *v1.ArangoBackup, opts metav1.CreateOptions) (result *v1.ArangoBackup, err error) { - result = &v1.ArangoBackup{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangobackups"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoBackup). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoBackup and updates it. Returns the server's representation of the arangoBackup, and an error, if there is any. -func (c *arangoBackups) Update(ctx context.Context, arangoBackup *v1.ArangoBackup, opts metav1.UpdateOptions) (result *v1.ArangoBackup, err error) { - result = &v1.ArangoBackup{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangobackups"). - Name(arangoBackup.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoBackup). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoBackups) UpdateStatus(ctx context.Context, arangoBackup *v1.ArangoBackup, opts metav1.UpdateOptions) (result *v1.ArangoBackup, err error) { - result = &v1.ArangoBackup{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangobackups"). - Name(arangoBackup.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoBackup). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoBackup and deletes it. Returns an error if one occurs. -func (c *arangoBackups) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangobackups"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoBackups) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangobackups"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoBackup. -func (c *arangoBackups) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoBackup, err error) { - result = &v1.ArangoBackup{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangobackups"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/backup/v1/arangobackuppolicy.go b/pkg/generated/clientset/versioned/typed/backup/v1/arangobackuppolicy.go index 26d503e9f..aaacafb9d 100644 --- a/pkg/generated/clientset/versioned/typed/backup/v1/arangobackuppolicy.go +++ b/pkg/generated/clientset/versioned/typed/backup/v1/arangobackuppolicy.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1 import ( "context" - "time" v1 "github.com/arangodb/kube-arangodb/pkg/apis/backup/v1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoBackupPoliciesGetter has a method to return a ArangoBackupPolicyInterface. @@ -44,6 +43,7 @@ type ArangoBackupPoliciesGetter interface { type ArangoBackupPolicyInterface interface { Create(ctx context.Context, arangoBackupPolicy *v1.ArangoBackupPolicy, opts metav1.CreateOptions) (*v1.ArangoBackupPolicy, error) Update(ctx context.Context, arangoBackupPolicy *v1.ArangoBackupPolicy, opts metav1.UpdateOptions) (*v1.ArangoBackupPolicy, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoBackupPolicy *v1.ArangoBackupPolicy, opts metav1.UpdateOptions) (*v1.ArangoBackupPolicy, error) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoBackupPolicyInterface interface { // arangoBackupPolicies implements ArangoBackupPolicyInterface type arangoBackupPolicies struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1.ArangoBackupPolicy, *v1.ArangoBackupPolicyList] } // newArangoBackupPolicies returns a ArangoBackupPolicies func newArangoBackupPolicies(c *BackupV1Client, namespace string) *arangoBackupPolicies { return &arangoBackupPolicies{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1.ArangoBackupPolicy, *v1.ArangoBackupPolicyList]( + "arangobackuppolicies", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1.ArangoBackupPolicy { return &v1.ArangoBackupPolicy{} }, + func() *v1.ArangoBackupPolicyList { return &v1.ArangoBackupPolicyList{} }), } } - -// Get takes name of the arangoBackupPolicy, and returns the corresponding arangoBackupPolicy object, and an error if there is any. -func (c *arangoBackupPolicies) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoBackupPolicy, err error) { - result = &v1.ArangoBackupPolicy{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangobackuppolicies"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoBackupPolicies that match those selectors. -func (c *arangoBackupPolicies) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoBackupPolicyList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1.ArangoBackupPolicyList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangobackuppolicies"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoBackupPolicies. -func (c *arangoBackupPolicies) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangobackuppolicies"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoBackupPolicy and creates it. Returns the server's representation of the arangoBackupPolicy, and an error, if there is any. -func (c *arangoBackupPolicies) Create(ctx context.Context, arangoBackupPolicy *v1.ArangoBackupPolicy, opts metav1.CreateOptions) (result *v1.ArangoBackupPolicy, err error) { - result = &v1.ArangoBackupPolicy{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangobackuppolicies"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoBackupPolicy). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoBackupPolicy and updates it. Returns the server's representation of the arangoBackupPolicy, and an error, if there is any. -func (c *arangoBackupPolicies) Update(ctx context.Context, arangoBackupPolicy *v1.ArangoBackupPolicy, opts metav1.UpdateOptions) (result *v1.ArangoBackupPolicy, err error) { - result = &v1.ArangoBackupPolicy{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangobackuppolicies"). - Name(arangoBackupPolicy.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoBackupPolicy). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoBackupPolicies) UpdateStatus(ctx context.Context, arangoBackupPolicy *v1.ArangoBackupPolicy, opts metav1.UpdateOptions) (result *v1.ArangoBackupPolicy, err error) { - result = &v1.ArangoBackupPolicy{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangobackuppolicies"). - Name(arangoBackupPolicy.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoBackupPolicy). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoBackupPolicy and deletes it. Returns an error if one occurs. -func (c *arangoBackupPolicies) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangobackuppolicies"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoBackupPolicies) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangobackuppolicies"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoBackupPolicy. -func (c *arangoBackupPolicies) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoBackupPolicy, err error) { - result = &v1.ArangoBackupPolicy{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangobackuppolicies"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/backup/v1/backup_client.go b/pkg/generated/clientset/versioned/typed/backup/v1/backup_client.go index 02a4afb2f..6ef69c1c8 100644 --- a/pkg/generated/clientset/versioned/typed/backup/v1/backup_client.go +++ b/pkg/generated/clientset/versioned/typed/backup/v1/backup_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/backup/v1/doc.go b/pkg/generated/clientset/versioned/typed/backup/v1/doc.go index ad6cab742..825ae42b5 100644 --- a/pkg/generated/clientset/versioned/typed/backup/v1/doc.go +++ b/pkg/generated/clientset/versioned/typed/backup/v1/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/backup/v1/fake/doc.go b/pkg/generated/clientset/versioned/typed/backup/v1/fake/doc.go index cc487d814..cb60dd032 100644 --- a/pkg/generated/clientset/versioned/typed/backup/v1/fake/doc.go +++ b/pkg/generated/clientset/versioned/typed/backup/v1/fake/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/backup/v1/fake/fake_arangobackup.go b/pkg/generated/clientset/versioned/typed/backup/v1/fake/fake_arangobackup.go index fa883c0c7..8713a84f4 100644 --- a/pkg/generated/clientset/versioned/typed/backup/v1/fake/fake_arangobackup.go +++ b/pkg/generated/clientset/versioned/typed/backup/v1/fake/fake_arangobackup.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangobackupsKind = v1.SchemeGroupVersion.WithKind("ArangoBackup") // Get takes name of the arangoBackup, and returns the corresponding arangoBackup object, and an error if there is any. func (c *FakeArangoBackups) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoBackup, err error) { + emptyResult := &v1.ArangoBackup{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangobackupsResource, c.ns, name), &v1.ArangoBackup{}) + Invokes(testing.NewGetActionWithOptions(arangobackupsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoBackup), err } // List takes label and field selectors, and returns the list of ArangoBackups that match those selectors. func (c *FakeArangoBackups) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoBackupList, err error) { + emptyResult := &v1.ArangoBackupList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangobackupsResource, arangobackupsKind, c.ns, opts), &v1.ArangoBackupList{}) + Invokes(testing.NewListActionWithOptions(arangobackupsResource, arangobackupsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoBackups) List(ctx context.Context, opts metav1.ListOptions) ( // Watch returns a watch.Interface that watches the requested arangoBackups. func (c *FakeArangoBackups) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangobackupsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangobackupsResource, c.ns, opts)) } // Create takes the representation of a arangoBackup and creates it. Returns the server's representation of the arangoBackup, and an error, if there is any. func (c *FakeArangoBackups) Create(ctx context.Context, arangoBackup *v1.ArangoBackup, opts metav1.CreateOptions) (result *v1.ArangoBackup, err error) { + emptyResult := &v1.ArangoBackup{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangobackupsResource, c.ns, arangoBackup), &v1.ArangoBackup{}) + Invokes(testing.NewCreateActionWithOptions(arangobackupsResource, c.ns, arangoBackup, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoBackup), err } // Update takes the representation of a arangoBackup and updates it. Returns the server's representation of the arangoBackup, and an error, if there is any. func (c *FakeArangoBackups) Update(ctx context.Context, arangoBackup *v1.ArangoBackup, opts metav1.UpdateOptions) (result *v1.ArangoBackup, err error) { + emptyResult := &v1.ArangoBackup{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangobackupsResource, c.ns, arangoBackup), &v1.ArangoBackup{}) + Invokes(testing.NewUpdateActionWithOptions(arangobackupsResource, c.ns, arangoBackup, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoBackup), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoBackups) UpdateStatus(ctx context.Context, arangoBackup *v1.ArangoBackup, opts metav1.UpdateOptions) (*v1.ArangoBackup, error) { +func (c *FakeArangoBackups) UpdateStatus(ctx context.Context, arangoBackup *v1.ArangoBackup, opts metav1.UpdateOptions) (result *v1.ArangoBackup, err error) { + emptyResult := &v1.ArangoBackup{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangobackupsResource, "status", c.ns, arangoBackup), &v1.ArangoBackup{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangobackupsResource, "status", c.ns, arangoBackup, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoBackup), err } @@ -127,7 +132,7 @@ func (c *FakeArangoBackups) Delete(ctx context.Context, name string, opts metav1 // DeleteCollection deletes a collection of objects. func (c *FakeArangoBackups) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangobackupsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangobackupsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1.ArangoBackupList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoBackups) DeleteCollection(ctx context.Context, opts metav1.De // Patch applies the patch and returns the patched arangoBackup. func (c *FakeArangoBackups) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoBackup, err error) { + emptyResult := &v1.ArangoBackup{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangobackupsResource, c.ns, name, pt, data, subresources...), &v1.ArangoBackup{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangobackupsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoBackup), err } diff --git a/pkg/generated/clientset/versioned/typed/backup/v1/fake/fake_arangobackuppolicy.go b/pkg/generated/clientset/versioned/typed/backup/v1/fake/fake_arangobackuppolicy.go index 10b3bb8ff..037358424 100644 --- a/pkg/generated/clientset/versioned/typed/backup/v1/fake/fake_arangobackuppolicy.go +++ b/pkg/generated/clientset/versioned/typed/backup/v1/fake/fake_arangobackuppolicy.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangobackuppoliciesKind = v1.SchemeGroupVersion.WithKind("ArangoBackupPolic // Get takes name of the arangoBackupPolicy, and returns the corresponding arangoBackupPolicy object, and an error if there is any. func (c *FakeArangoBackupPolicies) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoBackupPolicy, err error) { + emptyResult := &v1.ArangoBackupPolicy{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangobackuppoliciesResource, c.ns, name), &v1.ArangoBackupPolicy{}) + Invokes(testing.NewGetActionWithOptions(arangobackuppoliciesResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoBackupPolicy), err } // List takes label and field selectors, and returns the list of ArangoBackupPolicies that match those selectors. func (c *FakeArangoBackupPolicies) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoBackupPolicyList, err error) { + emptyResult := &v1.ArangoBackupPolicyList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangobackuppoliciesResource, arangobackuppoliciesKind, c.ns, opts), &v1.ArangoBackupPolicyList{}) + Invokes(testing.NewListActionWithOptions(arangobackuppoliciesResource, arangobackuppoliciesKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoBackupPolicies) List(ctx context.Context, opts metav1.ListOpt // Watch returns a watch.Interface that watches the requested arangoBackupPolicies. func (c *FakeArangoBackupPolicies) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangobackuppoliciesResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangobackuppoliciesResource, c.ns, opts)) } // Create takes the representation of a arangoBackupPolicy and creates it. Returns the server's representation of the arangoBackupPolicy, and an error, if there is any. func (c *FakeArangoBackupPolicies) Create(ctx context.Context, arangoBackupPolicy *v1.ArangoBackupPolicy, opts metav1.CreateOptions) (result *v1.ArangoBackupPolicy, err error) { + emptyResult := &v1.ArangoBackupPolicy{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangobackuppoliciesResource, c.ns, arangoBackupPolicy), &v1.ArangoBackupPolicy{}) + Invokes(testing.NewCreateActionWithOptions(arangobackuppoliciesResource, c.ns, arangoBackupPolicy, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoBackupPolicy), err } // Update takes the representation of a arangoBackupPolicy and updates it. Returns the server's representation of the arangoBackupPolicy, and an error, if there is any. func (c *FakeArangoBackupPolicies) Update(ctx context.Context, arangoBackupPolicy *v1.ArangoBackupPolicy, opts metav1.UpdateOptions) (result *v1.ArangoBackupPolicy, err error) { + emptyResult := &v1.ArangoBackupPolicy{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangobackuppoliciesResource, c.ns, arangoBackupPolicy), &v1.ArangoBackupPolicy{}) + Invokes(testing.NewUpdateActionWithOptions(arangobackuppoliciesResource, c.ns, arangoBackupPolicy, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoBackupPolicy), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoBackupPolicies) UpdateStatus(ctx context.Context, arangoBackupPolicy *v1.ArangoBackupPolicy, opts metav1.UpdateOptions) (*v1.ArangoBackupPolicy, error) { +func (c *FakeArangoBackupPolicies) UpdateStatus(ctx context.Context, arangoBackupPolicy *v1.ArangoBackupPolicy, opts metav1.UpdateOptions) (result *v1.ArangoBackupPolicy, err error) { + emptyResult := &v1.ArangoBackupPolicy{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangobackuppoliciesResource, "status", c.ns, arangoBackupPolicy), &v1.ArangoBackupPolicy{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangobackuppoliciesResource, "status", c.ns, arangoBackupPolicy, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoBackupPolicy), err } @@ -127,7 +132,7 @@ func (c *FakeArangoBackupPolicies) Delete(ctx context.Context, name string, opts // DeleteCollection deletes a collection of objects. func (c *FakeArangoBackupPolicies) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangobackuppoliciesResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangobackuppoliciesResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1.ArangoBackupPolicyList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoBackupPolicies) DeleteCollection(ctx context.Context, opts me // Patch applies the patch and returns the patched arangoBackupPolicy. func (c *FakeArangoBackupPolicies) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoBackupPolicy, err error) { + emptyResult := &v1.ArangoBackupPolicy{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangobackuppoliciesResource, c.ns, name, pt, data, subresources...), &v1.ArangoBackupPolicy{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangobackuppoliciesResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoBackupPolicy), err } diff --git a/pkg/generated/clientset/versioned/typed/backup/v1/fake/fake_backup_client.go b/pkg/generated/clientset/versioned/typed/backup/v1/fake/fake_backup_client.go index 61c7d1208..bfe25ff35 100644 --- a/pkg/generated/clientset/versioned/typed/backup/v1/fake/fake_backup_client.go +++ b/pkg/generated/clientset/versioned/typed/backup/v1/fake/fake_backup_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/backup/v1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/backup/v1/generated_expansion.go index dca65465e..cd64ed97a 100644 --- a/pkg/generated/clientset/versioned/typed/backup/v1/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/backup/v1/generated_expansion.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/arangoclustersynchronization.go b/pkg/generated/clientset/versioned/typed/deployment/v1/arangoclustersynchronization.go index 634ab47cb..b326351cd 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/arangoclustersynchronization.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/arangoclustersynchronization.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1 import ( "context" - "time" v1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoClusterSynchronizationsGetter has a method to return a ArangoClusterSynchronizationInterface. @@ -44,6 +43,7 @@ type ArangoClusterSynchronizationsGetter interface { type ArangoClusterSynchronizationInterface interface { Create(ctx context.Context, arangoClusterSynchronization *v1.ArangoClusterSynchronization, opts metav1.CreateOptions) (*v1.ArangoClusterSynchronization, error) Update(ctx context.Context, arangoClusterSynchronization *v1.ArangoClusterSynchronization, opts metav1.UpdateOptions) (*v1.ArangoClusterSynchronization, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoClusterSynchronization *v1.ArangoClusterSynchronization, opts metav1.UpdateOptions) (*v1.ArangoClusterSynchronization, error) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoClusterSynchronizationInterface interface { // arangoClusterSynchronizations implements ArangoClusterSynchronizationInterface type arangoClusterSynchronizations struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1.ArangoClusterSynchronization, *v1.ArangoClusterSynchronizationList] } // newArangoClusterSynchronizations returns a ArangoClusterSynchronizations func newArangoClusterSynchronizations(c *DatabaseV1Client, namespace string) *arangoClusterSynchronizations { return &arangoClusterSynchronizations{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1.ArangoClusterSynchronization, *v1.ArangoClusterSynchronizationList]( + "arangoclustersynchronizations", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1.ArangoClusterSynchronization { return &v1.ArangoClusterSynchronization{} }, + func() *v1.ArangoClusterSynchronizationList { return &v1.ArangoClusterSynchronizationList{} }), } } - -// Get takes name of the arangoClusterSynchronization, and returns the corresponding arangoClusterSynchronization object, and an error if there is any. -func (c *arangoClusterSynchronizations) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoClusterSynchronization, err error) { - result = &v1.ArangoClusterSynchronization{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoClusterSynchronizations that match those selectors. -func (c *arangoClusterSynchronizations) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoClusterSynchronizationList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1.ArangoClusterSynchronizationList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoClusterSynchronizations. -func (c *arangoClusterSynchronizations) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoClusterSynchronization and creates it. Returns the server's representation of the arangoClusterSynchronization, and an error, if there is any. -func (c *arangoClusterSynchronizations) Create(ctx context.Context, arangoClusterSynchronization *v1.ArangoClusterSynchronization, opts metav1.CreateOptions) (result *v1.ArangoClusterSynchronization, err error) { - result = &v1.ArangoClusterSynchronization{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoClusterSynchronization). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoClusterSynchronization and updates it. Returns the server's representation of the arangoClusterSynchronization, and an error, if there is any. -func (c *arangoClusterSynchronizations) Update(ctx context.Context, arangoClusterSynchronization *v1.ArangoClusterSynchronization, opts metav1.UpdateOptions) (result *v1.ArangoClusterSynchronization, err error) { - result = &v1.ArangoClusterSynchronization{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - Name(arangoClusterSynchronization.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoClusterSynchronization). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoClusterSynchronizations) UpdateStatus(ctx context.Context, arangoClusterSynchronization *v1.ArangoClusterSynchronization, opts metav1.UpdateOptions) (result *v1.ArangoClusterSynchronization, err error) { - result = &v1.ArangoClusterSynchronization{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - Name(arangoClusterSynchronization.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoClusterSynchronization). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoClusterSynchronization and deletes it. Returns an error if one occurs. -func (c *arangoClusterSynchronizations) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoClusterSynchronizations) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoClusterSynchronization. -func (c *arangoClusterSynchronizations) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoClusterSynchronization, err error) { - result = &v1.ArangoClusterSynchronization{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/arangodeployment.go b/pkg/generated/clientset/versioned/typed/deployment/v1/arangodeployment.go index 4e1f4866a..f40b293aa 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/arangodeployment.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/arangodeployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1 import ( "context" - "time" v1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoDeploymentsGetter has a method to return a ArangoDeploymentInterface. @@ -44,6 +43,7 @@ type ArangoDeploymentsGetter interface { type ArangoDeploymentInterface interface { Create(ctx context.Context, arangoDeployment *v1.ArangoDeployment, opts metav1.CreateOptions) (*v1.ArangoDeployment, error) Update(ctx context.Context, arangoDeployment *v1.ArangoDeployment, opts metav1.UpdateOptions) (*v1.ArangoDeployment, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoDeployment *v1.ArangoDeployment, opts metav1.UpdateOptions) (*v1.ArangoDeployment, error) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoDeploymentInterface interface { // arangoDeployments implements ArangoDeploymentInterface type arangoDeployments struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1.ArangoDeployment, *v1.ArangoDeploymentList] } // newArangoDeployments returns a ArangoDeployments func newArangoDeployments(c *DatabaseV1Client, namespace string) *arangoDeployments { return &arangoDeployments{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1.ArangoDeployment, *v1.ArangoDeploymentList]( + "arangodeployments", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1.ArangoDeployment { return &v1.ArangoDeployment{} }, + func() *v1.ArangoDeploymentList { return &v1.ArangoDeploymentList{} }), } } - -// Get takes name of the arangoDeployment, and returns the corresponding arangoDeployment object, and an error if there is any. -func (c *arangoDeployments) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoDeployment, err error) { - result = &v1.ArangoDeployment{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangodeployments"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoDeployments that match those selectors. -func (c *arangoDeployments) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoDeploymentList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1.ArangoDeploymentList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangodeployments"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoDeployments. -func (c *arangoDeployments) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangodeployments"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoDeployment and creates it. Returns the server's representation of the arangoDeployment, and an error, if there is any. -func (c *arangoDeployments) Create(ctx context.Context, arangoDeployment *v1.ArangoDeployment, opts metav1.CreateOptions) (result *v1.ArangoDeployment, err error) { - result = &v1.ArangoDeployment{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangodeployments"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoDeployment). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoDeployment and updates it. Returns the server's representation of the arangoDeployment, and an error, if there is any. -func (c *arangoDeployments) Update(ctx context.Context, arangoDeployment *v1.ArangoDeployment, opts metav1.UpdateOptions) (result *v1.ArangoDeployment, err error) { - result = &v1.ArangoDeployment{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangodeployments"). - Name(arangoDeployment.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoDeployment). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoDeployments) UpdateStatus(ctx context.Context, arangoDeployment *v1.ArangoDeployment, opts metav1.UpdateOptions) (result *v1.ArangoDeployment, err error) { - result = &v1.ArangoDeployment{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangodeployments"). - Name(arangoDeployment.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoDeployment). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoDeployment and deletes it. Returns an error if one occurs. -func (c *arangoDeployments) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangodeployments"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoDeployments) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangodeployments"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoDeployment. -func (c *arangoDeployments) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoDeployment, err error) { - result = &v1.ArangoDeployment{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangodeployments"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/arangomember.go b/pkg/generated/clientset/versioned/typed/deployment/v1/arangomember.go index 63d256f50..d0c67f211 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/arangomember.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/arangomember.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1 import ( "context" - "time" v1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoMembersGetter has a method to return a ArangoMemberInterface. @@ -44,6 +43,7 @@ type ArangoMembersGetter interface { type ArangoMemberInterface interface { Create(ctx context.Context, arangoMember *v1.ArangoMember, opts metav1.CreateOptions) (*v1.ArangoMember, error) Update(ctx context.Context, arangoMember *v1.ArangoMember, opts metav1.UpdateOptions) (*v1.ArangoMember, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoMember *v1.ArangoMember, opts metav1.UpdateOptions) (*v1.ArangoMember, error) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoMemberInterface interface { // arangoMembers implements ArangoMemberInterface type arangoMembers struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1.ArangoMember, *v1.ArangoMemberList] } // newArangoMembers returns a ArangoMembers func newArangoMembers(c *DatabaseV1Client, namespace string) *arangoMembers { return &arangoMembers{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1.ArangoMember, *v1.ArangoMemberList]( + "arangomembers", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1.ArangoMember { return &v1.ArangoMember{} }, + func() *v1.ArangoMemberList { return &v1.ArangoMemberList{} }), } } - -// Get takes name of the arangoMember, and returns the corresponding arangoMember object, and an error if there is any. -func (c *arangoMembers) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoMember, err error) { - result = &v1.ArangoMember{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomembers"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoMembers that match those selectors. -func (c *arangoMembers) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoMemberList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1.ArangoMemberList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomembers"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoMembers. -func (c *arangoMembers) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangomembers"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoMember and creates it. Returns the server's representation of the arangoMember, and an error, if there is any. -func (c *arangoMembers) Create(ctx context.Context, arangoMember *v1.ArangoMember, opts metav1.CreateOptions) (result *v1.ArangoMember, err error) { - result = &v1.ArangoMember{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangomembers"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMember). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoMember and updates it. Returns the server's representation of the arangoMember, and an error, if there is any. -func (c *arangoMembers) Update(ctx context.Context, arangoMember *v1.ArangoMember, opts metav1.UpdateOptions) (result *v1.ArangoMember, err error) { - result = &v1.ArangoMember{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomembers"). - Name(arangoMember.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMember). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoMembers) UpdateStatus(ctx context.Context, arangoMember *v1.ArangoMember, opts metav1.UpdateOptions) (result *v1.ArangoMember, err error) { - result = &v1.ArangoMember{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomembers"). - Name(arangoMember.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMember). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoMember and deletes it. Returns an error if one occurs. -func (c *arangoMembers) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomembers"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoMembers) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomembers"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoMember. -func (c *arangoMembers) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoMember, err error) { - result = &v1.ArangoMember{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangomembers"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/arangotask.go b/pkg/generated/clientset/versioned/typed/deployment/v1/arangotask.go index bc36b5127..6c7375e4d 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/arangotask.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/arangotask.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1 import ( "context" - "time" v1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoTasksGetter has a method to return a ArangoTaskInterface. @@ -44,6 +43,7 @@ type ArangoTasksGetter interface { type ArangoTaskInterface interface { Create(ctx context.Context, arangoTask *v1.ArangoTask, opts metav1.CreateOptions) (*v1.ArangoTask, error) Update(ctx context.Context, arangoTask *v1.ArangoTask, opts metav1.UpdateOptions) (*v1.ArangoTask, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoTask *v1.ArangoTask, opts metav1.UpdateOptions) (*v1.ArangoTask, error) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoTaskInterface interface { // arangoTasks implements ArangoTaskInterface type arangoTasks struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1.ArangoTask, *v1.ArangoTaskList] } // newArangoTasks returns a ArangoTasks func newArangoTasks(c *DatabaseV1Client, namespace string) *arangoTasks { return &arangoTasks{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1.ArangoTask, *v1.ArangoTaskList]( + "arangotasks", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1.ArangoTask { return &v1.ArangoTask{} }, + func() *v1.ArangoTaskList { return &v1.ArangoTaskList{} }), } } - -// Get takes name of the arangoTask, and returns the corresponding arangoTask object, and an error if there is any. -func (c *arangoTasks) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoTask, err error) { - result = &v1.ArangoTask{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangotasks"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoTasks that match those selectors. -func (c *arangoTasks) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoTaskList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1.ArangoTaskList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangotasks"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoTasks. -func (c *arangoTasks) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangotasks"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoTask and creates it. Returns the server's representation of the arangoTask, and an error, if there is any. -func (c *arangoTasks) Create(ctx context.Context, arangoTask *v1.ArangoTask, opts metav1.CreateOptions) (result *v1.ArangoTask, err error) { - result = &v1.ArangoTask{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangotasks"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoTask). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoTask and updates it. Returns the server's representation of the arangoTask, and an error, if there is any. -func (c *arangoTasks) Update(ctx context.Context, arangoTask *v1.ArangoTask, opts metav1.UpdateOptions) (result *v1.ArangoTask, err error) { - result = &v1.ArangoTask{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangotasks"). - Name(arangoTask.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoTask). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoTasks) UpdateStatus(ctx context.Context, arangoTask *v1.ArangoTask, opts metav1.UpdateOptions) (result *v1.ArangoTask, err error) { - result = &v1.ArangoTask{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangotasks"). - Name(arangoTask.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoTask). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoTask and deletes it. Returns an error if one occurs. -func (c *arangoTasks) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangotasks"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoTasks) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangotasks"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoTask. -func (c *arangoTasks) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoTask, err error) { - result = &v1.ArangoTask{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangotasks"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/deployment_client.go b/pkg/generated/clientset/versioned/typed/deployment/v1/deployment_client.go index 9c2b92214..195239fc5 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/deployment_client.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/deployment_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/doc.go b/pkg/generated/clientset/versioned/typed/deployment/v1/doc.go index ad6cab742..825ae42b5 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/doc.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/fake/doc.go b/pkg/generated/clientset/versioned/typed/deployment/v1/fake/doc.go index cc487d814..cb60dd032 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/fake/doc.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/fake/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangoclustersynchronization.go b/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangoclustersynchronization.go index 314455a65..2bb763bb1 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangoclustersynchronization.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangoclustersynchronization.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangoclustersynchronizationsKind = v1.SchemeGroupVersion.WithKind("ArangoCl // Get takes name of the arangoClusterSynchronization, and returns the corresponding arangoClusterSynchronization object, and an error if there is any. func (c *FakeArangoClusterSynchronizations) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoClusterSynchronization, err error) { + emptyResult := &v1.ArangoClusterSynchronization{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangoclustersynchronizationsResource, c.ns, name), &v1.ArangoClusterSynchronization{}) + Invokes(testing.NewGetActionWithOptions(arangoclustersynchronizationsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoClusterSynchronization), err } // List takes label and field selectors, and returns the list of ArangoClusterSynchronizations that match those selectors. func (c *FakeArangoClusterSynchronizations) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoClusterSynchronizationList, err error) { + emptyResult := &v1.ArangoClusterSynchronizationList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangoclustersynchronizationsResource, arangoclustersynchronizationsKind, c.ns, opts), &v1.ArangoClusterSynchronizationList{}) + Invokes(testing.NewListActionWithOptions(arangoclustersynchronizationsResource, arangoclustersynchronizationsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoClusterSynchronizations) List(ctx context.Context, opts metav // Watch returns a watch.Interface that watches the requested arangoClusterSynchronizations. func (c *FakeArangoClusterSynchronizations) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangoclustersynchronizationsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangoclustersynchronizationsResource, c.ns, opts)) } // Create takes the representation of a arangoClusterSynchronization and creates it. Returns the server's representation of the arangoClusterSynchronization, and an error, if there is any. func (c *FakeArangoClusterSynchronizations) Create(ctx context.Context, arangoClusterSynchronization *v1.ArangoClusterSynchronization, opts metav1.CreateOptions) (result *v1.ArangoClusterSynchronization, err error) { + emptyResult := &v1.ArangoClusterSynchronization{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangoclustersynchronizationsResource, c.ns, arangoClusterSynchronization), &v1.ArangoClusterSynchronization{}) + Invokes(testing.NewCreateActionWithOptions(arangoclustersynchronizationsResource, c.ns, arangoClusterSynchronization, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoClusterSynchronization), err } // Update takes the representation of a arangoClusterSynchronization and updates it. Returns the server's representation of the arangoClusterSynchronization, and an error, if there is any. func (c *FakeArangoClusterSynchronizations) Update(ctx context.Context, arangoClusterSynchronization *v1.ArangoClusterSynchronization, opts metav1.UpdateOptions) (result *v1.ArangoClusterSynchronization, err error) { + emptyResult := &v1.ArangoClusterSynchronization{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangoclustersynchronizationsResource, c.ns, arangoClusterSynchronization), &v1.ArangoClusterSynchronization{}) + Invokes(testing.NewUpdateActionWithOptions(arangoclustersynchronizationsResource, c.ns, arangoClusterSynchronization, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoClusterSynchronization), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoClusterSynchronizations) UpdateStatus(ctx context.Context, arangoClusterSynchronization *v1.ArangoClusterSynchronization, opts metav1.UpdateOptions) (*v1.ArangoClusterSynchronization, error) { +func (c *FakeArangoClusterSynchronizations) UpdateStatus(ctx context.Context, arangoClusterSynchronization *v1.ArangoClusterSynchronization, opts metav1.UpdateOptions) (result *v1.ArangoClusterSynchronization, err error) { + emptyResult := &v1.ArangoClusterSynchronization{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangoclustersynchronizationsResource, "status", c.ns, arangoClusterSynchronization), &v1.ArangoClusterSynchronization{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangoclustersynchronizationsResource, "status", c.ns, arangoClusterSynchronization, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoClusterSynchronization), err } @@ -127,7 +132,7 @@ func (c *FakeArangoClusterSynchronizations) Delete(ctx context.Context, name str // DeleteCollection deletes a collection of objects. func (c *FakeArangoClusterSynchronizations) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangoclustersynchronizationsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangoclustersynchronizationsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1.ArangoClusterSynchronizationList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoClusterSynchronizations) DeleteCollection(ctx context.Context // Patch applies the patch and returns the patched arangoClusterSynchronization. func (c *FakeArangoClusterSynchronizations) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoClusterSynchronization, err error) { + emptyResult := &v1.ArangoClusterSynchronization{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangoclustersynchronizationsResource, c.ns, name, pt, data, subresources...), &v1.ArangoClusterSynchronization{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangoclustersynchronizationsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoClusterSynchronization), err } diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangodeployment.go b/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangodeployment.go index 80fc6b5ae..b6ada9063 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangodeployment.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangodeployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangodeploymentsKind = v1.SchemeGroupVersion.WithKind("ArangoDeployment") // Get takes name of the arangoDeployment, and returns the corresponding arangoDeployment object, and an error if there is any. func (c *FakeArangoDeployments) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoDeployment, err error) { + emptyResult := &v1.ArangoDeployment{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangodeploymentsResource, c.ns, name), &v1.ArangoDeployment{}) + Invokes(testing.NewGetActionWithOptions(arangodeploymentsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoDeployment), err } // List takes label and field selectors, and returns the list of ArangoDeployments that match those selectors. func (c *FakeArangoDeployments) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoDeploymentList, err error) { + emptyResult := &v1.ArangoDeploymentList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangodeploymentsResource, arangodeploymentsKind, c.ns, opts), &v1.ArangoDeploymentList{}) + Invokes(testing.NewListActionWithOptions(arangodeploymentsResource, arangodeploymentsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoDeployments) List(ctx context.Context, opts metav1.ListOption // Watch returns a watch.Interface that watches the requested arangoDeployments. func (c *FakeArangoDeployments) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangodeploymentsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangodeploymentsResource, c.ns, opts)) } // Create takes the representation of a arangoDeployment and creates it. Returns the server's representation of the arangoDeployment, and an error, if there is any. func (c *FakeArangoDeployments) Create(ctx context.Context, arangoDeployment *v1.ArangoDeployment, opts metav1.CreateOptions) (result *v1.ArangoDeployment, err error) { + emptyResult := &v1.ArangoDeployment{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangodeploymentsResource, c.ns, arangoDeployment), &v1.ArangoDeployment{}) + Invokes(testing.NewCreateActionWithOptions(arangodeploymentsResource, c.ns, arangoDeployment, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoDeployment), err } // Update takes the representation of a arangoDeployment and updates it. Returns the server's representation of the arangoDeployment, and an error, if there is any. func (c *FakeArangoDeployments) Update(ctx context.Context, arangoDeployment *v1.ArangoDeployment, opts metav1.UpdateOptions) (result *v1.ArangoDeployment, err error) { + emptyResult := &v1.ArangoDeployment{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangodeploymentsResource, c.ns, arangoDeployment), &v1.ArangoDeployment{}) + Invokes(testing.NewUpdateActionWithOptions(arangodeploymentsResource, c.ns, arangoDeployment, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoDeployment), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoDeployments) UpdateStatus(ctx context.Context, arangoDeployment *v1.ArangoDeployment, opts metav1.UpdateOptions) (*v1.ArangoDeployment, error) { +func (c *FakeArangoDeployments) UpdateStatus(ctx context.Context, arangoDeployment *v1.ArangoDeployment, opts metav1.UpdateOptions) (result *v1.ArangoDeployment, err error) { + emptyResult := &v1.ArangoDeployment{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangodeploymentsResource, "status", c.ns, arangoDeployment), &v1.ArangoDeployment{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangodeploymentsResource, "status", c.ns, arangoDeployment, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoDeployment), err } @@ -127,7 +132,7 @@ func (c *FakeArangoDeployments) Delete(ctx context.Context, name string, opts me // DeleteCollection deletes a collection of objects. func (c *FakeArangoDeployments) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangodeploymentsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangodeploymentsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1.ArangoDeploymentList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoDeployments) DeleteCollection(ctx context.Context, opts metav // Patch applies the patch and returns the patched arangoDeployment. func (c *FakeArangoDeployments) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoDeployment, err error) { + emptyResult := &v1.ArangoDeployment{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangodeploymentsResource, c.ns, name, pt, data, subresources...), &v1.ArangoDeployment{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangodeploymentsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoDeployment), err } diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangomember.go b/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangomember.go index b4855d76f..61d06f30d 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangomember.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangomember.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangomembersKind = v1.SchemeGroupVersion.WithKind("ArangoMember") // Get takes name of the arangoMember, and returns the corresponding arangoMember object, and an error if there is any. func (c *FakeArangoMembers) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoMember, err error) { + emptyResult := &v1.ArangoMember{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangomembersResource, c.ns, name), &v1.ArangoMember{}) + Invokes(testing.NewGetActionWithOptions(arangomembersResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoMember), err } // List takes label and field selectors, and returns the list of ArangoMembers that match those selectors. func (c *FakeArangoMembers) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoMemberList, err error) { + emptyResult := &v1.ArangoMemberList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangomembersResource, arangomembersKind, c.ns, opts), &v1.ArangoMemberList{}) + Invokes(testing.NewListActionWithOptions(arangomembersResource, arangomembersKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoMembers) List(ctx context.Context, opts metav1.ListOptions) ( // Watch returns a watch.Interface that watches the requested arangoMembers. func (c *FakeArangoMembers) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangomembersResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangomembersResource, c.ns, opts)) } // Create takes the representation of a arangoMember and creates it. Returns the server's representation of the arangoMember, and an error, if there is any. func (c *FakeArangoMembers) Create(ctx context.Context, arangoMember *v1.ArangoMember, opts metav1.CreateOptions) (result *v1.ArangoMember, err error) { + emptyResult := &v1.ArangoMember{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangomembersResource, c.ns, arangoMember), &v1.ArangoMember{}) + Invokes(testing.NewCreateActionWithOptions(arangomembersResource, c.ns, arangoMember, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoMember), err } // Update takes the representation of a arangoMember and updates it. Returns the server's representation of the arangoMember, and an error, if there is any. func (c *FakeArangoMembers) Update(ctx context.Context, arangoMember *v1.ArangoMember, opts metav1.UpdateOptions) (result *v1.ArangoMember, err error) { + emptyResult := &v1.ArangoMember{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangomembersResource, c.ns, arangoMember), &v1.ArangoMember{}) + Invokes(testing.NewUpdateActionWithOptions(arangomembersResource, c.ns, arangoMember, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoMember), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoMembers) UpdateStatus(ctx context.Context, arangoMember *v1.ArangoMember, opts metav1.UpdateOptions) (*v1.ArangoMember, error) { +func (c *FakeArangoMembers) UpdateStatus(ctx context.Context, arangoMember *v1.ArangoMember, opts metav1.UpdateOptions) (result *v1.ArangoMember, err error) { + emptyResult := &v1.ArangoMember{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangomembersResource, "status", c.ns, arangoMember), &v1.ArangoMember{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangomembersResource, "status", c.ns, arangoMember, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoMember), err } @@ -127,7 +132,7 @@ func (c *FakeArangoMembers) Delete(ctx context.Context, name string, opts metav1 // DeleteCollection deletes a collection of objects. func (c *FakeArangoMembers) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangomembersResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangomembersResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1.ArangoMemberList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoMembers) DeleteCollection(ctx context.Context, opts metav1.De // Patch applies the patch and returns the patched arangoMember. func (c *FakeArangoMembers) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoMember, err error) { + emptyResult := &v1.ArangoMember{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangomembersResource, c.ns, name, pt, data, subresources...), &v1.ArangoMember{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangomembersResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoMember), err } diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangotask.go b/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangotask.go index 59266ae30..f50d35e99 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangotask.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangotask.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangotasksKind = v1.SchemeGroupVersion.WithKind("ArangoTask") // Get takes name of the arangoTask, and returns the corresponding arangoTask object, and an error if there is any. func (c *FakeArangoTasks) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoTask, err error) { + emptyResult := &v1.ArangoTask{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangotasksResource, c.ns, name), &v1.ArangoTask{}) + Invokes(testing.NewGetActionWithOptions(arangotasksResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoTask), err } // List takes label and field selectors, and returns the list of ArangoTasks that match those selectors. func (c *FakeArangoTasks) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoTaskList, err error) { + emptyResult := &v1.ArangoTaskList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangotasksResource, arangotasksKind, c.ns, opts), &v1.ArangoTaskList{}) + Invokes(testing.NewListActionWithOptions(arangotasksResource, arangotasksKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoTasks) List(ctx context.Context, opts metav1.ListOptions) (re // Watch returns a watch.Interface that watches the requested arangoTasks. func (c *FakeArangoTasks) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangotasksResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangotasksResource, c.ns, opts)) } // Create takes the representation of a arangoTask and creates it. Returns the server's representation of the arangoTask, and an error, if there is any. func (c *FakeArangoTasks) Create(ctx context.Context, arangoTask *v1.ArangoTask, opts metav1.CreateOptions) (result *v1.ArangoTask, err error) { + emptyResult := &v1.ArangoTask{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangotasksResource, c.ns, arangoTask), &v1.ArangoTask{}) + Invokes(testing.NewCreateActionWithOptions(arangotasksResource, c.ns, arangoTask, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoTask), err } // Update takes the representation of a arangoTask and updates it. Returns the server's representation of the arangoTask, and an error, if there is any. func (c *FakeArangoTasks) Update(ctx context.Context, arangoTask *v1.ArangoTask, opts metav1.UpdateOptions) (result *v1.ArangoTask, err error) { + emptyResult := &v1.ArangoTask{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangotasksResource, c.ns, arangoTask), &v1.ArangoTask{}) + Invokes(testing.NewUpdateActionWithOptions(arangotasksResource, c.ns, arangoTask, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoTask), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoTasks) UpdateStatus(ctx context.Context, arangoTask *v1.ArangoTask, opts metav1.UpdateOptions) (*v1.ArangoTask, error) { +func (c *FakeArangoTasks) UpdateStatus(ctx context.Context, arangoTask *v1.ArangoTask, opts metav1.UpdateOptions) (result *v1.ArangoTask, err error) { + emptyResult := &v1.ArangoTask{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangotasksResource, "status", c.ns, arangoTask), &v1.ArangoTask{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangotasksResource, "status", c.ns, arangoTask, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoTask), err } @@ -127,7 +132,7 @@ func (c *FakeArangoTasks) Delete(ctx context.Context, name string, opts metav1.D // DeleteCollection deletes a collection of objects. func (c *FakeArangoTasks) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangotasksResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangotasksResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1.ArangoTaskList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoTasks) DeleteCollection(ctx context.Context, opts metav1.Dele // Patch applies the patch and returns the patched arangoTask. func (c *FakeArangoTasks) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoTask, err error) { + emptyResult := &v1.ArangoTask{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangotasksResource, c.ns, name, pt, data, subresources...), &v1.ArangoTask{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangotasksResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoTask), err } diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_deployment_client.go b/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_deployment_client.go index 970a202df..bc5b59cad 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_deployment_client.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_deployment_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/deployment/v1/generated_expansion.go index c9b6f7884..c988ad3ce 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/generated_expansion.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangoclustersynchronization.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangoclustersynchronization.go index 23d24297b..4446510b6 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangoclustersynchronization.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangoclustersynchronization.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v2alpha1 import ( "context" - "time" v2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoClusterSynchronizationsGetter has a method to return a ArangoClusterSynchronizationInterface. @@ -44,6 +43,7 @@ type ArangoClusterSynchronizationsGetter interface { type ArangoClusterSynchronizationInterface interface { Create(ctx context.Context, arangoClusterSynchronization *v2alpha1.ArangoClusterSynchronization, opts v1.CreateOptions) (*v2alpha1.ArangoClusterSynchronization, error) Update(ctx context.Context, arangoClusterSynchronization *v2alpha1.ArangoClusterSynchronization, opts v1.UpdateOptions) (*v2alpha1.ArangoClusterSynchronization, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoClusterSynchronization *v2alpha1.ArangoClusterSynchronization, opts v1.UpdateOptions) (*v2alpha1.ArangoClusterSynchronization, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoClusterSynchronizationInterface interface { // arangoClusterSynchronizations implements ArangoClusterSynchronizationInterface type arangoClusterSynchronizations struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v2alpha1.ArangoClusterSynchronization, *v2alpha1.ArangoClusterSynchronizationList] } // newArangoClusterSynchronizations returns a ArangoClusterSynchronizations func newArangoClusterSynchronizations(c *DatabaseV2alpha1Client, namespace string) *arangoClusterSynchronizations { return &arangoClusterSynchronizations{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v2alpha1.ArangoClusterSynchronization, *v2alpha1.ArangoClusterSynchronizationList]( + "arangoclustersynchronizations", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v2alpha1.ArangoClusterSynchronization { return &v2alpha1.ArangoClusterSynchronization{} }, + func() *v2alpha1.ArangoClusterSynchronizationList { return &v2alpha1.ArangoClusterSynchronizationList{} }), } } - -// Get takes name of the arangoClusterSynchronization, and returns the corresponding arangoClusterSynchronization object, and an error if there is any. -func (c *arangoClusterSynchronizations) Get(ctx context.Context, name string, options v1.GetOptions) (result *v2alpha1.ArangoClusterSynchronization, err error) { - result = &v2alpha1.ArangoClusterSynchronization{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoClusterSynchronizations that match those selectors. -func (c *arangoClusterSynchronizations) List(ctx context.Context, opts v1.ListOptions) (result *v2alpha1.ArangoClusterSynchronizationList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v2alpha1.ArangoClusterSynchronizationList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoClusterSynchronizations. -func (c *arangoClusterSynchronizations) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoClusterSynchronization and creates it. Returns the server's representation of the arangoClusterSynchronization, and an error, if there is any. -func (c *arangoClusterSynchronizations) Create(ctx context.Context, arangoClusterSynchronization *v2alpha1.ArangoClusterSynchronization, opts v1.CreateOptions) (result *v2alpha1.ArangoClusterSynchronization, err error) { - result = &v2alpha1.ArangoClusterSynchronization{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoClusterSynchronization). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoClusterSynchronization and updates it. Returns the server's representation of the arangoClusterSynchronization, and an error, if there is any. -func (c *arangoClusterSynchronizations) Update(ctx context.Context, arangoClusterSynchronization *v2alpha1.ArangoClusterSynchronization, opts v1.UpdateOptions) (result *v2alpha1.ArangoClusterSynchronization, err error) { - result = &v2alpha1.ArangoClusterSynchronization{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - Name(arangoClusterSynchronization.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoClusterSynchronization). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoClusterSynchronizations) UpdateStatus(ctx context.Context, arangoClusterSynchronization *v2alpha1.ArangoClusterSynchronization, opts v1.UpdateOptions) (result *v2alpha1.ArangoClusterSynchronization, err error) { - result = &v2alpha1.ArangoClusterSynchronization{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - Name(arangoClusterSynchronization.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoClusterSynchronization). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoClusterSynchronization and deletes it. Returns an error if one occurs. -func (c *arangoClusterSynchronizations) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoClusterSynchronizations) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoClusterSynchronization. -func (c *arangoClusterSynchronizations) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v2alpha1.ArangoClusterSynchronization, err error) { - result = &v2alpha1.ArangoClusterSynchronization{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangoclustersynchronizations"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangodeployment.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangodeployment.go index ce76e7afe..00ba9357e 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangodeployment.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangodeployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v2alpha1 import ( "context" - "time" v2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoDeploymentsGetter has a method to return a ArangoDeploymentInterface. @@ -44,6 +43,7 @@ type ArangoDeploymentsGetter interface { type ArangoDeploymentInterface interface { Create(ctx context.Context, arangoDeployment *v2alpha1.ArangoDeployment, opts v1.CreateOptions) (*v2alpha1.ArangoDeployment, error) Update(ctx context.Context, arangoDeployment *v2alpha1.ArangoDeployment, opts v1.UpdateOptions) (*v2alpha1.ArangoDeployment, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoDeployment *v2alpha1.ArangoDeployment, opts v1.UpdateOptions) (*v2alpha1.ArangoDeployment, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoDeploymentInterface interface { // arangoDeployments implements ArangoDeploymentInterface type arangoDeployments struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v2alpha1.ArangoDeployment, *v2alpha1.ArangoDeploymentList] } // newArangoDeployments returns a ArangoDeployments func newArangoDeployments(c *DatabaseV2alpha1Client, namespace string) *arangoDeployments { return &arangoDeployments{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v2alpha1.ArangoDeployment, *v2alpha1.ArangoDeploymentList]( + "arangodeployments", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v2alpha1.ArangoDeployment { return &v2alpha1.ArangoDeployment{} }, + func() *v2alpha1.ArangoDeploymentList { return &v2alpha1.ArangoDeploymentList{} }), } } - -// Get takes name of the arangoDeployment, and returns the corresponding arangoDeployment object, and an error if there is any. -func (c *arangoDeployments) Get(ctx context.Context, name string, options v1.GetOptions) (result *v2alpha1.ArangoDeployment, err error) { - result = &v2alpha1.ArangoDeployment{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangodeployments"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoDeployments that match those selectors. -func (c *arangoDeployments) List(ctx context.Context, opts v1.ListOptions) (result *v2alpha1.ArangoDeploymentList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v2alpha1.ArangoDeploymentList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangodeployments"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoDeployments. -func (c *arangoDeployments) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangodeployments"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoDeployment and creates it. Returns the server's representation of the arangoDeployment, and an error, if there is any. -func (c *arangoDeployments) Create(ctx context.Context, arangoDeployment *v2alpha1.ArangoDeployment, opts v1.CreateOptions) (result *v2alpha1.ArangoDeployment, err error) { - result = &v2alpha1.ArangoDeployment{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangodeployments"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoDeployment). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoDeployment and updates it. Returns the server's representation of the arangoDeployment, and an error, if there is any. -func (c *arangoDeployments) Update(ctx context.Context, arangoDeployment *v2alpha1.ArangoDeployment, opts v1.UpdateOptions) (result *v2alpha1.ArangoDeployment, err error) { - result = &v2alpha1.ArangoDeployment{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangodeployments"). - Name(arangoDeployment.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoDeployment). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoDeployments) UpdateStatus(ctx context.Context, arangoDeployment *v2alpha1.ArangoDeployment, opts v1.UpdateOptions) (result *v2alpha1.ArangoDeployment, err error) { - result = &v2alpha1.ArangoDeployment{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangodeployments"). - Name(arangoDeployment.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoDeployment). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoDeployment and deletes it. Returns an error if one occurs. -func (c *arangoDeployments) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangodeployments"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoDeployments) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangodeployments"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoDeployment. -func (c *arangoDeployments) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v2alpha1.ArangoDeployment, err error) { - result = &v2alpha1.ArangoDeployment{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangodeployments"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangomember.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangomember.go index e9f71d189..e8d1bd6b5 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangomember.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangomember.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v2alpha1 import ( "context" - "time" v2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoMembersGetter has a method to return a ArangoMemberInterface. @@ -44,6 +43,7 @@ type ArangoMembersGetter interface { type ArangoMemberInterface interface { Create(ctx context.Context, arangoMember *v2alpha1.ArangoMember, opts v1.CreateOptions) (*v2alpha1.ArangoMember, error) Update(ctx context.Context, arangoMember *v2alpha1.ArangoMember, opts v1.UpdateOptions) (*v2alpha1.ArangoMember, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoMember *v2alpha1.ArangoMember, opts v1.UpdateOptions) (*v2alpha1.ArangoMember, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoMemberInterface interface { // arangoMembers implements ArangoMemberInterface type arangoMembers struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v2alpha1.ArangoMember, *v2alpha1.ArangoMemberList] } // newArangoMembers returns a ArangoMembers func newArangoMembers(c *DatabaseV2alpha1Client, namespace string) *arangoMembers { return &arangoMembers{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v2alpha1.ArangoMember, *v2alpha1.ArangoMemberList]( + "arangomembers", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v2alpha1.ArangoMember { return &v2alpha1.ArangoMember{} }, + func() *v2alpha1.ArangoMemberList { return &v2alpha1.ArangoMemberList{} }), } } - -// Get takes name of the arangoMember, and returns the corresponding arangoMember object, and an error if there is any. -func (c *arangoMembers) Get(ctx context.Context, name string, options v1.GetOptions) (result *v2alpha1.ArangoMember, err error) { - result = &v2alpha1.ArangoMember{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomembers"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoMembers that match those selectors. -func (c *arangoMembers) List(ctx context.Context, opts v1.ListOptions) (result *v2alpha1.ArangoMemberList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v2alpha1.ArangoMemberList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomembers"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoMembers. -func (c *arangoMembers) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangomembers"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoMember and creates it. Returns the server's representation of the arangoMember, and an error, if there is any. -func (c *arangoMembers) Create(ctx context.Context, arangoMember *v2alpha1.ArangoMember, opts v1.CreateOptions) (result *v2alpha1.ArangoMember, err error) { - result = &v2alpha1.ArangoMember{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangomembers"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMember). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoMember and updates it. Returns the server's representation of the arangoMember, and an error, if there is any. -func (c *arangoMembers) Update(ctx context.Context, arangoMember *v2alpha1.ArangoMember, opts v1.UpdateOptions) (result *v2alpha1.ArangoMember, err error) { - result = &v2alpha1.ArangoMember{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomembers"). - Name(arangoMember.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMember). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoMembers) UpdateStatus(ctx context.Context, arangoMember *v2alpha1.ArangoMember, opts v1.UpdateOptions) (result *v2alpha1.ArangoMember, err error) { - result = &v2alpha1.ArangoMember{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomembers"). - Name(arangoMember.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMember). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoMember and deletes it. Returns an error if one occurs. -func (c *arangoMembers) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomembers"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoMembers) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomembers"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoMember. -func (c *arangoMembers) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v2alpha1.ArangoMember, err error) { - result = &v2alpha1.ArangoMember{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangomembers"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangotask.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangotask.go index 85bb89d10..cd91e2cb0 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangotask.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangotask.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v2alpha1 import ( "context" - "time" v2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoTasksGetter has a method to return a ArangoTaskInterface. @@ -44,6 +43,7 @@ type ArangoTasksGetter interface { type ArangoTaskInterface interface { Create(ctx context.Context, arangoTask *v2alpha1.ArangoTask, opts v1.CreateOptions) (*v2alpha1.ArangoTask, error) Update(ctx context.Context, arangoTask *v2alpha1.ArangoTask, opts v1.UpdateOptions) (*v2alpha1.ArangoTask, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoTask *v2alpha1.ArangoTask, opts v1.UpdateOptions) (*v2alpha1.ArangoTask, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoTaskInterface interface { // arangoTasks implements ArangoTaskInterface type arangoTasks struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v2alpha1.ArangoTask, *v2alpha1.ArangoTaskList] } // newArangoTasks returns a ArangoTasks func newArangoTasks(c *DatabaseV2alpha1Client, namespace string) *arangoTasks { return &arangoTasks{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v2alpha1.ArangoTask, *v2alpha1.ArangoTaskList]( + "arangotasks", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v2alpha1.ArangoTask { return &v2alpha1.ArangoTask{} }, + func() *v2alpha1.ArangoTaskList { return &v2alpha1.ArangoTaskList{} }), } } - -// Get takes name of the arangoTask, and returns the corresponding arangoTask object, and an error if there is any. -func (c *arangoTasks) Get(ctx context.Context, name string, options v1.GetOptions) (result *v2alpha1.ArangoTask, err error) { - result = &v2alpha1.ArangoTask{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangotasks"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoTasks that match those selectors. -func (c *arangoTasks) List(ctx context.Context, opts v1.ListOptions) (result *v2alpha1.ArangoTaskList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v2alpha1.ArangoTaskList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangotasks"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoTasks. -func (c *arangoTasks) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangotasks"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoTask and creates it. Returns the server's representation of the arangoTask, and an error, if there is any. -func (c *arangoTasks) Create(ctx context.Context, arangoTask *v2alpha1.ArangoTask, opts v1.CreateOptions) (result *v2alpha1.ArangoTask, err error) { - result = &v2alpha1.ArangoTask{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangotasks"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoTask). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoTask and updates it. Returns the server's representation of the arangoTask, and an error, if there is any. -func (c *arangoTasks) Update(ctx context.Context, arangoTask *v2alpha1.ArangoTask, opts v1.UpdateOptions) (result *v2alpha1.ArangoTask, err error) { - result = &v2alpha1.ArangoTask{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangotasks"). - Name(arangoTask.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoTask). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoTasks) UpdateStatus(ctx context.Context, arangoTask *v2alpha1.ArangoTask, opts v1.UpdateOptions) (result *v2alpha1.ArangoTask, err error) { - result = &v2alpha1.ArangoTask{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangotasks"). - Name(arangoTask.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoTask). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoTask and deletes it. Returns an error if one occurs. -func (c *arangoTasks) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangotasks"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoTasks) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangotasks"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoTask. -func (c *arangoTasks) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v2alpha1.ArangoTask, err error) { - result = &v2alpha1.ArangoTask{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangotasks"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/deployment_client.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/deployment_client.go index ab701e3ab..3b2f3a26d 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/deployment_client.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/deployment_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/doc.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/doc.go index 049dabc69..1ef2256a9 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/doc.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/doc.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/doc.go index cc487d814..cb60dd032 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/doc.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangoclustersynchronization.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangoclustersynchronization.go index 4331180ca..8c68613e8 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangoclustersynchronization.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangoclustersynchronization.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangoclustersynchronizationsKind = v2alpha1.SchemeGroupVersion.WithKind("Ar // Get takes name of the arangoClusterSynchronization, and returns the corresponding arangoClusterSynchronization object, and an error if there is any. func (c *FakeArangoClusterSynchronizations) Get(ctx context.Context, name string, options v1.GetOptions) (result *v2alpha1.ArangoClusterSynchronization, err error) { + emptyResult := &v2alpha1.ArangoClusterSynchronization{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangoclustersynchronizationsResource, c.ns, name), &v2alpha1.ArangoClusterSynchronization{}) + Invokes(testing.NewGetActionWithOptions(arangoclustersynchronizationsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoClusterSynchronization), err } // List takes label and field selectors, and returns the list of ArangoClusterSynchronizations that match those selectors. func (c *FakeArangoClusterSynchronizations) List(ctx context.Context, opts v1.ListOptions) (result *v2alpha1.ArangoClusterSynchronizationList, err error) { + emptyResult := &v2alpha1.ArangoClusterSynchronizationList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangoclustersynchronizationsResource, arangoclustersynchronizationsKind, c.ns, opts), &v2alpha1.ArangoClusterSynchronizationList{}) + Invokes(testing.NewListActionWithOptions(arangoclustersynchronizationsResource, arangoclustersynchronizationsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoClusterSynchronizations) List(ctx context.Context, opts v1.Li // Watch returns a watch.Interface that watches the requested arangoClusterSynchronizations. func (c *FakeArangoClusterSynchronizations) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangoclustersynchronizationsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangoclustersynchronizationsResource, c.ns, opts)) } // Create takes the representation of a arangoClusterSynchronization and creates it. Returns the server's representation of the arangoClusterSynchronization, and an error, if there is any. func (c *FakeArangoClusterSynchronizations) Create(ctx context.Context, arangoClusterSynchronization *v2alpha1.ArangoClusterSynchronization, opts v1.CreateOptions) (result *v2alpha1.ArangoClusterSynchronization, err error) { + emptyResult := &v2alpha1.ArangoClusterSynchronization{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangoclustersynchronizationsResource, c.ns, arangoClusterSynchronization), &v2alpha1.ArangoClusterSynchronization{}) + Invokes(testing.NewCreateActionWithOptions(arangoclustersynchronizationsResource, c.ns, arangoClusterSynchronization, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoClusterSynchronization), err } // Update takes the representation of a arangoClusterSynchronization and updates it. Returns the server's representation of the arangoClusterSynchronization, and an error, if there is any. func (c *FakeArangoClusterSynchronizations) Update(ctx context.Context, arangoClusterSynchronization *v2alpha1.ArangoClusterSynchronization, opts v1.UpdateOptions) (result *v2alpha1.ArangoClusterSynchronization, err error) { + emptyResult := &v2alpha1.ArangoClusterSynchronization{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangoclustersynchronizationsResource, c.ns, arangoClusterSynchronization), &v2alpha1.ArangoClusterSynchronization{}) + Invokes(testing.NewUpdateActionWithOptions(arangoclustersynchronizationsResource, c.ns, arangoClusterSynchronization, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoClusterSynchronization), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoClusterSynchronizations) UpdateStatus(ctx context.Context, arangoClusterSynchronization *v2alpha1.ArangoClusterSynchronization, opts v1.UpdateOptions) (*v2alpha1.ArangoClusterSynchronization, error) { +func (c *FakeArangoClusterSynchronizations) UpdateStatus(ctx context.Context, arangoClusterSynchronization *v2alpha1.ArangoClusterSynchronization, opts v1.UpdateOptions) (result *v2alpha1.ArangoClusterSynchronization, err error) { + emptyResult := &v2alpha1.ArangoClusterSynchronization{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangoclustersynchronizationsResource, "status", c.ns, arangoClusterSynchronization), &v2alpha1.ArangoClusterSynchronization{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangoclustersynchronizationsResource, "status", c.ns, arangoClusterSynchronization, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoClusterSynchronization), err } @@ -127,7 +132,7 @@ func (c *FakeArangoClusterSynchronizations) Delete(ctx context.Context, name str // DeleteCollection deletes a collection of objects. func (c *FakeArangoClusterSynchronizations) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangoclustersynchronizationsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangoclustersynchronizationsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v2alpha1.ArangoClusterSynchronizationList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoClusterSynchronizations) DeleteCollection(ctx context.Context // Patch applies the patch and returns the patched arangoClusterSynchronization. func (c *FakeArangoClusterSynchronizations) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v2alpha1.ArangoClusterSynchronization, err error) { + emptyResult := &v2alpha1.ArangoClusterSynchronization{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangoclustersynchronizationsResource, c.ns, name, pt, data, subresources...), &v2alpha1.ArangoClusterSynchronization{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangoclustersynchronizationsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoClusterSynchronization), err } diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangodeployment.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangodeployment.go index 4bd8f25cd..a73336b6c 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangodeployment.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangodeployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangodeploymentsKind = v2alpha1.SchemeGroupVersion.WithKind("ArangoDeployme // Get takes name of the arangoDeployment, and returns the corresponding arangoDeployment object, and an error if there is any. func (c *FakeArangoDeployments) Get(ctx context.Context, name string, options v1.GetOptions) (result *v2alpha1.ArangoDeployment, err error) { + emptyResult := &v2alpha1.ArangoDeployment{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangodeploymentsResource, c.ns, name), &v2alpha1.ArangoDeployment{}) + Invokes(testing.NewGetActionWithOptions(arangodeploymentsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoDeployment), err } // List takes label and field selectors, and returns the list of ArangoDeployments that match those selectors. func (c *FakeArangoDeployments) List(ctx context.Context, opts v1.ListOptions) (result *v2alpha1.ArangoDeploymentList, err error) { + emptyResult := &v2alpha1.ArangoDeploymentList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangodeploymentsResource, arangodeploymentsKind, c.ns, opts), &v2alpha1.ArangoDeploymentList{}) + Invokes(testing.NewListActionWithOptions(arangodeploymentsResource, arangodeploymentsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoDeployments) List(ctx context.Context, opts v1.ListOptions) ( // Watch returns a watch.Interface that watches the requested arangoDeployments. func (c *FakeArangoDeployments) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangodeploymentsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangodeploymentsResource, c.ns, opts)) } // Create takes the representation of a arangoDeployment and creates it. Returns the server's representation of the arangoDeployment, and an error, if there is any. func (c *FakeArangoDeployments) Create(ctx context.Context, arangoDeployment *v2alpha1.ArangoDeployment, opts v1.CreateOptions) (result *v2alpha1.ArangoDeployment, err error) { + emptyResult := &v2alpha1.ArangoDeployment{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangodeploymentsResource, c.ns, arangoDeployment), &v2alpha1.ArangoDeployment{}) + Invokes(testing.NewCreateActionWithOptions(arangodeploymentsResource, c.ns, arangoDeployment, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoDeployment), err } // Update takes the representation of a arangoDeployment and updates it. Returns the server's representation of the arangoDeployment, and an error, if there is any. func (c *FakeArangoDeployments) Update(ctx context.Context, arangoDeployment *v2alpha1.ArangoDeployment, opts v1.UpdateOptions) (result *v2alpha1.ArangoDeployment, err error) { + emptyResult := &v2alpha1.ArangoDeployment{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangodeploymentsResource, c.ns, arangoDeployment), &v2alpha1.ArangoDeployment{}) + Invokes(testing.NewUpdateActionWithOptions(arangodeploymentsResource, c.ns, arangoDeployment, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoDeployment), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoDeployments) UpdateStatus(ctx context.Context, arangoDeployment *v2alpha1.ArangoDeployment, opts v1.UpdateOptions) (*v2alpha1.ArangoDeployment, error) { +func (c *FakeArangoDeployments) UpdateStatus(ctx context.Context, arangoDeployment *v2alpha1.ArangoDeployment, opts v1.UpdateOptions) (result *v2alpha1.ArangoDeployment, err error) { + emptyResult := &v2alpha1.ArangoDeployment{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangodeploymentsResource, "status", c.ns, arangoDeployment), &v2alpha1.ArangoDeployment{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangodeploymentsResource, "status", c.ns, arangoDeployment, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoDeployment), err } @@ -127,7 +132,7 @@ func (c *FakeArangoDeployments) Delete(ctx context.Context, name string, opts v1 // DeleteCollection deletes a collection of objects. func (c *FakeArangoDeployments) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangodeploymentsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangodeploymentsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v2alpha1.ArangoDeploymentList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoDeployments) DeleteCollection(ctx context.Context, opts v1.De // Patch applies the patch and returns the patched arangoDeployment. func (c *FakeArangoDeployments) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v2alpha1.ArangoDeployment, err error) { + emptyResult := &v2alpha1.ArangoDeployment{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangodeploymentsResource, c.ns, name, pt, data, subresources...), &v2alpha1.ArangoDeployment{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangodeploymentsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoDeployment), err } diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangomember.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangomember.go index 510753509..66b48443b 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangomember.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangomember.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangomembersKind = v2alpha1.SchemeGroupVersion.WithKind("ArangoMember") // Get takes name of the arangoMember, and returns the corresponding arangoMember object, and an error if there is any. func (c *FakeArangoMembers) Get(ctx context.Context, name string, options v1.GetOptions) (result *v2alpha1.ArangoMember, err error) { + emptyResult := &v2alpha1.ArangoMember{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangomembersResource, c.ns, name), &v2alpha1.ArangoMember{}) + Invokes(testing.NewGetActionWithOptions(arangomembersResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoMember), err } // List takes label and field selectors, and returns the list of ArangoMembers that match those selectors. func (c *FakeArangoMembers) List(ctx context.Context, opts v1.ListOptions) (result *v2alpha1.ArangoMemberList, err error) { + emptyResult := &v2alpha1.ArangoMemberList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangomembersResource, arangomembersKind, c.ns, opts), &v2alpha1.ArangoMemberList{}) + Invokes(testing.NewListActionWithOptions(arangomembersResource, arangomembersKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoMembers) List(ctx context.Context, opts v1.ListOptions) (resu // Watch returns a watch.Interface that watches the requested arangoMembers. func (c *FakeArangoMembers) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangomembersResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangomembersResource, c.ns, opts)) } // Create takes the representation of a arangoMember and creates it. Returns the server's representation of the arangoMember, and an error, if there is any. func (c *FakeArangoMembers) Create(ctx context.Context, arangoMember *v2alpha1.ArangoMember, opts v1.CreateOptions) (result *v2alpha1.ArangoMember, err error) { + emptyResult := &v2alpha1.ArangoMember{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangomembersResource, c.ns, arangoMember), &v2alpha1.ArangoMember{}) + Invokes(testing.NewCreateActionWithOptions(arangomembersResource, c.ns, arangoMember, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoMember), err } // Update takes the representation of a arangoMember and updates it. Returns the server's representation of the arangoMember, and an error, if there is any. func (c *FakeArangoMembers) Update(ctx context.Context, arangoMember *v2alpha1.ArangoMember, opts v1.UpdateOptions) (result *v2alpha1.ArangoMember, err error) { + emptyResult := &v2alpha1.ArangoMember{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangomembersResource, c.ns, arangoMember), &v2alpha1.ArangoMember{}) + Invokes(testing.NewUpdateActionWithOptions(arangomembersResource, c.ns, arangoMember, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoMember), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoMembers) UpdateStatus(ctx context.Context, arangoMember *v2alpha1.ArangoMember, opts v1.UpdateOptions) (*v2alpha1.ArangoMember, error) { +func (c *FakeArangoMembers) UpdateStatus(ctx context.Context, arangoMember *v2alpha1.ArangoMember, opts v1.UpdateOptions) (result *v2alpha1.ArangoMember, err error) { + emptyResult := &v2alpha1.ArangoMember{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangomembersResource, "status", c.ns, arangoMember), &v2alpha1.ArangoMember{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangomembersResource, "status", c.ns, arangoMember, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoMember), err } @@ -127,7 +132,7 @@ func (c *FakeArangoMembers) Delete(ctx context.Context, name string, opts v1.Del // DeleteCollection deletes a collection of objects. func (c *FakeArangoMembers) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangomembersResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangomembersResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v2alpha1.ArangoMemberList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoMembers) DeleteCollection(ctx context.Context, opts v1.Delete // Patch applies the patch and returns the patched arangoMember. func (c *FakeArangoMembers) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v2alpha1.ArangoMember, err error) { + emptyResult := &v2alpha1.ArangoMember{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangomembersResource, c.ns, name, pt, data, subresources...), &v2alpha1.ArangoMember{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangomembersResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoMember), err } diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangotask.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangotask.go index 558e51105..be926350e 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangotask.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangotask.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangotasksKind = v2alpha1.SchemeGroupVersion.WithKind("ArangoTask") // Get takes name of the arangoTask, and returns the corresponding arangoTask object, and an error if there is any. func (c *FakeArangoTasks) Get(ctx context.Context, name string, options v1.GetOptions) (result *v2alpha1.ArangoTask, err error) { + emptyResult := &v2alpha1.ArangoTask{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangotasksResource, c.ns, name), &v2alpha1.ArangoTask{}) + Invokes(testing.NewGetActionWithOptions(arangotasksResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoTask), err } // List takes label and field selectors, and returns the list of ArangoTasks that match those selectors. func (c *FakeArangoTasks) List(ctx context.Context, opts v1.ListOptions) (result *v2alpha1.ArangoTaskList, err error) { + emptyResult := &v2alpha1.ArangoTaskList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangotasksResource, arangotasksKind, c.ns, opts), &v2alpha1.ArangoTaskList{}) + Invokes(testing.NewListActionWithOptions(arangotasksResource, arangotasksKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoTasks) List(ctx context.Context, opts v1.ListOptions) (result // Watch returns a watch.Interface that watches the requested arangoTasks. func (c *FakeArangoTasks) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangotasksResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangotasksResource, c.ns, opts)) } // Create takes the representation of a arangoTask and creates it. Returns the server's representation of the arangoTask, and an error, if there is any. func (c *FakeArangoTasks) Create(ctx context.Context, arangoTask *v2alpha1.ArangoTask, opts v1.CreateOptions) (result *v2alpha1.ArangoTask, err error) { + emptyResult := &v2alpha1.ArangoTask{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangotasksResource, c.ns, arangoTask), &v2alpha1.ArangoTask{}) + Invokes(testing.NewCreateActionWithOptions(arangotasksResource, c.ns, arangoTask, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoTask), err } // Update takes the representation of a arangoTask and updates it. Returns the server's representation of the arangoTask, and an error, if there is any. func (c *FakeArangoTasks) Update(ctx context.Context, arangoTask *v2alpha1.ArangoTask, opts v1.UpdateOptions) (result *v2alpha1.ArangoTask, err error) { + emptyResult := &v2alpha1.ArangoTask{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangotasksResource, c.ns, arangoTask), &v2alpha1.ArangoTask{}) + Invokes(testing.NewUpdateActionWithOptions(arangotasksResource, c.ns, arangoTask, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoTask), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoTasks) UpdateStatus(ctx context.Context, arangoTask *v2alpha1.ArangoTask, opts v1.UpdateOptions) (*v2alpha1.ArangoTask, error) { +func (c *FakeArangoTasks) UpdateStatus(ctx context.Context, arangoTask *v2alpha1.ArangoTask, opts v1.UpdateOptions) (result *v2alpha1.ArangoTask, err error) { + emptyResult := &v2alpha1.ArangoTask{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangotasksResource, "status", c.ns, arangoTask), &v2alpha1.ArangoTask{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangotasksResource, "status", c.ns, arangoTask, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoTask), err } @@ -127,7 +132,7 @@ func (c *FakeArangoTasks) Delete(ctx context.Context, name string, opts v1.Delet // DeleteCollection deletes a collection of objects. func (c *FakeArangoTasks) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangotasksResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangotasksResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v2alpha1.ArangoTaskList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoTasks) DeleteCollection(ctx context.Context, opts v1.DeleteOp // Patch applies the patch and returns the patched arangoTask. func (c *FakeArangoTasks) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v2alpha1.ArangoTask, err error) { + emptyResult := &v2alpha1.ArangoTask{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangotasksResource, c.ns, name, pt, data, subresources...), &v2alpha1.ArangoTask{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangotasksResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoTask), err } diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_deployment_client.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_deployment_client.go index aa62a2581..577085e3c 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_deployment_client.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_deployment_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/generated_expansion.go index 2e5492442..de5345b21 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/generated_expansion.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlbatchjob.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlbatchjob.go index b28536956..b49ac8e2e 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlbatchjob.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlbatchjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1alpha1 import ( "context" - "time" v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoMLBatchJobsGetter has a method to return a ArangoMLBatchJobInterface. @@ -44,6 +43,7 @@ type ArangoMLBatchJobsGetter interface { type ArangoMLBatchJobInterface interface { Create(ctx context.Context, arangoMLBatchJob *v1alpha1.ArangoMLBatchJob, opts v1.CreateOptions) (*v1alpha1.ArangoMLBatchJob, error) Update(ctx context.Context, arangoMLBatchJob *v1alpha1.ArangoMLBatchJob, opts v1.UpdateOptions) (*v1alpha1.ArangoMLBatchJob, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoMLBatchJob *v1alpha1.ArangoMLBatchJob, opts v1.UpdateOptions) (*v1alpha1.ArangoMLBatchJob, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoMLBatchJobInterface interface { // arangoMLBatchJobs implements ArangoMLBatchJobInterface type arangoMLBatchJobs struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1alpha1.ArangoMLBatchJob, *v1alpha1.ArangoMLBatchJobList] } // newArangoMLBatchJobs returns a ArangoMLBatchJobs func newArangoMLBatchJobs(c *MlV1alpha1Client, namespace string) *arangoMLBatchJobs { return &arangoMLBatchJobs{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1alpha1.ArangoMLBatchJob, *v1alpha1.ArangoMLBatchJobList]( + "arangomlbatchjobs", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1alpha1.ArangoMLBatchJob { return &v1alpha1.ArangoMLBatchJob{} }, + func() *v1alpha1.ArangoMLBatchJobList { return &v1alpha1.ArangoMLBatchJobList{} }), } } - -// Get takes name of the arangoMLBatchJob, and returns the corresponding arangoMLBatchJob object, and an error if there is any. -func (c *arangoMLBatchJobs) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoMLBatchJob, err error) { - result = &v1alpha1.ArangoMLBatchJob{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomlbatchjobs"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoMLBatchJobs that match those selectors. -func (c *arangoMLBatchJobs) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoMLBatchJobList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1alpha1.ArangoMLBatchJobList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomlbatchjobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoMLBatchJobs. -func (c *arangoMLBatchJobs) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangomlbatchjobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoMLBatchJob and creates it. Returns the server's representation of the arangoMLBatchJob, and an error, if there is any. -func (c *arangoMLBatchJobs) Create(ctx context.Context, arangoMLBatchJob *v1alpha1.ArangoMLBatchJob, opts v1.CreateOptions) (result *v1alpha1.ArangoMLBatchJob, err error) { - result = &v1alpha1.ArangoMLBatchJob{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangomlbatchjobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLBatchJob). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoMLBatchJob and updates it. Returns the server's representation of the arangoMLBatchJob, and an error, if there is any. -func (c *arangoMLBatchJobs) Update(ctx context.Context, arangoMLBatchJob *v1alpha1.ArangoMLBatchJob, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLBatchJob, err error) { - result = &v1alpha1.ArangoMLBatchJob{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomlbatchjobs"). - Name(arangoMLBatchJob.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLBatchJob). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoMLBatchJobs) UpdateStatus(ctx context.Context, arangoMLBatchJob *v1alpha1.ArangoMLBatchJob, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLBatchJob, err error) { - result = &v1alpha1.ArangoMLBatchJob{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomlbatchjobs"). - Name(arangoMLBatchJob.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLBatchJob). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoMLBatchJob and deletes it. Returns an error if one occurs. -func (c *arangoMLBatchJobs) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomlbatchjobs"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoMLBatchJobs) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomlbatchjobs"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoMLBatchJob. -func (c *arangoMLBatchJobs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoMLBatchJob, err error) { - result = &v1alpha1.ArangoMLBatchJob{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangomlbatchjobs"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlcronjob.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlcronjob.go index de6e0b905..7c2364881 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlcronjob.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlcronjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1alpha1 import ( "context" - "time" v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoMLCronJobsGetter has a method to return a ArangoMLCronJobInterface. @@ -44,6 +43,7 @@ type ArangoMLCronJobsGetter interface { type ArangoMLCronJobInterface interface { Create(ctx context.Context, arangoMLCronJob *v1alpha1.ArangoMLCronJob, opts v1.CreateOptions) (*v1alpha1.ArangoMLCronJob, error) Update(ctx context.Context, arangoMLCronJob *v1alpha1.ArangoMLCronJob, opts v1.UpdateOptions) (*v1alpha1.ArangoMLCronJob, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoMLCronJob *v1alpha1.ArangoMLCronJob, opts v1.UpdateOptions) (*v1alpha1.ArangoMLCronJob, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoMLCronJobInterface interface { // arangoMLCronJobs implements ArangoMLCronJobInterface type arangoMLCronJobs struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1alpha1.ArangoMLCronJob, *v1alpha1.ArangoMLCronJobList] } // newArangoMLCronJobs returns a ArangoMLCronJobs func newArangoMLCronJobs(c *MlV1alpha1Client, namespace string) *arangoMLCronJobs { return &arangoMLCronJobs{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1alpha1.ArangoMLCronJob, *v1alpha1.ArangoMLCronJobList]( + "arangomlcronjobs", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1alpha1.ArangoMLCronJob { return &v1alpha1.ArangoMLCronJob{} }, + func() *v1alpha1.ArangoMLCronJobList { return &v1alpha1.ArangoMLCronJobList{} }), } } - -// Get takes name of the arangoMLCronJob, and returns the corresponding arangoMLCronJob object, and an error if there is any. -func (c *arangoMLCronJobs) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoMLCronJob, err error) { - result = &v1alpha1.ArangoMLCronJob{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomlcronjobs"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoMLCronJobs that match those selectors. -func (c *arangoMLCronJobs) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoMLCronJobList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1alpha1.ArangoMLCronJobList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomlcronjobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoMLCronJobs. -func (c *arangoMLCronJobs) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangomlcronjobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoMLCronJob and creates it. Returns the server's representation of the arangoMLCronJob, and an error, if there is any. -func (c *arangoMLCronJobs) Create(ctx context.Context, arangoMLCronJob *v1alpha1.ArangoMLCronJob, opts v1.CreateOptions) (result *v1alpha1.ArangoMLCronJob, err error) { - result = &v1alpha1.ArangoMLCronJob{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangomlcronjobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLCronJob). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoMLCronJob and updates it. Returns the server's representation of the arangoMLCronJob, and an error, if there is any. -func (c *arangoMLCronJobs) Update(ctx context.Context, arangoMLCronJob *v1alpha1.ArangoMLCronJob, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLCronJob, err error) { - result = &v1alpha1.ArangoMLCronJob{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomlcronjobs"). - Name(arangoMLCronJob.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLCronJob). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoMLCronJobs) UpdateStatus(ctx context.Context, arangoMLCronJob *v1alpha1.ArangoMLCronJob, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLCronJob, err error) { - result = &v1alpha1.ArangoMLCronJob{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomlcronjobs"). - Name(arangoMLCronJob.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLCronJob). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoMLCronJob and deletes it. Returns an error if one occurs. -func (c *arangoMLCronJobs) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomlcronjobs"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoMLCronJobs) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomlcronjobs"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoMLCronJob. -func (c *arangoMLCronJobs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoMLCronJob, err error) { - result = &v1alpha1.ArangoMLCronJob{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangomlcronjobs"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlextension.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlextension.go index 97fc91a5f..15d94c57a 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlextension.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlextension.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1alpha1 import ( "context" - "time" v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoMLExtensionsGetter has a method to return a ArangoMLExtensionInterface. @@ -44,6 +43,7 @@ type ArangoMLExtensionsGetter interface { type ArangoMLExtensionInterface interface { Create(ctx context.Context, arangoMLExtension *v1alpha1.ArangoMLExtension, opts v1.CreateOptions) (*v1alpha1.ArangoMLExtension, error) Update(ctx context.Context, arangoMLExtension *v1alpha1.ArangoMLExtension, opts v1.UpdateOptions) (*v1alpha1.ArangoMLExtension, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoMLExtension *v1alpha1.ArangoMLExtension, opts v1.UpdateOptions) (*v1alpha1.ArangoMLExtension, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoMLExtensionInterface interface { // arangoMLExtensions implements ArangoMLExtensionInterface type arangoMLExtensions struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1alpha1.ArangoMLExtension, *v1alpha1.ArangoMLExtensionList] } // newArangoMLExtensions returns a ArangoMLExtensions func newArangoMLExtensions(c *MlV1alpha1Client, namespace string) *arangoMLExtensions { return &arangoMLExtensions{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1alpha1.ArangoMLExtension, *v1alpha1.ArangoMLExtensionList]( + "arangomlextensions", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1alpha1.ArangoMLExtension { return &v1alpha1.ArangoMLExtension{} }, + func() *v1alpha1.ArangoMLExtensionList { return &v1alpha1.ArangoMLExtensionList{} }), } } - -// Get takes name of the arangoMLExtension, and returns the corresponding arangoMLExtension object, and an error if there is any. -func (c *arangoMLExtensions) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoMLExtension, err error) { - result = &v1alpha1.ArangoMLExtension{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomlextensions"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoMLExtensions that match those selectors. -func (c *arangoMLExtensions) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoMLExtensionList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1alpha1.ArangoMLExtensionList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomlextensions"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoMLExtensions. -func (c *arangoMLExtensions) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangomlextensions"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoMLExtension and creates it. Returns the server's representation of the arangoMLExtension, and an error, if there is any. -func (c *arangoMLExtensions) Create(ctx context.Context, arangoMLExtension *v1alpha1.ArangoMLExtension, opts v1.CreateOptions) (result *v1alpha1.ArangoMLExtension, err error) { - result = &v1alpha1.ArangoMLExtension{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangomlextensions"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLExtension). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoMLExtension and updates it. Returns the server's representation of the arangoMLExtension, and an error, if there is any. -func (c *arangoMLExtensions) Update(ctx context.Context, arangoMLExtension *v1alpha1.ArangoMLExtension, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLExtension, err error) { - result = &v1alpha1.ArangoMLExtension{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomlextensions"). - Name(arangoMLExtension.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLExtension). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoMLExtensions) UpdateStatus(ctx context.Context, arangoMLExtension *v1alpha1.ArangoMLExtension, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLExtension, err error) { - result = &v1alpha1.ArangoMLExtension{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomlextensions"). - Name(arangoMLExtension.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLExtension). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoMLExtension and deletes it. Returns an error if one occurs. -func (c *arangoMLExtensions) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomlextensions"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoMLExtensions) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomlextensions"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoMLExtension. -func (c *arangoMLExtensions) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoMLExtension, err error) { - result = &v1alpha1.ArangoMLExtension{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangomlextensions"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlstorage.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlstorage.go index a724e17b6..99e9bb305 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlstorage.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlstorage.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1alpha1 import ( "context" - "time" v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoMLStoragesGetter has a method to return a ArangoMLStorageInterface. @@ -44,6 +43,7 @@ type ArangoMLStoragesGetter interface { type ArangoMLStorageInterface interface { Create(ctx context.Context, arangoMLStorage *v1alpha1.ArangoMLStorage, opts v1.CreateOptions) (*v1alpha1.ArangoMLStorage, error) Update(ctx context.Context, arangoMLStorage *v1alpha1.ArangoMLStorage, opts v1.UpdateOptions) (*v1alpha1.ArangoMLStorage, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoMLStorage *v1alpha1.ArangoMLStorage, opts v1.UpdateOptions) (*v1alpha1.ArangoMLStorage, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoMLStorageInterface interface { // arangoMLStorages implements ArangoMLStorageInterface type arangoMLStorages struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1alpha1.ArangoMLStorage, *v1alpha1.ArangoMLStorageList] } // newArangoMLStorages returns a ArangoMLStorages func newArangoMLStorages(c *MlV1alpha1Client, namespace string) *arangoMLStorages { return &arangoMLStorages{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1alpha1.ArangoMLStorage, *v1alpha1.ArangoMLStorageList]( + "arangomlstorages", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1alpha1.ArangoMLStorage { return &v1alpha1.ArangoMLStorage{} }, + func() *v1alpha1.ArangoMLStorageList { return &v1alpha1.ArangoMLStorageList{} }), } } - -// Get takes name of the arangoMLStorage, and returns the corresponding arangoMLStorage object, and an error if there is any. -func (c *arangoMLStorages) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoMLStorage, err error) { - result = &v1alpha1.ArangoMLStorage{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomlstorages"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoMLStorages that match those selectors. -func (c *arangoMLStorages) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoMLStorageList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1alpha1.ArangoMLStorageList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomlstorages"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoMLStorages. -func (c *arangoMLStorages) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangomlstorages"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoMLStorage and creates it. Returns the server's representation of the arangoMLStorage, and an error, if there is any. -func (c *arangoMLStorages) Create(ctx context.Context, arangoMLStorage *v1alpha1.ArangoMLStorage, opts v1.CreateOptions) (result *v1alpha1.ArangoMLStorage, err error) { - result = &v1alpha1.ArangoMLStorage{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangomlstorages"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLStorage). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoMLStorage and updates it. Returns the server's representation of the arangoMLStorage, and an error, if there is any. -func (c *arangoMLStorages) Update(ctx context.Context, arangoMLStorage *v1alpha1.ArangoMLStorage, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLStorage, err error) { - result = &v1alpha1.ArangoMLStorage{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomlstorages"). - Name(arangoMLStorage.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLStorage). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoMLStorages) UpdateStatus(ctx context.Context, arangoMLStorage *v1alpha1.ArangoMLStorage, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLStorage, err error) { - result = &v1alpha1.ArangoMLStorage{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomlstorages"). - Name(arangoMLStorage.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLStorage). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoMLStorage and deletes it. Returns an error if one occurs. -func (c *arangoMLStorages) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomlstorages"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoMLStorages) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomlstorages"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoMLStorage. -func (c *arangoMLStorages) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoMLStorage, err error) { - result = &v1alpha1.ArangoMLStorage{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangomlstorages"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/doc.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/doc.go index f45dab6c5..2ad43a88a 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/doc.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/doc.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/doc.go index cc487d814..cb60dd032 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/doc.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlbatchjob.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlbatchjob.go index a38c287e8..cc25d284e 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlbatchjob.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlbatchjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangomlbatchjobsKind = v1alpha1.SchemeGroupVersion.WithKind("ArangoMLBatchJ // Get takes name of the arangoMLBatchJob, and returns the corresponding arangoMLBatchJob object, and an error if there is any. func (c *FakeArangoMLBatchJobs) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoMLBatchJob, err error) { + emptyResult := &v1alpha1.ArangoMLBatchJob{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangomlbatchjobsResource, c.ns, name), &v1alpha1.ArangoMLBatchJob{}) + Invokes(testing.NewGetActionWithOptions(arangomlbatchjobsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLBatchJob), err } // List takes label and field selectors, and returns the list of ArangoMLBatchJobs that match those selectors. func (c *FakeArangoMLBatchJobs) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoMLBatchJobList, err error) { + emptyResult := &v1alpha1.ArangoMLBatchJobList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangomlbatchjobsResource, arangomlbatchjobsKind, c.ns, opts), &v1alpha1.ArangoMLBatchJobList{}) + Invokes(testing.NewListActionWithOptions(arangomlbatchjobsResource, arangomlbatchjobsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoMLBatchJobs) List(ctx context.Context, opts v1.ListOptions) ( // Watch returns a watch.Interface that watches the requested arangoMLBatchJobs. func (c *FakeArangoMLBatchJobs) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangomlbatchjobsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangomlbatchjobsResource, c.ns, opts)) } // Create takes the representation of a arangoMLBatchJob and creates it. Returns the server's representation of the arangoMLBatchJob, and an error, if there is any. func (c *FakeArangoMLBatchJobs) Create(ctx context.Context, arangoMLBatchJob *v1alpha1.ArangoMLBatchJob, opts v1.CreateOptions) (result *v1alpha1.ArangoMLBatchJob, err error) { + emptyResult := &v1alpha1.ArangoMLBatchJob{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangomlbatchjobsResource, c.ns, arangoMLBatchJob), &v1alpha1.ArangoMLBatchJob{}) + Invokes(testing.NewCreateActionWithOptions(arangomlbatchjobsResource, c.ns, arangoMLBatchJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLBatchJob), err } // Update takes the representation of a arangoMLBatchJob and updates it. Returns the server's representation of the arangoMLBatchJob, and an error, if there is any. func (c *FakeArangoMLBatchJobs) Update(ctx context.Context, arangoMLBatchJob *v1alpha1.ArangoMLBatchJob, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLBatchJob, err error) { + emptyResult := &v1alpha1.ArangoMLBatchJob{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangomlbatchjobsResource, c.ns, arangoMLBatchJob), &v1alpha1.ArangoMLBatchJob{}) + Invokes(testing.NewUpdateActionWithOptions(arangomlbatchjobsResource, c.ns, arangoMLBatchJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLBatchJob), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoMLBatchJobs) UpdateStatus(ctx context.Context, arangoMLBatchJob *v1alpha1.ArangoMLBatchJob, opts v1.UpdateOptions) (*v1alpha1.ArangoMLBatchJob, error) { +func (c *FakeArangoMLBatchJobs) UpdateStatus(ctx context.Context, arangoMLBatchJob *v1alpha1.ArangoMLBatchJob, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLBatchJob, err error) { + emptyResult := &v1alpha1.ArangoMLBatchJob{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangomlbatchjobsResource, "status", c.ns, arangoMLBatchJob), &v1alpha1.ArangoMLBatchJob{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangomlbatchjobsResource, "status", c.ns, arangoMLBatchJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLBatchJob), err } @@ -127,7 +132,7 @@ func (c *FakeArangoMLBatchJobs) Delete(ctx context.Context, name string, opts v1 // DeleteCollection deletes a collection of objects. func (c *FakeArangoMLBatchJobs) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangomlbatchjobsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangomlbatchjobsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1alpha1.ArangoMLBatchJobList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoMLBatchJobs) DeleteCollection(ctx context.Context, opts v1.De // Patch applies the patch and returns the patched arangoMLBatchJob. func (c *FakeArangoMLBatchJobs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoMLBatchJob, err error) { + emptyResult := &v1alpha1.ArangoMLBatchJob{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangomlbatchjobsResource, c.ns, name, pt, data, subresources...), &v1alpha1.ArangoMLBatchJob{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangomlbatchjobsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLBatchJob), err } diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlcronjob.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlcronjob.go index f2e4ab271..f49305016 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlcronjob.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlcronjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangomlcronjobsKind = v1alpha1.SchemeGroupVersion.WithKind("ArangoMLCronJob // Get takes name of the arangoMLCronJob, and returns the corresponding arangoMLCronJob object, and an error if there is any. func (c *FakeArangoMLCronJobs) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoMLCronJob, err error) { + emptyResult := &v1alpha1.ArangoMLCronJob{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangomlcronjobsResource, c.ns, name), &v1alpha1.ArangoMLCronJob{}) + Invokes(testing.NewGetActionWithOptions(arangomlcronjobsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLCronJob), err } // List takes label and field selectors, and returns the list of ArangoMLCronJobs that match those selectors. func (c *FakeArangoMLCronJobs) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoMLCronJobList, err error) { + emptyResult := &v1alpha1.ArangoMLCronJobList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangomlcronjobsResource, arangomlcronjobsKind, c.ns, opts), &v1alpha1.ArangoMLCronJobList{}) + Invokes(testing.NewListActionWithOptions(arangomlcronjobsResource, arangomlcronjobsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoMLCronJobs) List(ctx context.Context, opts v1.ListOptions) (r // Watch returns a watch.Interface that watches the requested arangoMLCronJobs. func (c *FakeArangoMLCronJobs) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangomlcronjobsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangomlcronjobsResource, c.ns, opts)) } // Create takes the representation of a arangoMLCronJob and creates it. Returns the server's representation of the arangoMLCronJob, and an error, if there is any. func (c *FakeArangoMLCronJobs) Create(ctx context.Context, arangoMLCronJob *v1alpha1.ArangoMLCronJob, opts v1.CreateOptions) (result *v1alpha1.ArangoMLCronJob, err error) { + emptyResult := &v1alpha1.ArangoMLCronJob{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangomlcronjobsResource, c.ns, arangoMLCronJob), &v1alpha1.ArangoMLCronJob{}) + Invokes(testing.NewCreateActionWithOptions(arangomlcronjobsResource, c.ns, arangoMLCronJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLCronJob), err } // Update takes the representation of a arangoMLCronJob and updates it. Returns the server's representation of the arangoMLCronJob, and an error, if there is any. func (c *FakeArangoMLCronJobs) Update(ctx context.Context, arangoMLCronJob *v1alpha1.ArangoMLCronJob, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLCronJob, err error) { + emptyResult := &v1alpha1.ArangoMLCronJob{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangomlcronjobsResource, c.ns, arangoMLCronJob), &v1alpha1.ArangoMLCronJob{}) + Invokes(testing.NewUpdateActionWithOptions(arangomlcronjobsResource, c.ns, arangoMLCronJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLCronJob), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoMLCronJobs) UpdateStatus(ctx context.Context, arangoMLCronJob *v1alpha1.ArangoMLCronJob, opts v1.UpdateOptions) (*v1alpha1.ArangoMLCronJob, error) { +func (c *FakeArangoMLCronJobs) UpdateStatus(ctx context.Context, arangoMLCronJob *v1alpha1.ArangoMLCronJob, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLCronJob, err error) { + emptyResult := &v1alpha1.ArangoMLCronJob{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangomlcronjobsResource, "status", c.ns, arangoMLCronJob), &v1alpha1.ArangoMLCronJob{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangomlcronjobsResource, "status", c.ns, arangoMLCronJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLCronJob), err } @@ -127,7 +132,7 @@ func (c *FakeArangoMLCronJobs) Delete(ctx context.Context, name string, opts v1. // DeleteCollection deletes a collection of objects. func (c *FakeArangoMLCronJobs) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangomlcronjobsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangomlcronjobsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1alpha1.ArangoMLCronJobList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoMLCronJobs) DeleteCollection(ctx context.Context, opts v1.Del // Patch applies the patch and returns the patched arangoMLCronJob. func (c *FakeArangoMLCronJobs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoMLCronJob, err error) { + emptyResult := &v1alpha1.ArangoMLCronJob{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangomlcronjobsResource, c.ns, name, pt, data, subresources...), &v1alpha1.ArangoMLCronJob{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangomlcronjobsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLCronJob), err } diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlextension.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlextension.go index 6d3091e74..4f3b13fc5 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlextension.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlextension.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangomlextensionsKind = v1alpha1.SchemeGroupVersion.WithKind("ArangoMLExten // Get takes name of the arangoMLExtension, and returns the corresponding arangoMLExtension object, and an error if there is any. func (c *FakeArangoMLExtensions) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoMLExtension, err error) { + emptyResult := &v1alpha1.ArangoMLExtension{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangomlextensionsResource, c.ns, name), &v1alpha1.ArangoMLExtension{}) + Invokes(testing.NewGetActionWithOptions(arangomlextensionsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLExtension), err } // List takes label and field selectors, and returns the list of ArangoMLExtensions that match those selectors. func (c *FakeArangoMLExtensions) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoMLExtensionList, err error) { + emptyResult := &v1alpha1.ArangoMLExtensionList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangomlextensionsResource, arangomlextensionsKind, c.ns, opts), &v1alpha1.ArangoMLExtensionList{}) + Invokes(testing.NewListActionWithOptions(arangomlextensionsResource, arangomlextensionsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoMLExtensions) List(ctx context.Context, opts v1.ListOptions) // Watch returns a watch.Interface that watches the requested arangoMLExtensions. func (c *FakeArangoMLExtensions) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangomlextensionsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangomlextensionsResource, c.ns, opts)) } // Create takes the representation of a arangoMLExtension and creates it. Returns the server's representation of the arangoMLExtension, and an error, if there is any. func (c *FakeArangoMLExtensions) Create(ctx context.Context, arangoMLExtension *v1alpha1.ArangoMLExtension, opts v1.CreateOptions) (result *v1alpha1.ArangoMLExtension, err error) { + emptyResult := &v1alpha1.ArangoMLExtension{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangomlextensionsResource, c.ns, arangoMLExtension), &v1alpha1.ArangoMLExtension{}) + Invokes(testing.NewCreateActionWithOptions(arangomlextensionsResource, c.ns, arangoMLExtension, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLExtension), err } // Update takes the representation of a arangoMLExtension and updates it. Returns the server's representation of the arangoMLExtension, and an error, if there is any. func (c *FakeArangoMLExtensions) Update(ctx context.Context, arangoMLExtension *v1alpha1.ArangoMLExtension, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLExtension, err error) { + emptyResult := &v1alpha1.ArangoMLExtension{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangomlextensionsResource, c.ns, arangoMLExtension), &v1alpha1.ArangoMLExtension{}) + Invokes(testing.NewUpdateActionWithOptions(arangomlextensionsResource, c.ns, arangoMLExtension, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLExtension), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoMLExtensions) UpdateStatus(ctx context.Context, arangoMLExtension *v1alpha1.ArangoMLExtension, opts v1.UpdateOptions) (*v1alpha1.ArangoMLExtension, error) { +func (c *FakeArangoMLExtensions) UpdateStatus(ctx context.Context, arangoMLExtension *v1alpha1.ArangoMLExtension, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLExtension, err error) { + emptyResult := &v1alpha1.ArangoMLExtension{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangomlextensionsResource, "status", c.ns, arangoMLExtension), &v1alpha1.ArangoMLExtension{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangomlextensionsResource, "status", c.ns, arangoMLExtension, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLExtension), err } @@ -127,7 +132,7 @@ func (c *FakeArangoMLExtensions) Delete(ctx context.Context, name string, opts v // DeleteCollection deletes a collection of objects. func (c *FakeArangoMLExtensions) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangomlextensionsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangomlextensionsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1alpha1.ArangoMLExtensionList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoMLExtensions) DeleteCollection(ctx context.Context, opts v1.D // Patch applies the patch and returns the patched arangoMLExtension. func (c *FakeArangoMLExtensions) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoMLExtension, err error) { + emptyResult := &v1alpha1.ArangoMLExtension{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangomlextensionsResource, c.ns, name, pt, data, subresources...), &v1alpha1.ArangoMLExtension{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangomlextensionsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLExtension), err } diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlstorage.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlstorage.go index ef94ebbb8..9d8482714 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlstorage.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlstorage.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangomlstoragesKind = v1alpha1.SchemeGroupVersion.WithKind("ArangoMLStorage // Get takes name of the arangoMLStorage, and returns the corresponding arangoMLStorage object, and an error if there is any. func (c *FakeArangoMLStorages) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoMLStorage, err error) { + emptyResult := &v1alpha1.ArangoMLStorage{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangomlstoragesResource, c.ns, name), &v1alpha1.ArangoMLStorage{}) + Invokes(testing.NewGetActionWithOptions(arangomlstoragesResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLStorage), err } // List takes label and field selectors, and returns the list of ArangoMLStorages that match those selectors. func (c *FakeArangoMLStorages) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoMLStorageList, err error) { + emptyResult := &v1alpha1.ArangoMLStorageList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangomlstoragesResource, arangomlstoragesKind, c.ns, opts), &v1alpha1.ArangoMLStorageList{}) + Invokes(testing.NewListActionWithOptions(arangomlstoragesResource, arangomlstoragesKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoMLStorages) List(ctx context.Context, opts v1.ListOptions) (r // Watch returns a watch.Interface that watches the requested arangoMLStorages. func (c *FakeArangoMLStorages) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangomlstoragesResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangomlstoragesResource, c.ns, opts)) } // Create takes the representation of a arangoMLStorage and creates it. Returns the server's representation of the arangoMLStorage, and an error, if there is any. func (c *FakeArangoMLStorages) Create(ctx context.Context, arangoMLStorage *v1alpha1.ArangoMLStorage, opts v1.CreateOptions) (result *v1alpha1.ArangoMLStorage, err error) { + emptyResult := &v1alpha1.ArangoMLStorage{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangomlstoragesResource, c.ns, arangoMLStorage), &v1alpha1.ArangoMLStorage{}) + Invokes(testing.NewCreateActionWithOptions(arangomlstoragesResource, c.ns, arangoMLStorage, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLStorage), err } // Update takes the representation of a arangoMLStorage and updates it. Returns the server's representation of the arangoMLStorage, and an error, if there is any. func (c *FakeArangoMLStorages) Update(ctx context.Context, arangoMLStorage *v1alpha1.ArangoMLStorage, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLStorage, err error) { + emptyResult := &v1alpha1.ArangoMLStorage{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangomlstoragesResource, c.ns, arangoMLStorage), &v1alpha1.ArangoMLStorage{}) + Invokes(testing.NewUpdateActionWithOptions(arangomlstoragesResource, c.ns, arangoMLStorage, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLStorage), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoMLStorages) UpdateStatus(ctx context.Context, arangoMLStorage *v1alpha1.ArangoMLStorage, opts v1.UpdateOptions) (*v1alpha1.ArangoMLStorage, error) { +func (c *FakeArangoMLStorages) UpdateStatus(ctx context.Context, arangoMLStorage *v1alpha1.ArangoMLStorage, opts v1.UpdateOptions) (result *v1alpha1.ArangoMLStorage, err error) { + emptyResult := &v1alpha1.ArangoMLStorage{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangomlstoragesResource, "status", c.ns, arangoMLStorage), &v1alpha1.ArangoMLStorage{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangomlstoragesResource, "status", c.ns, arangoMLStorage, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLStorage), err } @@ -127,7 +132,7 @@ func (c *FakeArangoMLStorages) Delete(ctx context.Context, name string, opts v1. // DeleteCollection deletes a collection of objects. func (c *FakeArangoMLStorages) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangomlstoragesResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangomlstoragesResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1alpha1.ArangoMLStorageList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoMLStorages) DeleteCollection(ctx context.Context, opts v1.Del // Patch applies the patch and returns the patched arangoMLStorage. func (c *FakeArangoMLStorages) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoMLStorage, err error) { + emptyResult := &v1alpha1.ArangoMLStorage{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangomlstoragesResource, c.ns, name, pt, data, subresources...), &v1alpha1.ArangoMLStorage{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangomlstoragesResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoMLStorage), err } diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_ml_client.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_ml_client.go index 019bcf723..ebfb6aecd 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_ml_client.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_ml_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/generated_expansion.go index aa7075d8a..e47a68ffb 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/generated_expansion.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/ml_client.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/ml_client.go index b78e9bf3b..20af6c454 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/ml_client.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/ml_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlextension.go b/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlextension.go index 2c38e940e..e82aa1d2b 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlextension.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlextension.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1beta1 import ( "context" - "time" v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoMLExtensionsGetter has a method to return a ArangoMLExtensionInterface. @@ -44,6 +43,7 @@ type ArangoMLExtensionsGetter interface { type ArangoMLExtensionInterface interface { Create(ctx context.Context, arangoMLExtension *v1beta1.ArangoMLExtension, opts v1.CreateOptions) (*v1beta1.ArangoMLExtension, error) Update(ctx context.Context, arangoMLExtension *v1beta1.ArangoMLExtension, opts v1.UpdateOptions) (*v1beta1.ArangoMLExtension, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoMLExtension *v1beta1.ArangoMLExtension, opts v1.UpdateOptions) (*v1beta1.ArangoMLExtension, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoMLExtensionInterface interface { // arangoMLExtensions implements ArangoMLExtensionInterface type arangoMLExtensions struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1beta1.ArangoMLExtension, *v1beta1.ArangoMLExtensionList] } // newArangoMLExtensions returns a ArangoMLExtensions func newArangoMLExtensions(c *MlV1beta1Client, namespace string) *arangoMLExtensions { return &arangoMLExtensions{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1beta1.ArangoMLExtension, *v1beta1.ArangoMLExtensionList]( + "arangomlextensions", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1beta1.ArangoMLExtension { return &v1beta1.ArangoMLExtension{} }, + func() *v1beta1.ArangoMLExtensionList { return &v1beta1.ArangoMLExtensionList{} }), } } - -// Get takes name of the arangoMLExtension, and returns the corresponding arangoMLExtension object, and an error if there is any. -func (c *arangoMLExtensions) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ArangoMLExtension, err error) { - result = &v1beta1.ArangoMLExtension{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomlextensions"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoMLExtensions that match those selectors. -func (c *arangoMLExtensions) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ArangoMLExtensionList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1beta1.ArangoMLExtensionList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomlextensions"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoMLExtensions. -func (c *arangoMLExtensions) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangomlextensions"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoMLExtension and creates it. Returns the server's representation of the arangoMLExtension, and an error, if there is any. -func (c *arangoMLExtensions) Create(ctx context.Context, arangoMLExtension *v1beta1.ArangoMLExtension, opts v1.CreateOptions) (result *v1beta1.ArangoMLExtension, err error) { - result = &v1beta1.ArangoMLExtension{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangomlextensions"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLExtension). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoMLExtension and updates it. Returns the server's representation of the arangoMLExtension, and an error, if there is any. -func (c *arangoMLExtensions) Update(ctx context.Context, arangoMLExtension *v1beta1.ArangoMLExtension, opts v1.UpdateOptions) (result *v1beta1.ArangoMLExtension, err error) { - result = &v1beta1.ArangoMLExtension{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomlextensions"). - Name(arangoMLExtension.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLExtension). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoMLExtensions) UpdateStatus(ctx context.Context, arangoMLExtension *v1beta1.ArangoMLExtension, opts v1.UpdateOptions) (result *v1beta1.ArangoMLExtension, err error) { - result = &v1beta1.ArangoMLExtension{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomlextensions"). - Name(arangoMLExtension.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLExtension). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoMLExtension and deletes it. Returns an error if one occurs. -func (c *arangoMLExtensions) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomlextensions"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoMLExtensions) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomlextensions"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoMLExtension. -func (c *arangoMLExtensions) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoMLExtension, err error) { - result = &v1beta1.ArangoMLExtension{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangomlextensions"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlstorage.go b/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlstorage.go index f8c4f4d86..0300b7526 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlstorage.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlstorage.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1beta1 import ( "context" - "time" v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoMLStoragesGetter has a method to return a ArangoMLStorageInterface. @@ -44,6 +43,7 @@ type ArangoMLStoragesGetter interface { type ArangoMLStorageInterface interface { Create(ctx context.Context, arangoMLStorage *v1beta1.ArangoMLStorage, opts v1.CreateOptions) (*v1beta1.ArangoMLStorage, error) Update(ctx context.Context, arangoMLStorage *v1beta1.ArangoMLStorage, opts v1.UpdateOptions) (*v1beta1.ArangoMLStorage, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoMLStorage *v1beta1.ArangoMLStorage, opts v1.UpdateOptions) (*v1beta1.ArangoMLStorage, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoMLStorageInterface interface { // arangoMLStorages implements ArangoMLStorageInterface type arangoMLStorages struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1beta1.ArangoMLStorage, *v1beta1.ArangoMLStorageList] } // newArangoMLStorages returns a ArangoMLStorages func newArangoMLStorages(c *MlV1beta1Client, namespace string) *arangoMLStorages { return &arangoMLStorages{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1beta1.ArangoMLStorage, *v1beta1.ArangoMLStorageList]( + "arangomlstorages", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1beta1.ArangoMLStorage { return &v1beta1.ArangoMLStorage{} }, + func() *v1beta1.ArangoMLStorageList { return &v1beta1.ArangoMLStorageList{} }), } } - -// Get takes name of the arangoMLStorage, and returns the corresponding arangoMLStorage object, and an error if there is any. -func (c *arangoMLStorages) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ArangoMLStorage, err error) { - result = &v1beta1.ArangoMLStorage{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomlstorages"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoMLStorages that match those selectors. -func (c *arangoMLStorages) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ArangoMLStorageList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1beta1.ArangoMLStorageList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangomlstorages"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoMLStorages. -func (c *arangoMLStorages) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangomlstorages"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoMLStorage and creates it. Returns the server's representation of the arangoMLStorage, and an error, if there is any. -func (c *arangoMLStorages) Create(ctx context.Context, arangoMLStorage *v1beta1.ArangoMLStorage, opts v1.CreateOptions) (result *v1beta1.ArangoMLStorage, err error) { - result = &v1beta1.ArangoMLStorage{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangomlstorages"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLStorage). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoMLStorage and updates it. Returns the server's representation of the arangoMLStorage, and an error, if there is any. -func (c *arangoMLStorages) Update(ctx context.Context, arangoMLStorage *v1beta1.ArangoMLStorage, opts v1.UpdateOptions) (result *v1beta1.ArangoMLStorage, err error) { - result = &v1beta1.ArangoMLStorage{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomlstorages"). - Name(arangoMLStorage.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLStorage). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoMLStorages) UpdateStatus(ctx context.Context, arangoMLStorage *v1beta1.ArangoMLStorage, opts v1.UpdateOptions) (result *v1beta1.ArangoMLStorage, err error) { - result = &v1beta1.ArangoMLStorage{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangomlstorages"). - Name(arangoMLStorage.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoMLStorage). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoMLStorage and deletes it. Returns an error if one occurs. -func (c *arangoMLStorages) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomlstorages"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoMLStorages) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangomlstorages"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoMLStorage. -func (c *arangoMLStorages) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoMLStorage, err error) { - result = &v1beta1.ArangoMLStorage{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangomlstorages"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/ml/v1beta1/doc.go b/pkg/generated/clientset/versioned/typed/ml/v1beta1/doc.go index f22204098..f19db7d65 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1beta1/doc.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1beta1/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/doc.go b/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/doc.go index cc487d814..cb60dd032 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/doc.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/fake_arangomlextension.go b/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/fake_arangomlextension.go index 1282d7b8d..fb1c98b35 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/fake_arangomlextension.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/fake_arangomlextension.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangomlextensionsKind = v1beta1.SchemeGroupVersion.WithKind("ArangoMLExtens // Get takes name of the arangoMLExtension, and returns the corresponding arangoMLExtension object, and an error if there is any. func (c *FakeArangoMLExtensions) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ArangoMLExtension, err error) { + emptyResult := &v1beta1.ArangoMLExtension{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangomlextensionsResource, c.ns, name), &v1beta1.ArangoMLExtension{}) + Invokes(testing.NewGetActionWithOptions(arangomlextensionsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoMLExtension), err } // List takes label and field selectors, and returns the list of ArangoMLExtensions that match those selectors. func (c *FakeArangoMLExtensions) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ArangoMLExtensionList, err error) { + emptyResult := &v1beta1.ArangoMLExtensionList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangomlextensionsResource, arangomlextensionsKind, c.ns, opts), &v1beta1.ArangoMLExtensionList{}) + Invokes(testing.NewListActionWithOptions(arangomlextensionsResource, arangomlextensionsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoMLExtensions) List(ctx context.Context, opts v1.ListOptions) // Watch returns a watch.Interface that watches the requested arangoMLExtensions. func (c *FakeArangoMLExtensions) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangomlextensionsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangomlextensionsResource, c.ns, opts)) } // Create takes the representation of a arangoMLExtension and creates it. Returns the server's representation of the arangoMLExtension, and an error, if there is any. func (c *FakeArangoMLExtensions) Create(ctx context.Context, arangoMLExtension *v1beta1.ArangoMLExtension, opts v1.CreateOptions) (result *v1beta1.ArangoMLExtension, err error) { + emptyResult := &v1beta1.ArangoMLExtension{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangomlextensionsResource, c.ns, arangoMLExtension), &v1beta1.ArangoMLExtension{}) + Invokes(testing.NewCreateActionWithOptions(arangomlextensionsResource, c.ns, arangoMLExtension, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoMLExtension), err } // Update takes the representation of a arangoMLExtension and updates it. Returns the server's representation of the arangoMLExtension, and an error, if there is any. func (c *FakeArangoMLExtensions) Update(ctx context.Context, arangoMLExtension *v1beta1.ArangoMLExtension, opts v1.UpdateOptions) (result *v1beta1.ArangoMLExtension, err error) { + emptyResult := &v1beta1.ArangoMLExtension{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangomlextensionsResource, c.ns, arangoMLExtension), &v1beta1.ArangoMLExtension{}) + Invokes(testing.NewUpdateActionWithOptions(arangomlextensionsResource, c.ns, arangoMLExtension, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoMLExtension), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoMLExtensions) UpdateStatus(ctx context.Context, arangoMLExtension *v1beta1.ArangoMLExtension, opts v1.UpdateOptions) (*v1beta1.ArangoMLExtension, error) { +func (c *FakeArangoMLExtensions) UpdateStatus(ctx context.Context, arangoMLExtension *v1beta1.ArangoMLExtension, opts v1.UpdateOptions) (result *v1beta1.ArangoMLExtension, err error) { + emptyResult := &v1beta1.ArangoMLExtension{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangomlextensionsResource, "status", c.ns, arangoMLExtension), &v1beta1.ArangoMLExtension{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangomlextensionsResource, "status", c.ns, arangoMLExtension, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoMLExtension), err } @@ -127,7 +132,7 @@ func (c *FakeArangoMLExtensions) Delete(ctx context.Context, name string, opts v // DeleteCollection deletes a collection of objects. func (c *FakeArangoMLExtensions) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangomlextensionsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangomlextensionsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1beta1.ArangoMLExtensionList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoMLExtensions) DeleteCollection(ctx context.Context, opts v1.D // Patch applies the patch and returns the patched arangoMLExtension. func (c *FakeArangoMLExtensions) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoMLExtension, err error) { + emptyResult := &v1beta1.ArangoMLExtension{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangomlextensionsResource, c.ns, name, pt, data, subresources...), &v1beta1.ArangoMLExtension{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangomlextensionsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoMLExtension), err } diff --git a/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/fake_arangomlstorage.go b/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/fake_arangomlstorage.go index d824684f0..94f0772d9 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/fake_arangomlstorage.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/fake_arangomlstorage.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangomlstoragesKind = v1beta1.SchemeGroupVersion.WithKind("ArangoMLStorage" // Get takes name of the arangoMLStorage, and returns the corresponding arangoMLStorage object, and an error if there is any. func (c *FakeArangoMLStorages) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ArangoMLStorage, err error) { + emptyResult := &v1beta1.ArangoMLStorage{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangomlstoragesResource, c.ns, name), &v1beta1.ArangoMLStorage{}) + Invokes(testing.NewGetActionWithOptions(arangomlstoragesResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoMLStorage), err } // List takes label and field selectors, and returns the list of ArangoMLStorages that match those selectors. func (c *FakeArangoMLStorages) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ArangoMLStorageList, err error) { + emptyResult := &v1beta1.ArangoMLStorageList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangomlstoragesResource, arangomlstoragesKind, c.ns, opts), &v1beta1.ArangoMLStorageList{}) + Invokes(testing.NewListActionWithOptions(arangomlstoragesResource, arangomlstoragesKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoMLStorages) List(ctx context.Context, opts v1.ListOptions) (r // Watch returns a watch.Interface that watches the requested arangoMLStorages. func (c *FakeArangoMLStorages) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangomlstoragesResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangomlstoragesResource, c.ns, opts)) } // Create takes the representation of a arangoMLStorage and creates it. Returns the server's representation of the arangoMLStorage, and an error, if there is any. func (c *FakeArangoMLStorages) Create(ctx context.Context, arangoMLStorage *v1beta1.ArangoMLStorage, opts v1.CreateOptions) (result *v1beta1.ArangoMLStorage, err error) { + emptyResult := &v1beta1.ArangoMLStorage{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangomlstoragesResource, c.ns, arangoMLStorage), &v1beta1.ArangoMLStorage{}) + Invokes(testing.NewCreateActionWithOptions(arangomlstoragesResource, c.ns, arangoMLStorage, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoMLStorage), err } // Update takes the representation of a arangoMLStorage and updates it. Returns the server's representation of the arangoMLStorage, and an error, if there is any. func (c *FakeArangoMLStorages) Update(ctx context.Context, arangoMLStorage *v1beta1.ArangoMLStorage, opts v1.UpdateOptions) (result *v1beta1.ArangoMLStorage, err error) { + emptyResult := &v1beta1.ArangoMLStorage{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangomlstoragesResource, c.ns, arangoMLStorage), &v1beta1.ArangoMLStorage{}) + Invokes(testing.NewUpdateActionWithOptions(arangomlstoragesResource, c.ns, arangoMLStorage, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoMLStorage), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoMLStorages) UpdateStatus(ctx context.Context, arangoMLStorage *v1beta1.ArangoMLStorage, opts v1.UpdateOptions) (*v1beta1.ArangoMLStorage, error) { +func (c *FakeArangoMLStorages) UpdateStatus(ctx context.Context, arangoMLStorage *v1beta1.ArangoMLStorage, opts v1.UpdateOptions) (result *v1beta1.ArangoMLStorage, err error) { + emptyResult := &v1beta1.ArangoMLStorage{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangomlstoragesResource, "status", c.ns, arangoMLStorage), &v1beta1.ArangoMLStorage{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangomlstoragesResource, "status", c.ns, arangoMLStorage, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoMLStorage), err } @@ -127,7 +132,7 @@ func (c *FakeArangoMLStorages) Delete(ctx context.Context, name string, opts v1. // DeleteCollection deletes a collection of objects. func (c *FakeArangoMLStorages) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangomlstoragesResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangomlstoragesResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1beta1.ArangoMLStorageList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoMLStorages) DeleteCollection(ctx context.Context, opts v1.Del // Patch applies the patch and returns the patched arangoMLStorage. func (c *FakeArangoMLStorages) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoMLStorage, err error) { + emptyResult := &v1beta1.ArangoMLStorage{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangomlstoragesResource, c.ns, name, pt, data, subresources...), &v1beta1.ArangoMLStorage{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangomlstoragesResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoMLStorage), err } diff --git a/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/fake_ml_client.go b/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/fake_ml_client.go index 52542249f..15ee07d8e 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/fake_ml_client.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/fake_ml_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/ml/v1beta1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/ml/v1beta1/generated_expansion.go index 0d2d90361..9da27a5f6 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1beta1/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1beta1/generated_expansion.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/ml/v1beta1/ml_client.go b/pkg/generated/clientset/versioned/typed/ml/v1beta1/ml_client.go index 3d16cf2cd..c20dff40c 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1beta1/ml_client.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1beta1/ml_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/arangoroute.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/arangoroute.go index 7713adf9a..a95f0b14e 100644 --- a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/arangoroute.go +++ b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/arangoroute.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1alpha1 import ( "context" - "time" v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoRoutesGetter has a method to return a ArangoRouteInterface. @@ -44,6 +43,7 @@ type ArangoRoutesGetter interface { type ArangoRouteInterface interface { Create(ctx context.Context, arangoRoute *v1alpha1.ArangoRoute, opts v1.CreateOptions) (*v1alpha1.ArangoRoute, error) Update(ctx context.Context, arangoRoute *v1alpha1.ArangoRoute, opts v1.UpdateOptions) (*v1alpha1.ArangoRoute, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoRoute *v1alpha1.ArangoRoute, opts v1.UpdateOptions) (*v1alpha1.ArangoRoute, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoRouteInterface interface { // arangoRoutes implements ArangoRouteInterface type arangoRoutes struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1alpha1.ArangoRoute, *v1alpha1.ArangoRouteList] } // newArangoRoutes returns a ArangoRoutes func newArangoRoutes(c *NetworkingV1alpha1Client, namespace string) *arangoRoutes { return &arangoRoutes{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1alpha1.ArangoRoute, *v1alpha1.ArangoRouteList]( + "arangoroutes", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1alpha1.ArangoRoute { return &v1alpha1.ArangoRoute{} }, + func() *v1alpha1.ArangoRouteList { return &v1alpha1.ArangoRouteList{} }), } } - -// Get takes name of the arangoRoute, and returns the corresponding arangoRoute object, and an error if there is any. -func (c *arangoRoutes) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoRoute, err error) { - result = &v1alpha1.ArangoRoute{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoroutes"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoRoutes that match those selectors. -func (c *arangoRoutes) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoRouteList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1alpha1.ArangoRouteList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoroutes"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoRoutes. -func (c *arangoRoutes) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangoroutes"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoRoute and creates it. Returns the server's representation of the arangoRoute, and an error, if there is any. -func (c *arangoRoutes) Create(ctx context.Context, arangoRoute *v1alpha1.ArangoRoute, opts v1.CreateOptions) (result *v1alpha1.ArangoRoute, err error) { - result = &v1alpha1.ArangoRoute{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangoroutes"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoRoute). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoRoute and updates it. Returns the server's representation of the arangoRoute, and an error, if there is any. -func (c *arangoRoutes) Update(ctx context.Context, arangoRoute *v1alpha1.ArangoRoute, opts v1.UpdateOptions) (result *v1alpha1.ArangoRoute, err error) { - result = &v1alpha1.ArangoRoute{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoroutes"). - Name(arangoRoute.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoRoute). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoRoutes) UpdateStatus(ctx context.Context, arangoRoute *v1alpha1.ArangoRoute, opts v1.UpdateOptions) (result *v1alpha1.ArangoRoute, err error) { - result = &v1alpha1.ArangoRoute{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoroutes"). - Name(arangoRoute.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoRoute). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoRoute and deletes it. Returns an error if one occurs. -func (c *arangoRoutes) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoroutes"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoRoutes) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoroutes"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoRoute. -func (c *arangoRoutes) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoRoute, err error) { - result = &v1alpha1.ArangoRoute{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangoroutes"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/doc.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/doc.go index f45dab6c5..2ad43a88a 100644 --- a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/doc.go +++ b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/doc.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/doc.go index cc487d814..cb60dd032 100644 --- a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/doc.go +++ b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_arangoroute.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_arangoroute.go index 021a9d6f7..6c3f33f39 100644 --- a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_arangoroute.go +++ b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_arangoroute.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangoroutesKind = v1alpha1.SchemeGroupVersion.WithKind("ArangoRoute") // Get takes name of the arangoRoute, and returns the corresponding arangoRoute object, and an error if there is any. func (c *FakeArangoRoutes) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoRoute, err error) { + emptyResult := &v1alpha1.ArangoRoute{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangoroutesResource, c.ns, name), &v1alpha1.ArangoRoute{}) + Invokes(testing.NewGetActionWithOptions(arangoroutesResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoRoute), err } // List takes label and field selectors, and returns the list of ArangoRoutes that match those selectors. func (c *FakeArangoRoutes) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoRouteList, err error) { + emptyResult := &v1alpha1.ArangoRouteList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangoroutesResource, arangoroutesKind, c.ns, opts), &v1alpha1.ArangoRouteList{}) + Invokes(testing.NewListActionWithOptions(arangoroutesResource, arangoroutesKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoRoutes) List(ctx context.Context, opts v1.ListOptions) (resul // Watch returns a watch.Interface that watches the requested arangoRoutes. func (c *FakeArangoRoutes) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangoroutesResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangoroutesResource, c.ns, opts)) } // Create takes the representation of a arangoRoute and creates it. Returns the server's representation of the arangoRoute, and an error, if there is any. func (c *FakeArangoRoutes) Create(ctx context.Context, arangoRoute *v1alpha1.ArangoRoute, opts v1.CreateOptions) (result *v1alpha1.ArangoRoute, err error) { + emptyResult := &v1alpha1.ArangoRoute{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangoroutesResource, c.ns, arangoRoute), &v1alpha1.ArangoRoute{}) + Invokes(testing.NewCreateActionWithOptions(arangoroutesResource, c.ns, arangoRoute, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoRoute), err } // Update takes the representation of a arangoRoute and updates it. Returns the server's representation of the arangoRoute, and an error, if there is any. func (c *FakeArangoRoutes) Update(ctx context.Context, arangoRoute *v1alpha1.ArangoRoute, opts v1.UpdateOptions) (result *v1alpha1.ArangoRoute, err error) { + emptyResult := &v1alpha1.ArangoRoute{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangoroutesResource, c.ns, arangoRoute), &v1alpha1.ArangoRoute{}) + Invokes(testing.NewUpdateActionWithOptions(arangoroutesResource, c.ns, arangoRoute, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoRoute), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoRoutes) UpdateStatus(ctx context.Context, arangoRoute *v1alpha1.ArangoRoute, opts v1.UpdateOptions) (*v1alpha1.ArangoRoute, error) { +func (c *FakeArangoRoutes) UpdateStatus(ctx context.Context, arangoRoute *v1alpha1.ArangoRoute, opts v1.UpdateOptions) (result *v1alpha1.ArangoRoute, err error) { + emptyResult := &v1alpha1.ArangoRoute{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangoroutesResource, "status", c.ns, arangoRoute), &v1alpha1.ArangoRoute{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangoroutesResource, "status", c.ns, arangoRoute, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoRoute), err } @@ -127,7 +132,7 @@ func (c *FakeArangoRoutes) Delete(ctx context.Context, name string, opts v1.Dele // DeleteCollection deletes a collection of objects. func (c *FakeArangoRoutes) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangoroutesResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangoroutesResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1alpha1.ArangoRouteList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoRoutes) DeleteCollection(ctx context.Context, opts v1.DeleteO // Patch applies the patch and returns the patched arangoRoute. func (c *FakeArangoRoutes) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoRoute, err error) { + emptyResult := &v1alpha1.ArangoRoute{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangoroutesResource, c.ns, name, pt, data, subresources...), &v1alpha1.ArangoRoute{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangoroutesResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoRoute), err } diff --git a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_networking_client.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_networking_client.go index 1e1794418..52ad3e32c 100644 --- a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_networking_client.go +++ b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_networking_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/generated_expansion.go index 52d86c425..21fd51735 100644 --- a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/generated_expansion.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/networking_client.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/networking_client.go index b8a690bff..99db6b810 100644 --- a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/networking_client.go +++ b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/networking_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformchart.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformchart.go new file mode 100644 index 000000000..48fa466da --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformchart.go @@ -0,0 +1,73 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "context" + + v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + gentype "k8s.io/client-go/gentype" +) + +// ArangoPlatformChartsGetter has a method to return a ArangoPlatformChartInterface. +// A group's client should implement this interface. +type ArangoPlatformChartsGetter interface { + ArangoPlatformCharts(namespace string) ArangoPlatformChartInterface +} + +// ArangoPlatformChartInterface has methods to work with ArangoPlatformChart resources. +type ArangoPlatformChartInterface interface { + Create(ctx context.Context, arangoPlatformChart *v1alpha1.ArangoPlatformChart, opts v1.CreateOptions) (*v1alpha1.ArangoPlatformChart, error) + Update(ctx context.Context, arangoPlatformChart *v1alpha1.ArangoPlatformChart, opts v1.UpdateOptions) (*v1alpha1.ArangoPlatformChart, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). + UpdateStatus(ctx context.Context, arangoPlatformChart *v1alpha1.ArangoPlatformChart, opts v1.UpdateOptions) (*v1alpha1.ArangoPlatformChart, error) + Delete(ctx context.Context, name string, opts v1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error + Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.ArangoPlatformChart, error) + List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.ArangoPlatformChartList, error) + Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoPlatformChart, err error) + ArangoPlatformChartExpansion +} + +// arangoPlatformCharts implements ArangoPlatformChartInterface +type arangoPlatformCharts struct { + *gentype.ClientWithList[*v1alpha1.ArangoPlatformChart, *v1alpha1.ArangoPlatformChartList] +} + +// newArangoPlatformCharts returns a ArangoPlatformCharts +func newArangoPlatformCharts(c *PlatformV1alpha1Client, namespace string) *arangoPlatformCharts { + return &arangoPlatformCharts{ + gentype.NewClientWithList[*v1alpha1.ArangoPlatformChart, *v1alpha1.ArangoPlatformChartList]( + "arangoplatformcharts", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1alpha1.ArangoPlatformChart { return &v1alpha1.ArangoPlatformChart{} }, + func() *v1alpha1.ArangoPlatformChartList { return &v1alpha1.ArangoPlatformChartList{} }), + } +} diff --git a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformstorage.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformstorage.go new file mode 100644 index 000000000..9e496bbb6 --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformstorage.go @@ -0,0 +1,73 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "context" + + v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + gentype "k8s.io/client-go/gentype" +) + +// ArangoPlatformStoragesGetter has a method to return a ArangoPlatformStorageInterface. +// A group's client should implement this interface. +type ArangoPlatformStoragesGetter interface { + ArangoPlatformStorages(namespace string) ArangoPlatformStorageInterface +} + +// ArangoPlatformStorageInterface has methods to work with ArangoPlatformStorage resources. +type ArangoPlatformStorageInterface interface { + Create(ctx context.Context, arangoPlatformStorage *v1alpha1.ArangoPlatformStorage, opts v1.CreateOptions) (*v1alpha1.ArangoPlatformStorage, error) + Update(ctx context.Context, arangoPlatformStorage *v1alpha1.ArangoPlatformStorage, opts v1.UpdateOptions) (*v1alpha1.ArangoPlatformStorage, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). + UpdateStatus(ctx context.Context, arangoPlatformStorage *v1alpha1.ArangoPlatformStorage, opts v1.UpdateOptions) (*v1alpha1.ArangoPlatformStorage, error) + Delete(ctx context.Context, name string, opts v1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error + Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.ArangoPlatformStorage, error) + List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.ArangoPlatformStorageList, error) + Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoPlatformStorage, err error) + ArangoPlatformStorageExpansion +} + +// arangoPlatformStorages implements ArangoPlatformStorageInterface +type arangoPlatformStorages struct { + *gentype.ClientWithList[*v1alpha1.ArangoPlatformStorage, *v1alpha1.ArangoPlatformStorageList] +} + +// newArangoPlatformStorages returns a ArangoPlatformStorages +func newArangoPlatformStorages(c *PlatformV1alpha1Client, namespace string) *arangoPlatformStorages { + return &arangoPlatformStorages{ + gentype.NewClientWithList[*v1alpha1.ArangoPlatformStorage, *v1alpha1.ArangoPlatformStorageList]( + "arangoplatformstorages", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1alpha1.ArangoPlatformStorage { return &v1alpha1.ArangoPlatformStorage{} }, + func() *v1alpha1.ArangoPlatformStorageList { return &v1alpha1.ArangoPlatformStorageList{} }), + } +} diff --git a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/doc.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/doc.go new file mode 100644 index 000000000..2ad43a88a --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/doc.go @@ -0,0 +1,24 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1alpha1 diff --git a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/doc.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/doc.go new file mode 100644 index 000000000..cb60dd032 --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/doc.go @@ -0,0 +1,24 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by client-gen. DO NOT EDIT. + +// Package fake has the automatically generated clients. +package fake diff --git a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformchart.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformchart.go new file mode 100644 index 000000000..c9ce234b1 --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformchart.go @@ -0,0 +1,151 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeArangoPlatformCharts implements ArangoPlatformChartInterface +type FakeArangoPlatformCharts struct { + Fake *FakePlatformV1alpha1 + ns string +} + +var arangoplatformchartsResource = v1alpha1.SchemeGroupVersion.WithResource("arangoplatformcharts") + +var arangoplatformchartsKind = v1alpha1.SchemeGroupVersion.WithKind("ArangoPlatformChart") + +// Get takes name of the arangoPlatformChart, and returns the corresponding arangoPlatformChart object, and an error if there is any. +func (c *FakeArangoPlatformCharts) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoPlatformChart, err error) { + emptyResult := &v1alpha1.ArangoPlatformChart{} + obj, err := c.Fake. + Invokes(testing.NewGetActionWithOptions(arangoplatformchartsResource, c.ns, name, options), emptyResult) + + if obj == nil { + return emptyResult, err + } + return obj.(*v1alpha1.ArangoPlatformChart), err +} + +// List takes label and field selectors, and returns the list of ArangoPlatformCharts that match those selectors. +func (c *FakeArangoPlatformCharts) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoPlatformChartList, err error) { + emptyResult := &v1alpha1.ArangoPlatformChartList{} + obj, err := c.Fake. + Invokes(testing.NewListActionWithOptions(arangoplatformchartsResource, arangoplatformchartsKind, c.ns, opts), emptyResult) + + if obj == nil { + return emptyResult, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &v1alpha1.ArangoPlatformChartList{ListMeta: obj.(*v1alpha1.ArangoPlatformChartList).ListMeta} + for _, item := range obj.(*v1alpha1.ArangoPlatformChartList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested arangoPlatformCharts. +func (c *FakeArangoPlatformCharts) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewWatchActionWithOptions(arangoplatformchartsResource, c.ns, opts)) + +} + +// Create takes the representation of a arangoPlatformChart and creates it. Returns the server's representation of the arangoPlatformChart, and an error, if there is any. +func (c *FakeArangoPlatformCharts) Create(ctx context.Context, arangoPlatformChart *v1alpha1.ArangoPlatformChart, opts v1.CreateOptions) (result *v1alpha1.ArangoPlatformChart, err error) { + emptyResult := &v1alpha1.ArangoPlatformChart{} + obj, err := c.Fake. + Invokes(testing.NewCreateActionWithOptions(arangoplatformchartsResource, c.ns, arangoPlatformChart, opts), emptyResult) + + if obj == nil { + return emptyResult, err + } + return obj.(*v1alpha1.ArangoPlatformChart), err +} + +// Update takes the representation of a arangoPlatformChart and updates it. Returns the server's representation of the arangoPlatformChart, and an error, if there is any. +func (c *FakeArangoPlatformCharts) Update(ctx context.Context, arangoPlatformChart *v1alpha1.ArangoPlatformChart, opts v1.UpdateOptions) (result *v1alpha1.ArangoPlatformChart, err error) { + emptyResult := &v1alpha1.ArangoPlatformChart{} + obj, err := c.Fake. + Invokes(testing.NewUpdateActionWithOptions(arangoplatformchartsResource, c.ns, arangoPlatformChart, opts), emptyResult) + + if obj == nil { + return emptyResult, err + } + return obj.(*v1alpha1.ArangoPlatformChart), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeArangoPlatformCharts) UpdateStatus(ctx context.Context, arangoPlatformChart *v1alpha1.ArangoPlatformChart, opts v1.UpdateOptions) (result *v1alpha1.ArangoPlatformChart, err error) { + emptyResult := &v1alpha1.ArangoPlatformChart{} + obj, err := c.Fake. + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangoplatformchartsResource, "status", c.ns, arangoPlatformChart, opts), emptyResult) + + if obj == nil { + return emptyResult, err + } + return obj.(*v1alpha1.ArangoPlatformChart), err +} + +// Delete takes name of the arangoPlatformChart and deletes it. Returns an error if one occurs. +func (c *FakeArangoPlatformCharts) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewDeleteActionWithOptions(arangoplatformchartsResource, c.ns, name, opts), &v1alpha1.ArangoPlatformChart{}) + + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeArangoPlatformCharts) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionActionWithOptions(arangoplatformchartsResource, c.ns, opts, listOpts) + + _, err := c.Fake.Invokes(action, &v1alpha1.ArangoPlatformChartList{}) + return err +} + +// Patch applies the patch and returns the patched arangoPlatformChart. +func (c *FakeArangoPlatformCharts) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoPlatformChart, err error) { + emptyResult := &v1alpha1.ArangoPlatformChart{} + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceActionWithOptions(arangoplatformchartsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) + + if obj == nil { + return emptyResult, err + } + return obj.(*v1alpha1.ArangoPlatformChart), err +} diff --git a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformstorage.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformstorage.go new file mode 100644 index 000000000..a01131f94 --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformstorage.go @@ -0,0 +1,151 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + "context" + + v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeArangoPlatformStorages implements ArangoPlatformStorageInterface +type FakeArangoPlatformStorages struct { + Fake *FakePlatformV1alpha1 + ns string +} + +var arangoplatformstoragesResource = v1alpha1.SchemeGroupVersion.WithResource("arangoplatformstorages") + +var arangoplatformstoragesKind = v1alpha1.SchemeGroupVersion.WithKind("ArangoPlatformStorage") + +// Get takes name of the arangoPlatformStorage, and returns the corresponding arangoPlatformStorage object, and an error if there is any. +func (c *FakeArangoPlatformStorages) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoPlatformStorage, err error) { + emptyResult := &v1alpha1.ArangoPlatformStorage{} + obj, err := c.Fake. + Invokes(testing.NewGetActionWithOptions(arangoplatformstoragesResource, c.ns, name, options), emptyResult) + + if obj == nil { + return emptyResult, err + } + return obj.(*v1alpha1.ArangoPlatformStorage), err +} + +// List takes label and field selectors, and returns the list of ArangoPlatformStorages that match those selectors. +func (c *FakeArangoPlatformStorages) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoPlatformStorageList, err error) { + emptyResult := &v1alpha1.ArangoPlatformStorageList{} + obj, err := c.Fake. + Invokes(testing.NewListActionWithOptions(arangoplatformstoragesResource, arangoplatformstoragesKind, c.ns, opts), emptyResult) + + if obj == nil { + return emptyResult, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &v1alpha1.ArangoPlatformStorageList{ListMeta: obj.(*v1alpha1.ArangoPlatformStorageList).ListMeta} + for _, item := range obj.(*v1alpha1.ArangoPlatformStorageList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.Interface that watches the requested arangoPlatformStorages. +func (c *FakeArangoPlatformStorages) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + return c.Fake. + InvokesWatch(testing.NewWatchActionWithOptions(arangoplatformstoragesResource, c.ns, opts)) + +} + +// Create takes the representation of a arangoPlatformStorage and creates it. Returns the server's representation of the arangoPlatformStorage, and an error, if there is any. +func (c *FakeArangoPlatformStorages) Create(ctx context.Context, arangoPlatformStorage *v1alpha1.ArangoPlatformStorage, opts v1.CreateOptions) (result *v1alpha1.ArangoPlatformStorage, err error) { + emptyResult := &v1alpha1.ArangoPlatformStorage{} + obj, err := c.Fake. + Invokes(testing.NewCreateActionWithOptions(arangoplatformstoragesResource, c.ns, arangoPlatformStorage, opts), emptyResult) + + if obj == nil { + return emptyResult, err + } + return obj.(*v1alpha1.ArangoPlatformStorage), err +} + +// Update takes the representation of a arangoPlatformStorage and updates it. Returns the server's representation of the arangoPlatformStorage, and an error, if there is any. +func (c *FakeArangoPlatformStorages) Update(ctx context.Context, arangoPlatformStorage *v1alpha1.ArangoPlatformStorage, opts v1.UpdateOptions) (result *v1alpha1.ArangoPlatformStorage, err error) { + emptyResult := &v1alpha1.ArangoPlatformStorage{} + obj, err := c.Fake. + Invokes(testing.NewUpdateActionWithOptions(arangoplatformstoragesResource, c.ns, arangoPlatformStorage, opts), emptyResult) + + if obj == nil { + return emptyResult, err + } + return obj.(*v1alpha1.ArangoPlatformStorage), err +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *FakeArangoPlatformStorages) UpdateStatus(ctx context.Context, arangoPlatformStorage *v1alpha1.ArangoPlatformStorage, opts v1.UpdateOptions) (result *v1alpha1.ArangoPlatformStorage, err error) { + emptyResult := &v1alpha1.ArangoPlatformStorage{} + obj, err := c.Fake. + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangoplatformstoragesResource, "status", c.ns, arangoPlatformStorage, opts), emptyResult) + + if obj == nil { + return emptyResult, err + } + return obj.(*v1alpha1.ArangoPlatformStorage), err +} + +// Delete takes name of the arangoPlatformStorage and deletes it. Returns an error if one occurs. +func (c *FakeArangoPlatformStorages) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewDeleteActionWithOptions(arangoplatformstoragesResource, c.ns, name, opts), &v1alpha1.ArangoPlatformStorage{}) + + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeArangoPlatformStorages) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + action := testing.NewDeleteCollectionActionWithOptions(arangoplatformstoragesResource, c.ns, opts, listOpts) + + _, err := c.Fake.Invokes(action, &v1alpha1.ArangoPlatformStorageList{}) + return err +} + +// Patch applies the patch and returns the patched arangoPlatformStorage. +func (c *FakeArangoPlatformStorages) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoPlatformStorage, err error) { + emptyResult := &v1alpha1.ArangoPlatformStorage{} + obj, err := c.Fake. + Invokes(testing.NewPatchSubresourceActionWithOptions(arangoplatformstoragesResource, c.ns, name, pt, data, opts, subresources...), emptyResult) + + if obj == nil { + return emptyResult, err + } + return obj.(*v1alpha1.ArangoPlatformStorage), err +} diff --git a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_platform_client.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_platform_client.go new file mode 100644 index 000000000..6a3eb7f6a --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_platform_client.go @@ -0,0 +1,48 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + v1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/platform/v1alpha1" + rest "k8s.io/client-go/rest" + testing "k8s.io/client-go/testing" +) + +type FakePlatformV1alpha1 struct { + *testing.Fake +} + +func (c *FakePlatformV1alpha1) ArangoPlatformCharts(namespace string) v1alpha1.ArangoPlatformChartInterface { + return &FakeArangoPlatformCharts{c, namespace} +} + +func (c *FakePlatformV1alpha1) ArangoPlatformStorages(namespace string) v1alpha1.ArangoPlatformStorageInterface { + return &FakeArangoPlatformStorages{c, namespace} +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *FakePlatformV1alpha1) RESTClient() rest.Interface { + var ret *rest.RESTClient + return ret +} diff --git a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/generated_expansion.go new file mode 100644 index 000000000..03e6342de --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/generated_expansion.go @@ -0,0 +1,27 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +type ArangoPlatformChartExpansion interface{} + +type ArangoPlatformStorageExpansion interface{} diff --git a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/platform_client.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/platform_client.go new file mode 100644 index 000000000..b437c4137 --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/platform_client.go @@ -0,0 +1,116 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "net/http" + + v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type PlatformV1alpha1Interface interface { + RESTClient() rest.Interface + ArangoPlatformChartsGetter + ArangoPlatformStoragesGetter +} + +// PlatformV1alpha1Client is used to interact with features provided by the platform.arangodb.com group. +type PlatformV1alpha1Client struct { + restClient rest.Interface +} + +func (c *PlatformV1alpha1Client) ArangoPlatformCharts(namespace string) ArangoPlatformChartInterface { + return newArangoPlatformCharts(c, namespace) +} + +func (c *PlatformV1alpha1Client) ArangoPlatformStorages(namespace string) ArangoPlatformStorageInterface { + return newArangoPlatformStorages(c, namespace) +} + +// NewForConfig creates a new PlatformV1alpha1Client for the given config. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). +func NewForConfig(c *rest.Config) (*PlatformV1alpha1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + httpClient, err := rest.HTTPClientFor(&config) + if err != nil { + return nil, err + } + return NewForConfigAndClient(&config, httpClient) +} + +// NewForConfigAndClient creates a new PlatformV1alpha1Client for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +func NewForConfigAndClient(c *rest.Config, h *http.Client) (*PlatformV1alpha1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientForConfigAndClient(&config, h) + if err != nil { + return nil, err + } + return &PlatformV1alpha1Client{client}, nil +} + +// NewForConfigOrDie creates a new PlatformV1alpha1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *PlatformV1alpha1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new PlatformV1alpha1Client for the given RESTClient. +func New(c rest.Interface) *PlatformV1alpha1Client { + return &PlatformV1alpha1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1alpha1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *PlatformV1alpha1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/pkg/generated/clientset/versioned/typed/replication/v1/arangodeploymentreplication.go b/pkg/generated/clientset/versioned/typed/replication/v1/arangodeploymentreplication.go index 5f90d12c9..0527e562a 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v1/arangodeploymentreplication.go +++ b/pkg/generated/clientset/versioned/typed/replication/v1/arangodeploymentreplication.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1 import ( "context" - "time" v1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoDeploymentReplicationsGetter has a method to return a ArangoDeploymentReplicationInterface. @@ -44,6 +43,7 @@ type ArangoDeploymentReplicationsGetter interface { type ArangoDeploymentReplicationInterface interface { Create(ctx context.Context, arangoDeploymentReplication *v1.ArangoDeploymentReplication, opts metav1.CreateOptions) (*v1.ArangoDeploymentReplication, error) Update(ctx context.Context, arangoDeploymentReplication *v1.ArangoDeploymentReplication, opts metav1.UpdateOptions) (*v1.ArangoDeploymentReplication, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoDeploymentReplication *v1.ArangoDeploymentReplication, opts metav1.UpdateOptions) (*v1.ArangoDeploymentReplication, error) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoDeploymentReplicationInterface interface { // arangoDeploymentReplications implements ArangoDeploymentReplicationInterface type arangoDeploymentReplications struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1.ArangoDeploymentReplication, *v1.ArangoDeploymentReplicationList] } // newArangoDeploymentReplications returns a ArangoDeploymentReplications func newArangoDeploymentReplications(c *ReplicationV1Client, namespace string) *arangoDeploymentReplications { return &arangoDeploymentReplications{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1.ArangoDeploymentReplication, *v1.ArangoDeploymentReplicationList]( + "arangodeploymentreplications", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1.ArangoDeploymentReplication { return &v1.ArangoDeploymentReplication{} }, + func() *v1.ArangoDeploymentReplicationList { return &v1.ArangoDeploymentReplicationList{} }), } } - -// Get takes name of the arangoDeploymentReplication, and returns the corresponding arangoDeploymentReplication object, and an error if there is any. -func (c *arangoDeploymentReplications) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoDeploymentReplication, err error) { - result = &v1.ArangoDeploymentReplication{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoDeploymentReplications that match those selectors. -func (c *arangoDeploymentReplications) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoDeploymentReplicationList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1.ArangoDeploymentReplicationList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoDeploymentReplications. -func (c *arangoDeploymentReplications) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoDeploymentReplication and creates it. Returns the server's representation of the arangoDeploymentReplication, and an error, if there is any. -func (c *arangoDeploymentReplications) Create(ctx context.Context, arangoDeploymentReplication *v1.ArangoDeploymentReplication, opts metav1.CreateOptions) (result *v1.ArangoDeploymentReplication, err error) { - result = &v1.ArangoDeploymentReplication{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoDeploymentReplication). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoDeploymentReplication and updates it. Returns the server's representation of the arangoDeploymentReplication, and an error, if there is any. -func (c *arangoDeploymentReplications) Update(ctx context.Context, arangoDeploymentReplication *v1.ArangoDeploymentReplication, opts metav1.UpdateOptions) (result *v1.ArangoDeploymentReplication, err error) { - result = &v1.ArangoDeploymentReplication{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - Name(arangoDeploymentReplication.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoDeploymentReplication). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoDeploymentReplications) UpdateStatus(ctx context.Context, arangoDeploymentReplication *v1.ArangoDeploymentReplication, opts metav1.UpdateOptions) (result *v1.ArangoDeploymentReplication, err error) { - result = &v1.ArangoDeploymentReplication{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - Name(arangoDeploymentReplication.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoDeploymentReplication). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoDeploymentReplication and deletes it. Returns an error if one occurs. -func (c *arangoDeploymentReplications) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoDeploymentReplications) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoDeploymentReplication. -func (c *arangoDeploymentReplications) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoDeploymentReplication, err error) { - result = &v1.ArangoDeploymentReplication{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/replication/v1/doc.go b/pkg/generated/clientset/versioned/typed/replication/v1/doc.go index ad6cab742..825ae42b5 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v1/doc.go +++ b/pkg/generated/clientset/versioned/typed/replication/v1/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/replication/v1/fake/doc.go b/pkg/generated/clientset/versioned/typed/replication/v1/fake/doc.go index cc487d814..cb60dd032 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v1/fake/doc.go +++ b/pkg/generated/clientset/versioned/typed/replication/v1/fake/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/replication/v1/fake/fake_arangodeploymentreplication.go b/pkg/generated/clientset/versioned/typed/replication/v1/fake/fake_arangodeploymentreplication.go index 8ed7c04f4..c51e672b7 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v1/fake/fake_arangodeploymentreplication.go +++ b/pkg/generated/clientset/versioned/typed/replication/v1/fake/fake_arangodeploymentreplication.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangodeploymentreplicationsKind = v1.SchemeGroupVersion.WithKind("ArangoDep // Get takes name of the arangoDeploymentReplication, and returns the corresponding arangoDeploymentReplication object, and an error if there is any. func (c *FakeArangoDeploymentReplications) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ArangoDeploymentReplication, err error) { + emptyResult := &v1.ArangoDeploymentReplication{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangodeploymentreplicationsResource, c.ns, name), &v1.ArangoDeploymentReplication{}) + Invokes(testing.NewGetActionWithOptions(arangodeploymentreplicationsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoDeploymentReplication), err } // List takes label and field selectors, and returns the list of ArangoDeploymentReplications that match those selectors. func (c *FakeArangoDeploymentReplications) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ArangoDeploymentReplicationList, err error) { + emptyResult := &v1.ArangoDeploymentReplicationList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangodeploymentreplicationsResource, arangodeploymentreplicationsKind, c.ns, opts), &v1.ArangoDeploymentReplicationList{}) + Invokes(testing.NewListActionWithOptions(arangodeploymentreplicationsResource, arangodeploymentreplicationsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoDeploymentReplications) List(ctx context.Context, opts metav1 // Watch returns a watch.Interface that watches the requested arangoDeploymentReplications. func (c *FakeArangoDeploymentReplications) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangodeploymentreplicationsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangodeploymentreplicationsResource, c.ns, opts)) } // Create takes the representation of a arangoDeploymentReplication and creates it. Returns the server's representation of the arangoDeploymentReplication, and an error, if there is any. func (c *FakeArangoDeploymentReplications) Create(ctx context.Context, arangoDeploymentReplication *v1.ArangoDeploymentReplication, opts metav1.CreateOptions) (result *v1.ArangoDeploymentReplication, err error) { + emptyResult := &v1.ArangoDeploymentReplication{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangodeploymentreplicationsResource, c.ns, arangoDeploymentReplication), &v1.ArangoDeploymentReplication{}) + Invokes(testing.NewCreateActionWithOptions(arangodeploymentreplicationsResource, c.ns, arangoDeploymentReplication, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoDeploymentReplication), err } // Update takes the representation of a arangoDeploymentReplication and updates it. Returns the server's representation of the arangoDeploymentReplication, and an error, if there is any. func (c *FakeArangoDeploymentReplications) Update(ctx context.Context, arangoDeploymentReplication *v1.ArangoDeploymentReplication, opts metav1.UpdateOptions) (result *v1.ArangoDeploymentReplication, err error) { + emptyResult := &v1.ArangoDeploymentReplication{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangodeploymentreplicationsResource, c.ns, arangoDeploymentReplication), &v1.ArangoDeploymentReplication{}) + Invokes(testing.NewUpdateActionWithOptions(arangodeploymentreplicationsResource, c.ns, arangoDeploymentReplication, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoDeploymentReplication), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoDeploymentReplications) UpdateStatus(ctx context.Context, arangoDeploymentReplication *v1.ArangoDeploymentReplication, opts metav1.UpdateOptions) (*v1.ArangoDeploymentReplication, error) { +func (c *FakeArangoDeploymentReplications) UpdateStatus(ctx context.Context, arangoDeploymentReplication *v1.ArangoDeploymentReplication, opts metav1.UpdateOptions) (result *v1.ArangoDeploymentReplication, err error) { + emptyResult := &v1.ArangoDeploymentReplication{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangodeploymentreplicationsResource, "status", c.ns, arangoDeploymentReplication), &v1.ArangoDeploymentReplication{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangodeploymentreplicationsResource, "status", c.ns, arangoDeploymentReplication, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoDeploymentReplication), err } @@ -127,7 +132,7 @@ func (c *FakeArangoDeploymentReplications) Delete(ctx context.Context, name stri // DeleteCollection deletes a collection of objects. func (c *FakeArangoDeploymentReplications) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangodeploymentreplicationsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangodeploymentreplicationsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1.ArangoDeploymentReplicationList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoDeploymentReplications) DeleteCollection(ctx context.Context, // Patch applies the patch and returns the patched arangoDeploymentReplication. func (c *FakeArangoDeploymentReplications) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ArangoDeploymentReplication, err error) { + emptyResult := &v1.ArangoDeploymentReplication{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangodeploymentreplicationsResource, c.ns, name, pt, data, subresources...), &v1.ArangoDeploymentReplication{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangodeploymentreplicationsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1.ArangoDeploymentReplication), err } diff --git a/pkg/generated/clientset/versioned/typed/replication/v1/fake/fake_replication_client.go b/pkg/generated/clientset/versioned/typed/replication/v1/fake/fake_replication_client.go index c8fe2b1ae..9b8de3001 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v1/fake/fake_replication_client.go +++ b/pkg/generated/clientset/versioned/typed/replication/v1/fake/fake_replication_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/replication/v1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/replication/v1/generated_expansion.go index 34cec8cb7..5e664d00a 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v1/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/replication/v1/generated_expansion.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/replication/v1/replication_client.go b/pkg/generated/clientset/versioned/typed/replication/v1/replication_client.go index 714dea379..4e7af6a94 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v1/replication_client.go +++ b/pkg/generated/clientset/versioned/typed/replication/v1/replication_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/arangodeploymentreplication.go b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/arangodeploymentreplication.go index a42dff0a3..fe86626b0 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/arangodeploymentreplication.go +++ b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/arangodeploymentreplication.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v2alpha1 import ( "context" - "time" v2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoDeploymentReplicationsGetter has a method to return a ArangoDeploymentReplicationInterface. @@ -44,6 +43,7 @@ type ArangoDeploymentReplicationsGetter interface { type ArangoDeploymentReplicationInterface interface { Create(ctx context.Context, arangoDeploymentReplication *v2alpha1.ArangoDeploymentReplication, opts v1.CreateOptions) (*v2alpha1.ArangoDeploymentReplication, error) Update(ctx context.Context, arangoDeploymentReplication *v2alpha1.ArangoDeploymentReplication, opts v1.UpdateOptions) (*v2alpha1.ArangoDeploymentReplication, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoDeploymentReplication *v2alpha1.ArangoDeploymentReplication, opts v1.UpdateOptions) (*v2alpha1.ArangoDeploymentReplication, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoDeploymentReplicationInterface interface { // arangoDeploymentReplications implements ArangoDeploymentReplicationInterface type arangoDeploymentReplications struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v2alpha1.ArangoDeploymentReplication, *v2alpha1.ArangoDeploymentReplicationList] } // newArangoDeploymentReplications returns a ArangoDeploymentReplications func newArangoDeploymentReplications(c *ReplicationV2alpha1Client, namespace string) *arangoDeploymentReplications { return &arangoDeploymentReplications{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v2alpha1.ArangoDeploymentReplication, *v2alpha1.ArangoDeploymentReplicationList]( + "arangodeploymentreplications", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v2alpha1.ArangoDeploymentReplication { return &v2alpha1.ArangoDeploymentReplication{} }, + func() *v2alpha1.ArangoDeploymentReplicationList { return &v2alpha1.ArangoDeploymentReplicationList{} }), } } - -// Get takes name of the arangoDeploymentReplication, and returns the corresponding arangoDeploymentReplication object, and an error if there is any. -func (c *arangoDeploymentReplications) Get(ctx context.Context, name string, options v1.GetOptions) (result *v2alpha1.ArangoDeploymentReplication, err error) { - result = &v2alpha1.ArangoDeploymentReplication{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoDeploymentReplications that match those selectors. -func (c *arangoDeploymentReplications) List(ctx context.Context, opts v1.ListOptions) (result *v2alpha1.ArangoDeploymentReplicationList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v2alpha1.ArangoDeploymentReplicationList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoDeploymentReplications. -func (c *arangoDeploymentReplications) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoDeploymentReplication and creates it. Returns the server's representation of the arangoDeploymentReplication, and an error, if there is any. -func (c *arangoDeploymentReplications) Create(ctx context.Context, arangoDeploymentReplication *v2alpha1.ArangoDeploymentReplication, opts v1.CreateOptions) (result *v2alpha1.ArangoDeploymentReplication, err error) { - result = &v2alpha1.ArangoDeploymentReplication{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoDeploymentReplication). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoDeploymentReplication and updates it. Returns the server's representation of the arangoDeploymentReplication, and an error, if there is any. -func (c *arangoDeploymentReplications) Update(ctx context.Context, arangoDeploymentReplication *v2alpha1.ArangoDeploymentReplication, opts v1.UpdateOptions) (result *v2alpha1.ArangoDeploymentReplication, err error) { - result = &v2alpha1.ArangoDeploymentReplication{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - Name(arangoDeploymentReplication.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoDeploymentReplication). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoDeploymentReplications) UpdateStatus(ctx context.Context, arangoDeploymentReplication *v2alpha1.ArangoDeploymentReplication, opts v1.UpdateOptions) (result *v2alpha1.ArangoDeploymentReplication, err error) { - result = &v2alpha1.ArangoDeploymentReplication{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - Name(arangoDeploymentReplication.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoDeploymentReplication). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoDeploymentReplication and deletes it. Returns an error if one occurs. -func (c *arangoDeploymentReplications) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoDeploymentReplications) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoDeploymentReplication. -func (c *arangoDeploymentReplications) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v2alpha1.ArangoDeploymentReplication, err error) { - result = &v2alpha1.ArangoDeploymentReplication{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangodeploymentreplications"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/doc.go b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/doc.go index 049dabc69..1ef2256a9 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/doc.go +++ b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/fake/doc.go b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/fake/doc.go index cc487d814..cb60dd032 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/fake/doc.go +++ b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/fake/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/fake/fake_arangodeploymentreplication.go b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/fake/fake_arangodeploymentreplication.go index 4d39cd4df..7ac1ae809 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/fake/fake_arangodeploymentreplication.go +++ b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/fake/fake_arangodeploymentreplication.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangodeploymentreplicationsKind = v2alpha1.SchemeGroupVersion.WithKind("Ara // Get takes name of the arangoDeploymentReplication, and returns the corresponding arangoDeploymentReplication object, and an error if there is any. func (c *FakeArangoDeploymentReplications) Get(ctx context.Context, name string, options v1.GetOptions) (result *v2alpha1.ArangoDeploymentReplication, err error) { + emptyResult := &v2alpha1.ArangoDeploymentReplication{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangodeploymentreplicationsResource, c.ns, name), &v2alpha1.ArangoDeploymentReplication{}) + Invokes(testing.NewGetActionWithOptions(arangodeploymentreplicationsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoDeploymentReplication), err } // List takes label and field selectors, and returns the list of ArangoDeploymentReplications that match those selectors. func (c *FakeArangoDeploymentReplications) List(ctx context.Context, opts v1.ListOptions) (result *v2alpha1.ArangoDeploymentReplicationList, err error) { + emptyResult := &v2alpha1.ArangoDeploymentReplicationList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangodeploymentreplicationsResource, arangodeploymentreplicationsKind, c.ns, opts), &v2alpha1.ArangoDeploymentReplicationList{}) + Invokes(testing.NewListActionWithOptions(arangodeploymentreplicationsResource, arangodeploymentreplicationsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoDeploymentReplications) List(ctx context.Context, opts v1.Lis // Watch returns a watch.Interface that watches the requested arangoDeploymentReplications. func (c *FakeArangoDeploymentReplications) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangodeploymentreplicationsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangodeploymentreplicationsResource, c.ns, opts)) } // Create takes the representation of a arangoDeploymentReplication and creates it. Returns the server's representation of the arangoDeploymentReplication, and an error, if there is any. func (c *FakeArangoDeploymentReplications) Create(ctx context.Context, arangoDeploymentReplication *v2alpha1.ArangoDeploymentReplication, opts v1.CreateOptions) (result *v2alpha1.ArangoDeploymentReplication, err error) { + emptyResult := &v2alpha1.ArangoDeploymentReplication{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangodeploymentreplicationsResource, c.ns, arangoDeploymentReplication), &v2alpha1.ArangoDeploymentReplication{}) + Invokes(testing.NewCreateActionWithOptions(arangodeploymentreplicationsResource, c.ns, arangoDeploymentReplication, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoDeploymentReplication), err } // Update takes the representation of a arangoDeploymentReplication and updates it. Returns the server's representation of the arangoDeploymentReplication, and an error, if there is any. func (c *FakeArangoDeploymentReplications) Update(ctx context.Context, arangoDeploymentReplication *v2alpha1.ArangoDeploymentReplication, opts v1.UpdateOptions) (result *v2alpha1.ArangoDeploymentReplication, err error) { + emptyResult := &v2alpha1.ArangoDeploymentReplication{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangodeploymentreplicationsResource, c.ns, arangoDeploymentReplication), &v2alpha1.ArangoDeploymentReplication{}) + Invokes(testing.NewUpdateActionWithOptions(arangodeploymentreplicationsResource, c.ns, arangoDeploymentReplication, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoDeploymentReplication), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoDeploymentReplications) UpdateStatus(ctx context.Context, arangoDeploymentReplication *v2alpha1.ArangoDeploymentReplication, opts v1.UpdateOptions) (*v2alpha1.ArangoDeploymentReplication, error) { +func (c *FakeArangoDeploymentReplications) UpdateStatus(ctx context.Context, arangoDeploymentReplication *v2alpha1.ArangoDeploymentReplication, opts v1.UpdateOptions) (result *v2alpha1.ArangoDeploymentReplication, err error) { + emptyResult := &v2alpha1.ArangoDeploymentReplication{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangodeploymentreplicationsResource, "status", c.ns, arangoDeploymentReplication), &v2alpha1.ArangoDeploymentReplication{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangodeploymentreplicationsResource, "status", c.ns, arangoDeploymentReplication, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoDeploymentReplication), err } @@ -127,7 +132,7 @@ func (c *FakeArangoDeploymentReplications) Delete(ctx context.Context, name stri // DeleteCollection deletes a collection of objects. func (c *FakeArangoDeploymentReplications) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangodeploymentreplicationsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangodeploymentreplicationsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v2alpha1.ArangoDeploymentReplicationList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoDeploymentReplications) DeleteCollection(ctx context.Context, // Patch applies the patch and returns the patched arangoDeploymentReplication. func (c *FakeArangoDeploymentReplications) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v2alpha1.ArangoDeploymentReplication, err error) { + emptyResult := &v2alpha1.ArangoDeploymentReplication{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangodeploymentreplicationsResource, c.ns, name, pt, data, subresources...), &v2alpha1.ArangoDeploymentReplication{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangodeploymentreplicationsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v2alpha1.ArangoDeploymentReplication), err } diff --git a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/fake/fake_replication_client.go b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/fake/fake_replication_client.go index 7a2acf877..2dd793e4e 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/fake/fake_replication_client.go +++ b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/fake/fake_replication_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/generated_expansion.go index 9953a1130..319340b7c 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/generated_expansion.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/replication_client.go b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/replication_client.go index 3a2ea1a7c..1bd6bf9c0 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/replication_client.go +++ b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/replication_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/arangoprofile.go b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/arangoprofile.go index e733e17ba..92646468c 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/arangoprofile.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/arangoprofile.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1alpha1 import ( "context" - "time" v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoProfilesGetter has a method to return a ArangoProfileInterface. @@ -44,6 +43,7 @@ type ArangoProfilesGetter interface { type ArangoProfileInterface interface { Create(ctx context.Context, arangoProfile *v1alpha1.ArangoProfile, opts v1.CreateOptions) (*v1alpha1.ArangoProfile, error) Update(ctx context.Context, arangoProfile *v1alpha1.ArangoProfile, opts v1.UpdateOptions) (*v1alpha1.ArangoProfile, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoProfile *v1alpha1.ArangoProfile, opts v1.UpdateOptions) (*v1alpha1.ArangoProfile, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoProfileInterface interface { // arangoProfiles implements ArangoProfileInterface type arangoProfiles struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1alpha1.ArangoProfile, *v1alpha1.ArangoProfileList] } // newArangoProfiles returns a ArangoProfiles func newArangoProfiles(c *SchedulerV1alpha1Client, namespace string) *arangoProfiles { return &arangoProfiles{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1alpha1.ArangoProfile, *v1alpha1.ArangoProfileList]( + "arangoprofiles", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1alpha1.ArangoProfile { return &v1alpha1.ArangoProfile{} }, + func() *v1alpha1.ArangoProfileList { return &v1alpha1.ArangoProfileList{} }), } } - -// Get takes name of the arangoProfile, and returns the corresponding arangoProfile object, and an error if there is any. -func (c *arangoProfiles) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoProfile, err error) { - result = &v1alpha1.ArangoProfile{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoprofiles"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoProfiles that match those selectors. -func (c *arangoProfiles) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoProfileList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1alpha1.ArangoProfileList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoprofiles"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoProfiles. -func (c *arangoProfiles) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangoprofiles"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoProfile and creates it. Returns the server's representation of the arangoProfile, and an error, if there is any. -func (c *arangoProfiles) Create(ctx context.Context, arangoProfile *v1alpha1.ArangoProfile, opts v1.CreateOptions) (result *v1alpha1.ArangoProfile, err error) { - result = &v1alpha1.ArangoProfile{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangoprofiles"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoProfile). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoProfile and updates it. Returns the server's representation of the arangoProfile, and an error, if there is any. -func (c *arangoProfiles) Update(ctx context.Context, arangoProfile *v1alpha1.ArangoProfile, opts v1.UpdateOptions) (result *v1alpha1.ArangoProfile, err error) { - result = &v1alpha1.ArangoProfile{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoprofiles"). - Name(arangoProfile.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoProfile). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoProfiles) UpdateStatus(ctx context.Context, arangoProfile *v1alpha1.ArangoProfile, opts v1.UpdateOptions) (result *v1alpha1.ArangoProfile, err error) { - result = &v1alpha1.ArangoProfile{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoprofiles"). - Name(arangoProfile.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoProfile). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoProfile and deletes it. Returns an error if one occurs. -func (c *arangoProfiles) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoprofiles"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoProfiles) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoprofiles"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoProfile. -func (c *arangoProfiles) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoProfile, err error) { - result = &v1alpha1.ArangoProfile{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangoprofiles"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/doc.go b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/doc.go index f45dab6c5..2ad43a88a 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/doc.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/fake/doc.go b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/fake/doc.go index cc487d814..cb60dd032 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/fake/doc.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/fake/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/fake/fake_arangoprofile.go b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/fake/fake_arangoprofile.go index 0c058c681..e070bb618 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/fake/fake_arangoprofile.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/fake/fake_arangoprofile.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangoprofilesKind = v1alpha1.SchemeGroupVersion.WithKind("ArangoProfile") // Get takes name of the arangoProfile, and returns the corresponding arangoProfile object, and an error if there is any. func (c *FakeArangoProfiles) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoProfile, err error) { + emptyResult := &v1alpha1.ArangoProfile{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangoprofilesResource, c.ns, name), &v1alpha1.ArangoProfile{}) + Invokes(testing.NewGetActionWithOptions(arangoprofilesResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoProfile), err } // List takes label and field selectors, and returns the list of ArangoProfiles that match those selectors. func (c *FakeArangoProfiles) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoProfileList, err error) { + emptyResult := &v1alpha1.ArangoProfileList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangoprofilesResource, arangoprofilesKind, c.ns, opts), &v1alpha1.ArangoProfileList{}) + Invokes(testing.NewListActionWithOptions(arangoprofilesResource, arangoprofilesKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoProfiles) List(ctx context.Context, opts v1.ListOptions) (res // Watch returns a watch.Interface that watches the requested arangoProfiles. func (c *FakeArangoProfiles) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangoprofilesResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangoprofilesResource, c.ns, opts)) } // Create takes the representation of a arangoProfile and creates it. Returns the server's representation of the arangoProfile, and an error, if there is any. func (c *FakeArangoProfiles) Create(ctx context.Context, arangoProfile *v1alpha1.ArangoProfile, opts v1.CreateOptions) (result *v1alpha1.ArangoProfile, err error) { + emptyResult := &v1alpha1.ArangoProfile{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangoprofilesResource, c.ns, arangoProfile), &v1alpha1.ArangoProfile{}) + Invokes(testing.NewCreateActionWithOptions(arangoprofilesResource, c.ns, arangoProfile, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoProfile), err } // Update takes the representation of a arangoProfile and updates it. Returns the server's representation of the arangoProfile, and an error, if there is any. func (c *FakeArangoProfiles) Update(ctx context.Context, arangoProfile *v1alpha1.ArangoProfile, opts v1.UpdateOptions) (result *v1alpha1.ArangoProfile, err error) { + emptyResult := &v1alpha1.ArangoProfile{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangoprofilesResource, c.ns, arangoProfile), &v1alpha1.ArangoProfile{}) + Invokes(testing.NewUpdateActionWithOptions(arangoprofilesResource, c.ns, arangoProfile, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoProfile), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoProfiles) UpdateStatus(ctx context.Context, arangoProfile *v1alpha1.ArangoProfile, opts v1.UpdateOptions) (*v1alpha1.ArangoProfile, error) { +func (c *FakeArangoProfiles) UpdateStatus(ctx context.Context, arangoProfile *v1alpha1.ArangoProfile, opts v1.UpdateOptions) (result *v1alpha1.ArangoProfile, err error) { + emptyResult := &v1alpha1.ArangoProfile{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangoprofilesResource, "status", c.ns, arangoProfile), &v1alpha1.ArangoProfile{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangoprofilesResource, "status", c.ns, arangoProfile, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoProfile), err } @@ -127,7 +132,7 @@ func (c *FakeArangoProfiles) Delete(ctx context.Context, name string, opts v1.De // DeleteCollection deletes a collection of objects. func (c *FakeArangoProfiles) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangoprofilesResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangoprofilesResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1alpha1.ArangoProfileList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoProfiles) DeleteCollection(ctx context.Context, opts v1.Delet // Patch applies the patch and returns the patched arangoProfile. func (c *FakeArangoProfiles) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoProfile, err error) { + emptyResult := &v1alpha1.ArangoProfile{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangoprofilesResource, c.ns, name, pt, data, subresources...), &v1alpha1.ArangoProfile{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangoprofilesResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha1.ArangoProfile), err } diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/fake/fake_scheduler_client.go b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/fake/fake_scheduler_client.go index f2ee4d1da..5f7c92afb 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/fake/fake_scheduler_client.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/fake/fake_scheduler_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/generated_expansion.go index 18e272f9a..c6612a39e 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/generated_expansion.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/scheduler_client.go b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/scheduler_client.go index ceed8f900..2419d2a50 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/scheduler_client.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/scheduler_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoprofile.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoprofile.go index 37b9c7ab5..ad03712b6 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoprofile.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoprofile.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1beta1 import ( "context" - "time" v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoProfilesGetter has a method to return a ArangoProfileInterface. @@ -44,6 +43,7 @@ type ArangoProfilesGetter interface { type ArangoProfileInterface interface { Create(ctx context.Context, arangoProfile *v1beta1.ArangoProfile, opts v1.CreateOptions) (*v1beta1.ArangoProfile, error) Update(ctx context.Context, arangoProfile *v1beta1.ArangoProfile, opts v1.UpdateOptions) (*v1beta1.ArangoProfile, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoProfile *v1beta1.ArangoProfile, opts v1.UpdateOptions) (*v1beta1.ArangoProfile, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoProfileInterface interface { // arangoProfiles implements ArangoProfileInterface type arangoProfiles struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1beta1.ArangoProfile, *v1beta1.ArangoProfileList] } // newArangoProfiles returns a ArangoProfiles func newArangoProfiles(c *SchedulerV1beta1Client, namespace string) *arangoProfiles { return &arangoProfiles{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1beta1.ArangoProfile, *v1beta1.ArangoProfileList]( + "arangoprofiles", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1beta1.ArangoProfile { return &v1beta1.ArangoProfile{} }, + func() *v1beta1.ArangoProfileList { return &v1beta1.ArangoProfileList{} }), } } - -// Get takes name of the arangoProfile, and returns the corresponding arangoProfile object, and an error if there is any. -func (c *arangoProfiles) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ArangoProfile, err error) { - result = &v1beta1.ArangoProfile{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoprofiles"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoProfiles that match those selectors. -func (c *arangoProfiles) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ArangoProfileList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1beta1.ArangoProfileList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoprofiles"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoProfiles. -func (c *arangoProfiles) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangoprofiles"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoProfile and creates it. Returns the server's representation of the arangoProfile, and an error, if there is any. -func (c *arangoProfiles) Create(ctx context.Context, arangoProfile *v1beta1.ArangoProfile, opts v1.CreateOptions) (result *v1beta1.ArangoProfile, err error) { - result = &v1beta1.ArangoProfile{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangoprofiles"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoProfile). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoProfile and updates it. Returns the server's representation of the arangoProfile, and an error, if there is any. -func (c *arangoProfiles) Update(ctx context.Context, arangoProfile *v1beta1.ArangoProfile, opts v1.UpdateOptions) (result *v1beta1.ArangoProfile, err error) { - result = &v1beta1.ArangoProfile{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoprofiles"). - Name(arangoProfile.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoProfile). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoProfiles) UpdateStatus(ctx context.Context, arangoProfile *v1beta1.ArangoProfile, opts v1.UpdateOptions) (result *v1beta1.ArangoProfile, err error) { - result = &v1beta1.ArangoProfile{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoprofiles"). - Name(arangoProfile.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoProfile). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoProfile and deletes it. Returns an error if one occurs. -func (c *arangoProfiles) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoprofiles"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoProfiles) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoprofiles"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoProfile. -func (c *arangoProfiles) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoProfile, err error) { - result = &v1beta1.ArangoProfile{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangoprofiles"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerbatchjob.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerbatchjob.go index cb6e72dca..0f13978bd 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerbatchjob.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerbatchjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1beta1 import ( "context" - "time" v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoSchedulerBatchJobsGetter has a method to return a ArangoSchedulerBatchJobInterface. @@ -44,6 +43,7 @@ type ArangoSchedulerBatchJobsGetter interface { type ArangoSchedulerBatchJobInterface interface { Create(ctx context.Context, arangoSchedulerBatchJob *v1beta1.ArangoSchedulerBatchJob, opts v1.CreateOptions) (*v1beta1.ArangoSchedulerBatchJob, error) Update(ctx context.Context, arangoSchedulerBatchJob *v1beta1.ArangoSchedulerBatchJob, opts v1.UpdateOptions) (*v1beta1.ArangoSchedulerBatchJob, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoSchedulerBatchJob *v1beta1.ArangoSchedulerBatchJob, opts v1.UpdateOptions) (*v1beta1.ArangoSchedulerBatchJob, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoSchedulerBatchJobInterface interface { // arangoSchedulerBatchJobs implements ArangoSchedulerBatchJobInterface type arangoSchedulerBatchJobs struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1beta1.ArangoSchedulerBatchJob, *v1beta1.ArangoSchedulerBatchJobList] } // newArangoSchedulerBatchJobs returns a ArangoSchedulerBatchJobs func newArangoSchedulerBatchJobs(c *SchedulerV1beta1Client, namespace string) *arangoSchedulerBatchJobs { return &arangoSchedulerBatchJobs{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1beta1.ArangoSchedulerBatchJob, *v1beta1.ArangoSchedulerBatchJobList]( + "arangoschedulerbatchjobs", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1beta1.ArangoSchedulerBatchJob { return &v1beta1.ArangoSchedulerBatchJob{} }, + func() *v1beta1.ArangoSchedulerBatchJobList { return &v1beta1.ArangoSchedulerBatchJobList{} }), } } - -// Get takes name of the arangoSchedulerBatchJob, and returns the corresponding arangoSchedulerBatchJob object, and an error if there is any. -func (c *arangoSchedulerBatchJobs) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ArangoSchedulerBatchJob, err error) { - result = &v1beta1.ArangoSchedulerBatchJob{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoschedulerbatchjobs"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoSchedulerBatchJobs that match those selectors. -func (c *arangoSchedulerBatchJobs) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ArangoSchedulerBatchJobList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1beta1.ArangoSchedulerBatchJobList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoschedulerbatchjobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoSchedulerBatchJobs. -func (c *arangoSchedulerBatchJobs) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangoschedulerbatchjobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoSchedulerBatchJob and creates it. Returns the server's representation of the arangoSchedulerBatchJob, and an error, if there is any. -func (c *arangoSchedulerBatchJobs) Create(ctx context.Context, arangoSchedulerBatchJob *v1beta1.ArangoSchedulerBatchJob, opts v1.CreateOptions) (result *v1beta1.ArangoSchedulerBatchJob, err error) { - result = &v1beta1.ArangoSchedulerBatchJob{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangoschedulerbatchjobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoSchedulerBatchJob). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoSchedulerBatchJob and updates it. Returns the server's representation of the arangoSchedulerBatchJob, and an error, if there is any. -func (c *arangoSchedulerBatchJobs) Update(ctx context.Context, arangoSchedulerBatchJob *v1beta1.ArangoSchedulerBatchJob, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerBatchJob, err error) { - result = &v1beta1.ArangoSchedulerBatchJob{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoschedulerbatchjobs"). - Name(arangoSchedulerBatchJob.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoSchedulerBatchJob). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoSchedulerBatchJobs) UpdateStatus(ctx context.Context, arangoSchedulerBatchJob *v1beta1.ArangoSchedulerBatchJob, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerBatchJob, err error) { - result = &v1beta1.ArangoSchedulerBatchJob{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoschedulerbatchjobs"). - Name(arangoSchedulerBatchJob.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoSchedulerBatchJob). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoSchedulerBatchJob and deletes it. Returns an error if one occurs. -func (c *arangoSchedulerBatchJobs) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoschedulerbatchjobs"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoSchedulerBatchJobs) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoschedulerbatchjobs"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoSchedulerBatchJob. -func (c *arangoSchedulerBatchJobs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoSchedulerBatchJob, err error) { - result = &v1beta1.ArangoSchedulerBatchJob{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangoschedulerbatchjobs"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulercronjob.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulercronjob.go index e0a06dc30..9798c7dd3 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulercronjob.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulercronjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1beta1 import ( "context" - "time" v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoSchedulerCronJobsGetter has a method to return a ArangoSchedulerCronJobInterface. @@ -44,6 +43,7 @@ type ArangoSchedulerCronJobsGetter interface { type ArangoSchedulerCronJobInterface interface { Create(ctx context.Context, arangoSchedulerCronJob *v1beta1.ArangoSchedulerCronJob, opts v1.CreateOptions) (*v1beta1.ArangoSchedulerCronJob, error) Update(ctx context.Context, arangoSchedulerCronJob *v1beta1.ArangoSchedulerCronJob, opts v1.UpdateOptions) (*v1beta1.ArangoSchedulerCronJob, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoSchedulerCronJob *v1beta1.ArangoSchedulerCronJob, opts v1.UpdateOptions) (*v1beta1.ArangoSchedulerCronJob, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoSchedulerCronJobInterface interface { // arangoSchedulerCronJobs implements ArangoSchedulerCronJobInterface type arangoSchedulerCronJobs struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1beta1.ArangoSchedulerCronJob, *v1beta1.ArangoSchedulerCronJobList] } // newArangoSchedulerCronJobs returns a ArangoSchedulerCronJobs func newArangoSchedulerCronJobs(c *SchedulerV1beta1Client, namespace string) *arangoSchedulerCronJobs { return &arangoSchedulerCronJobs{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1beta1.ArangoSchedulerCronJob, *v1beta1.ArangoSchedulerCronJobList]( + "arangoschedulercronjobs", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1beta1.ArangoSchedulerCronJob { return &v1beta1.ArangoSchedulerCronJob{} }, + func() *v1beta1.ArangoSchedulerCronJobList { return &v1beta1.ArangoSchedulerCronJobList{} }), } } - -// Get takes name of the arangoSchedulerCronJob, and returns the corresponding arangoSchedulerCronJob object, and an error if there is any. -func (c *arangoSchedulerCronJobs) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ArangoSchedulerCronJob, err error) { - result = &v1beta1.ArangoSchedulerCronJob{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoschedulercronjobs"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoSchedulerCronJobs that match those selectors. -func (c *arangoSchedulerCronJobs) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ArangoSchedulerCronJobList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1beta1.ArangoSchedulerCronJobList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoschedulercronjobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoSchedulerCronJobs. -func (c *arangoSchedulerCronJobs) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangoschedulercronjobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoSchedulerCronJob and creates it. Returns the server's representation of the arangoSchedulerCronJob, and an error, if there is any. -func (c *arangoSchedulerCronJobs) Create(ctx context.Context, arangoSchedulerCronJob *v1beta1.ArangoSchedulerCronJob, opts v1.CreateOptions) (result *v1beta1.ArangoSchedulerCronJob, err error) { - result = &v1beta1.ArangoSchedulerCronJob{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangoschedulercronjobs"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoSchedulerCronJob). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoSchedulerCronJob and updates it. Returns the server's representation of the arangoSchedulerCronJob, and an error, if there is any. -func (c *arangoSchedulerCronJobs) Update(ctx context.Context, arangoSchedulerCronJob *v1beta1.ArangoSchedulerCronJob, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerCronJob, err error) { - result = &v1beta1.ArangoSchedulerCronJob{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoschedulercronjobs"). - Name(arangoSchedulerCronJob.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoSchedulerCronJob). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoSchedulerCronJobs) UpdateStatus(ctx context.Context, arangoSchedulerCronJob *v1beta1.ArangoSchedulerCronJob, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerCronJob, err error) { - result = &v1beta1.ArangoSchedulerCronJob{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoschedulercronjobs"). - Name(arangoSchedulerCronJob.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoSchedulerCronJob). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoSchedulerCronJob and deletes it. Returns an error if one occurs. -func (c *arangoSchedulerCronJobs) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoschedulercronjobs"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoSchedulerCronJobs) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoschedulercronjobs"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoSchedulerCronJob. -func (c *arangoSchedulerCronJobs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoSchedulerCronJob, err error) { - result = &v1beta1.ArangoSchedulerCronJob{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangoschedulercronjobs"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerdeployment.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerdeployment.go index e2f9cb6af..e9901e03b 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerdeployment.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerdeployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,14 @@ package v1beta1 import ( "context" - "time" v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" + autoscalingv1 "k8s.io/api/autoscaling/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoSchedulerDeploymentsGetter has a method to return a ArangoSchedulerDeploymentInterface. @@ -44,6 +44,7 @@ type ArangoSchedulerDeploymentsGetter interface { type ArangoSchedulerDeploymentInterface interface { Create(ctx context.Context, arangoSchedulerDeployment *v1beta1.ArangoSchedulerDeployment, opts v1.CreateOptions) (*v1beta1.ArangoSchedulerDeployment, error) Update(ctx context.Context, arangoSchedulerDeployment *v1beta1.ArangoSchedulerDeployment, opts v1.UpdateOptions) (*v1beta1.ArangoSchedulerDeployment, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoSchedulerDeployment *v1beta1.ArangoSchedulerDeployment, opts v1.UpdateOptions) (*v1beta1.ArangoSchedulerDeployment, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -51,148 +52,54 @@ type ArangoSchedulerDeploymentInterface interface { List(ctx context.Context, opts v1.ListOptions) (*v1beta1.ArangoSchedulerDeploymentList, error) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoSchedulerDeployment, err error) + GetScale(ctx context.Context, arangoSchedulerDeploymentName string, options v1.GetOptions) (*autoscalingv1.Scale, error) + UpdateScale(ctx context.Context, arangoSchedulerDeploymentName string, scale *autoscalingv1.Scale, opts v1.UpdateOptions) (*autoscalingv1.Scale, error) + ArangoSchedulerDeploymentExpansion } // arangoSchedulerDeployments implements ArangoSchedulerDeploymentInterface type arangoSchedulerDeployments struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1beta1.ArangoSchedulerDeployment, *v1beta1.ArangoSchedulerDeploymentList] } // newArangoSchedulerDeployments returns a ArangoSchedulerDeployments func newArangoSchedulerDeployments(c *SchedulerV1beta1Client, namespace string) *arangoSchedulerDeployments { return &arangoSchedulerDeployments{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1beta1.ArangoSchedulerDeployment, *v1beta1.ArangoSchedulerDeploymentList]( + "arangoschedulerdeployments", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1beta1.ArangoSchedulerDeployment { return &v1beta1.ArangoSchedulerDeployment{} }, + func() *v1beta1.ArangoSchedulerDeploymentList { return &v1beta1.ArangoSchedulerDeploymentList{} }), } } -// Get takes name of the arangoSchedulerDeployment, and returns the corresponding arangoSchedulerDeployment object, and an error if there is any. -func (c *arangoSchedulerDeployments) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ArangoSchedulerDeployment, err error) { - result = &v1beta1.ArangoSchedulerDeployment{} - err = c.client.Get(). - Namespace(c.ns). +// GetScale takes name of the arangoSchedulerDeployment, and returns the corresponding autoscalingv1.Scale object, and an error if there is any. +func (c *arangoSchedulerDeployments) GetScale(ctx context.Context, arangoSchedulerDeploymentName string, options v1.GetOptions) (result *autoscalingv1.Scale, err error) { + result = &autoscalingv1.Scale{} + err = c.GetClient().Get(). + Namespace(c.GetNamespace()). Resource("arangoschedulerdeployments"). - Name(name). + Name(arangoSchedulerDeploymentName). + SubResource("scale"). VersionedParams(&options, scheme.ParameterCodec). Do(ctx). Into(result) return } -// List takes label and field selectors, and returns the list of ArangoSchedulerDeployments that match those selectors. -func (c *arangoSchedulerDeployments) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ArangoSchedulerDeploymentList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1beta1.ArangoSchedulerDeploymentList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoschedulerdeployments"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoSchedulerDeployments. -func (c *arangoSchedulerDeployments) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangoschedulerdeployments"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoSchedulerDeployment and creates it. Returns the server's representation of the arangoSchedulerDeployment, and an error, if there is any. -func (c *arangoSchedulerDeployments) Create(ctx context.Context, arangoSchedulerDeployment *v1beta1.ArangoSchedulerDeployment, opts v1.CreateOptions) (result *v1beta1.ArangoSchedulerDeployment, err error) { - result = &v1beta1.ArangoSchedulerDeployment{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangoschedulerdeployments"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoSchedulerDeployment). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoSchedulerDeployment and updates it. Returns the server's representation of the arangoSchedulerDeployment, and an error, if there is any. -func (c *arangoSchedulerDeployments) Update(ctx context.Context, arangoSchedulerDeployment *v1beta1.ArangoSchedulerDeployment, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerDeployment, err error) { - result = &v1beta1.ArangoSchedulerDeployment{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoschedulerdeployments"). - Name(arangoSchedulerDeployment.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoSchedulerDeployment). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoSchedulerDeployments) UpdateStatus(ctx context.Context, arangoSchedulerDeployment *v1beta1.ArangoSchedulerDeployment, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerDeployment, err error) { - result = &v1beta1.ArangoSchedulerDeployment{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoschedulerdeployments"). - Name(arangoSchedulerDeployment.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoSchedulerDeployment). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoSchedulerDeployment and deletes it. Returns an error if one occurs. -func (c *arangoSchedulerDeployments) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoschedulerdeployments"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoSchedulerDeployments) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoschedulerdeployments"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoSchedulerDeployment. -func (c *arangoSchedulerDeployments) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoSchedulerDeployment, err error) { - result = &v1beta1.ArangoSchedulerDeployment{} - err = c.client.Patch(pt). - Namespace(c.ns). +// UpdateScale takes the top resource name and the representation of a scale and updates it. Returns the server's representation of the scale, and an error, if there is any. +func (c *arangoSchedulerDeployments) UpdateScale(ctx context.Context, arangoSchedulerDeploymentName string, scale *autoscalingv1.Scale, opts v1.UpdateOptions) (result *autoscalingv1.Scale, err error) { + result = &autoscalingv1.Scale{} + err = c.GetClient().Put(). + Namespace(c.GetNamespace()). Resource("arangoschedulerdeployments"). - Name(name). - SubResource(subresources...). + Name(arangoSchedulerDeploymentName). + SubResource("scale"). VersionedParams(&opts, scheme.ParameterCodec). - Body(data). + Body(scale). Do(ctx). Into(result) return diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerpod.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerpod.go index 55703b9db..b270fb288 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerpod.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerpod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1beta1 import ( "context" - "time" v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoSchedulerPodsGetter has a method to return a ArangoSchedulerPodInterface. @@ -44,6 +43,7 @@ type ArangoSchedulerPodsGetter interface { type ArangoSchedulerPodInterface interface { Create(ctx context.Context, arangoSchedulerPod *v1beta1.ArangoSchedulerPod, opts v1.CreateOptions) (*v1beta1.ArangoSchedulerPod, error) Update(ctx context.Context, arangoSchedulerPod *v1beta1.ArangoSchedulerPod, opts v1.UpdateOptions) (*v1beta1.ArangoSchedulerPod, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoSchedulerPod *v1beta1.ArangoSchedulerPod, opts v1.UpdateOptions) (*v1beta1.ArangoSchedulerPod, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,144 +56,18 @@ type ArangoSchedulerPodInterface interface { // arangoSchedulerPods implements ArangoSchedulerPodInterface type arangoSchedulerPods struct { - client rest.Interface - ns string + *gentype.ClientWithList[*v1beta1.ArangoSchedulerPod, *v1beta1.ArangoSchedulerPodList] } // newArangoSchedulerPods returns a ArangoSchedulerPods func newArangoSchedulerPods(c *SchedulerV1beta1Client, namespace string) *arangoSchedulerPods { return &arangoSchedulerPods{ - client: c.RESTClient(), - ns: namespace, + gentype.NewClientWithList[*v1beta1.ArangoSchedulerPod, *v1beta1.ArangoSchedulerPodList]( + "arangoschedulerpods", + c.RESTClient(), + scheme.ParameterCodec, + namespace, + func() *v1beta1.ArangoSchedulerPod { return &v1beta1.ArangoSchedulerPod{} }, + func() *v1beta1.ArangoSchedulerPodList { return &v1beta1.ArangoSchedulerPodList{} }), } } - -// Get takes name of the arangoSchedulerPod, and returns the corresponding arangoSchedulerPod object, and an error if there is any. -func (c *arangoSchedulerPods) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ArangoSchedulerPod, err error) { - result = &v1beta1.ArangoSchedulerPod{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoschedulerpods"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoSchedulerPods that match those selectors. -func (c *arangoSchedulerPods) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ArangoSchedulerPodList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1beta1.ArangoSchedulerPodList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("arangoschedulerpods"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoSchedulerPods. -func (c *arangoSchedulerPods) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("arangoschedulerpods"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoSchedulerPod and creates it. Returns the server's representation of the arangoSchedulerPod, and an error, if there is any. -func (c *arangoSchedulerPods) Create(ctx context.Context, arangoSchedulerPod *v1beta1.ArangoSchedulerPod, opts v1.CreateOptions) (result *v1beta1.ArangoSchedulerPod, err error) { - result = &v1beta1.ArangoSchedulerPod{} - err = c.client.Post(). - Namespace(c.ns). - Resource("arangoschedulerpods"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoSchedulerPod). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoSchedulerPod and updates it. Returns the server's representation of the arangoSchedulerPod, and an error, if there is any. -func (c *arangoSchedulerPods) Update(ctx context.Context, arangoSchedulerPod *v1beta1.ArangoSchedulerPod, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerPod, err error) { - result = &v1beta1.ArangoSchedulerPod{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoschedulerpods"). - Name(arangoSchedulerPod.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoSchedulerPod). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoSchedulerPods) UpdateStatus(ctx context.Context, arangoSchedulerPod *v1beta1.ArangoSchedulerPod, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerPod, err error) { - result = &v1beta1.ArangoSchedulerPod{} - err = c.client.Put(). - Namespace(c.ns). - Resource("arangoschedulerpods"). - Name(arangoSchedulerPod.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoSchedulerPod). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoSchedulerPod and deletes it. Returns an error if one occurs. -func (c *arangoSchedulerPods) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoschedulerpods"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoSchedulerPods) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("arangoschedulerpods"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoSchedulerPod. -func (c *arangoSchedulerPods) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoSchedulerPod, err error) { - result = &v1beta1.ArangoSchedulerPod{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("arangoschedulerpods"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/doc.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/doc.go index f22204098..f19db7d65 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/doc.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/doc.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/doc.go index cc487d814..cb60dd032 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/doc.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoprofile.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoprofile.go index b7ae44fa5..3f4f7cf6c 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoprofile.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoprofile.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangoprofilesKind = v1beta1.SchemeGroupVersion.WithKind("ArangoProfile") // Get takes name of the arangoProfile, and returns the corresponding arangoProfile object, and an error if there is any. func (c *FakeArangoProfiles) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ArangoProfile, err error) { + emptyResult := &v1beta1.ArangoProfile{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangoprofilesResource, c.ns, name), &v1beta1.ArangoProfile{}) + Invokes(testing.NewGetActionWithOptions(arangoprofilesResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoProfile), err } // List takes label and field selectors, and returns the list of ArangoProfiles that match those selectors. func (c *FakeArangoProfiles) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ArangoProfileList, err error) { + emptyResult := &v1beta1.ArangoProfileList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangoprofilesResource, arangoprofilesKind, c.ns, opts), &v1beta1.ArangoProfileList{}) + Invokes(testing.NewListActionWithOptions(arangoprofilesResource, arangoprofilesKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoProfiles) List(ctx context.Context, opts v1.ListOptions) (res // Watch returns a watch.Interface that watches the requested arangoProfiles. func (c *FakeArangoProfiles) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangoprofilesResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangoprofilesResource, c.ns, opts)) } // Create takes the representation of a arangoProfile and creates it. Returns the server's representation of the arangoProfile, and an error, if there is any. func (c *FakeArangoProfiles) Create(ctx context.Context, arangoProfile *v1beta1.ArangoProfile, opts v1.CreateOptions) (result *v1beta1.ArangoProfile, err error) { + emptyResult := &v1beta1.ArangoProfile{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangoprofilesResource, c.ns, arangoProfile), &v1beta1.ArangoProfile{}) + Invokes(testing.NewCreateActionWithOptions(arangoprofilesResource, c.ns, arangoProfile, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoProfile), err } // Update takes the representation of a arangoProfile and updates it. Returns the server's representation of the arangoProfile, and an error, if there is any. func (c *FakeArangoProfiles) Update(ctx context.Context, arangoProfile *v1beta1.ArangoProfile, opts v1.UpdateOptions) (result *v1beta1.ArangoProfile, err error) { + emptyResult := &v1beta1.ArangoProfile{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangoprofilesResource, c.ns, arangoProfile), &v1beta1.ArangoProfile{}) + Invokes(testing.NewUpdateActionWithOptions(arangoprofilesResource, c.ns, arangoProfile, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoProfile), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoProfiles) UpdateStatus(ctx context.Context, arangoProfile *v1beta1.ArangoProfile, opts v1.UpdateOptions) (*v1beta1.ArangoProfile, error) { +func (c *FakeArangoProfiles) UpdateStatus(ctx context.Context, arangoProfile *v1beta1.ArangoProfile, opts v1.UpdateOptions) (result *v1beta1.ArangoProfile, err error) { + emptyResult := &v1beta1.ArangoProfile{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangoprofilesResource, "status", c.ns, arangoProfile), &v1beta1.ArangoProfile{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangoprofilesResource, "status", c.ns, arangoProfile, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoProfile), err } @@ -127,7 +132,7 @@ func (c *FakeArangoProfiles) Delete(ctx context.Context, name string, opts v1.De // DeleteCollection deletes a collection of objects. func (c *FakeArangoProfiles) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangoprofilesResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangoprofilesResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1beta1.ArangoProfileList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoProfiles) DeleteCollection(ctx context.Context, opts v1.Delet // Patch applies the patch and returns the patched arangoProfile. func (c *FakeArangoProfiles) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoProfile, err error) { + emptyResult := &v1beta1.ArangoProfile{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangoprofilesResource, c.ns, name, pt, data, subresources...), &v1beta1.ArangoProfile{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangoprofilesResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoProfile), err } diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulerbatchjob.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulerbatchjob.go index 50830d6f3..894d9a8f1 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulerbatchjob.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulerbatchjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangoschedulerbatchjobsKind = v1beta1.SchemeGroupVersion.WithKind("ArangoSc // Get takes name of the arangoSchedulerBatchJob, and returns the corresponding arangoSchedulerBatchJob object, and an error if there is any. func (c *FakeArangoSchedulerBatchJobs) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ArangoSchedulerBatchJob, err error) { + emptyResult := &v1beta1.ArangoSchedulerBatchJob{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangoschedulerbatchjobsResource, c.ns, name), &v1beta1.ArangoSchedulerBatchJob{}) + Invokes(testing.NewGetActionWithOptions(arangoschedulerbatchjobsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerBatchJob), err } // List takes label and field selectors, and returns the list of ArangoSchedulerBatchJobs that match those selectors. func (c *FakeArangoSchedulerBatchJobs) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ArangoSchedulerBatchJobList, err error) { + emptyResult := &v1beta1.ArangoSchedulerBatchJobList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangoschedulerbatchjobsResource, arangoschedulerbatchjobsKind, c.ns, opts), &v1beta1.ArangoSchedulerBatchJobList{}) + Invokes(testing.NewListActionWithOptions(arangoschedulerbatchjobsResource, arangoschedulerbatchjobsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoSchedulerBatchJobs) List(ctx context.Context, opts v1.ListOpt // Watch returns a watch.Interface that watches the requested arangoSchedulerBatchJobs. func (c *FakeArangoSchedulerBatchJobs) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangoschedulerbatchjobsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangoschedulerbatchjobsResource, c.ns, opts)) } // Create takes the representation of a arangoSchedulerBatchJob and creates it. Returns the server's representation of the arangoSchedulerBatchJob, and an error, if there is any. func (c *FakeArangoSchedulerBatchJobs) Create(ctx context.Context, arangoSchedulerBatchJob *v1beta1.ArangoSchedulerBatchJob, opts v1.CreateOptions) (result *v1beta1.ArangoSchedulerBatchJob, err error) { + emptyResult := &v1beta1.ArangoSchedulerBatchJob{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangoschedulerbatchjobsResource, c.ns, arangoSchedulerBatchJob), &v1beta1.ArangoSchedulerBatchJob{}) + Invokes(testing.NewCreateActionWithOptions(arangoschedulerbatchjobsResource, c.ns, arangoSchedulerBatchJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerBatchJob), err } // Update takes the representation of a arangoSchedulerBatchJob and updates it. Returns the server's representation of the arangoSchedulerBatchJob, and an error, if there is any. func (c *FakeArangoSchedulerBatchJobs) Update(ctx context.Context, arangoSchedulerBatchJob *v1beta1.ArangoSchedulerBatchJob, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerBatchJob, err error) { + emptyResult := &v1beta1.ArangoSchedulerBatchJob{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangoschedulerbatchjobsResource, c.ns, arangoSchedulerBatchJob), &v1beta1.ArangoSchedulerBatchJob{}) + Invokes(testing.NewUpdateActionWithOptions(arangoschedulerbatchjobsResource, c.ns, arangoSchedulerBatchJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerBatchJob), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoSchedulerBatchJobs) UpdateStatus(ctx context.Context, arangoSchedulerBatchJob *v1beta1.ArangoSchedulerBatchJob, opts v1.UpdateOptions) (*v1beta1.ArangoSchedulerBatchJob, error) { +func (c *FakeArangoSchedulerBatchJobs) UpdateStatus(ctx context.Context, arangoSchedulerBatchJob *v1beta1.ArangoSchedulerBatchJob, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerBatchJob, err error) { + emptyResult := &v1beta1.ArangoSchedulerBatchJob{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangoschedulerbatchjobsResource, "status", c.ns, arangoSchedulerBatchJob), &v1beta1.ArangoSchedulerBatchJob{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangoschedulerbatchjobsResource, "status", c.ns, arangoSchedulerBatchJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerBatchJob), err } @@ -127,7 +132,7 @@ func (c *FakeArangoSchedulerBatchJobs) Delete(ctx context.Context, name string, // DeleteCollection deletes a collection of objects. func (c *FakeArangoSchedulerBatchJobs) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangoschedulerbatchjobsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangoschedulerbatchjobsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1beta1.ArangoSchedulerBatchJobList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoSchedulerBatchJobs) DeleteCollection(ctx context.Context, opt // Patch applies the patch and returns the patched arangoSchedulerBatchJob. func (c *FakeArangoSchedulerBatchJobs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoSchedulerBatchJob, err error) { + emptyResult := &v1beta1.ArangoSchedulerBatchJob{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangoschedulerbatchjobsResource, c.ns, name, pt, data, subresources...), &v1beta1.ArangoSchedulerBatchJob{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangoschedulerbatchjobsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerBatchJob), err } diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulercronjob.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulercronjob.go index d3866c951..464908721 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulercronjob.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulercronjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangoschedulercronjobsKind = v1beta1.SchemeGroupVersion.WithKind("ArangoSch // Get takes name of the arangoSchedulerCronJob, and returns the corresponding arangoSchedulerCronJob object, and an error if there is any. func (c *FakeArangoSchedulerCronJobs) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ArangoSchedulerCronJob, err error) { + emptyResult := &v1beta1.ArangoSchedulerCronJob{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangoschedulercronjobsResource, c.ns, name), &v1beta1.ArangoSchedulerCronJob{}) + Invokes(testing.NewGetActionWithOptions(arangoschedulercronjobsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerCronJob), err } // List takes label and field selectors, and returns the list of ArangoSchedulerCronJobs that match those selectors. func (c *FakeArangoSchedulerCronJobs) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ArangoSchedulerCronJobList, err error) { + emptyResult := &v1beta1.ArangoSchedulerCronJobList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangoschedulercronjobsResource, arangoschedulercronjobsKind, c.ns, opts), &v1beta1.ArangoSchedulerCronJobList{}) + Invokes(testing.NewListActionWithOptions(arangoschedulercronjobsResource, arangoschedulercronjobsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoSchedulerCronJobs) List(ctx context.Context, opts v1.ListOpti // Watch returns a watch.Interface that watches the requested arangoSchedulerCronJobs. func (c *FakeArangoSchedulerCronJobs) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangoschedulercronjobsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangoschedulercronjobsResource, c.ns, opts)) } // Create takes the representation of a arangoSchedulerCronJob and creates it. Returns the server's representation of the arangoSchedulerCronJob, and an error, if there is any. func (c *FakeArangoSchedulerCronJobs) Create(ctx context.Context, arangoSchedulerCronJob *v1beta1.ArangoSchedulerCronJob, opts v1.CreateOptions) (result *v1beta1.ArangoSchedulerCronJob, err error) { + emptyResult := &v1beta1.ArangoSchedulerCronJob{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangoschedulercronjobsResource, c.ns, arangoSchedulerCronJob), &v1beta1.ArangoSchedulerCronJob{}) + Invokes(testing.NewCreateActionWithOptions(arangoschedulercronjobsResource, c.ns, arangoSchedulerCronJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerCronJob), err } // Update takes the representation of a arangoSchedulerCronJob and updates it. Returns the server's representation of the arangoSchedulerCronJob, and an error, if there is any. func (c *FakeArangoSchedulerCronJobs) Update(ctx context.Context, arangoSchedulerCronJob *v1beta1.ArangoSchedulerCronJob, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerCronJob, err error) { + emptyResult := &v1beta1.ArangoSchedulerCronJob{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangoschedulercronjobsResource, c.ns, arangoSchedulerCronJob), &v1beta1.ArangoSchedulerCronJob{}) + Invokes(testing.NewUpdateActionWithOptions(arangoschedulercronjobsResource, c.ns, arangoSchedulerCronJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerCronJob), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoSchedulerCronJobs) UpdateStatus(ctx context.Context, arangoSchedulerCronJob *v1beta1.ArangoSchedulerCronJob, opts v1.UpdateOptions) (*v1beta1.ArangoSchedulerCronJob, error) { +func (c *FakeArangoSchedulerCronJobs) UpdateStatus(ctx context.Context, arangoSchedulerCronJob *v1beta1.ArangoSchedulerCronJob, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerCronJob, err error) { + emptyResult := &v1beta1.ArangoSchedulerCronJob{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangoschedulercronjobsResource, "status", c.ns, arangoSchedulerCronJob), &v1beta1.ArangoSchedulerCronJob{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangoschedulercronjobsResource, "status", c.ns, arangoSchedulerCronJob, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerCronJob), err } @@ -127,7 +132,7 @@ func (c *FakeArangoSchedulerCronJobs) Delete(ctx context.Context, name string, o // DeleteCollection deletes a collection of objects. func (c *FakeArangoSchedulerCronJobs) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangoschedulercronjobsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangoschedulercronjobsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1beta1.ArangoSchedulerCronJobList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoSchedulerCronJobs) DeleteCollection(ctx context.Context, opts // Patch applies the patch and returns the patched arangoSchedulerCronJob. func (c *FakeArangoSchedulerCronJobs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoSchedulerCronJob, err error) { + emptyResult := &v1beta1.ArangoSchedulerCronJob{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangoschedulercronjobsResource, c.ns, name, pt, data, subresources...), &v1beta1.ArangoSchedulerCronJob{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangoschedulercronjobsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerCronJob), err } diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulerdeployment.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulerdeployment.go index e8c0ba6ab..7bf2625f1 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulerdeployment.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulerdeployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ import ( "context" v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" + autoscalingv1 "k8s.io/api/autoscaling/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" labels "k8s.io/apimachinery/pkg/labels" types "k8s.io/apimachinery/pkg/types" @@ -45,22 +46,24 @@ var arangoschedulerdeploymentsKind = v1beta1.SchemeGroupVersion.WithKind("Arango // Get takes name of the arangoSchedulerDeployment, and returns the corresponding arangoSchedulerDeployment object, and an error if there is any. func (c *FakeArangoSchedulerDeployments) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ArangoSchedulerDeployment, err error) { + emptyResult := &v1beta1.ArangoSchedulerDeployment{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangoschedulerdeploymentsResource, c.ns, name), &v1beta1.ArangoSchedulerDeployment{}) + Invokes(testing.NewGetActionWithOptions(arangoschedulerdeploymentsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerDeployment), err } // List takes label and field selectors, and returns the list of ArangoSchedulerDeployments that match those selectors. func (c *FakeArangoSchedulerDeployments) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ArangoSchedulerDeploymentList, err error) { + emptyResult := &v1beta1.ArangoSchedulerDeploymentList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangoschedulerdeploymentsResource, arangoschedulerdeploymentsKind, c.ns, opts), &v1beta1.ArangoSchedulerDeploymentList{}) + Invokes(testing.NewListActionWithOptions(arangoschedulerdeploymentsResource, arangoschedulerdeploymentsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +82,43 @@ func (c *FakeArangoSchedulerDeployments) List(ctx context.Context, opts v1.ListO // Watch returns a watch.Interface that watches the requested arangoSchedulerDeployments. func (c *FakeArangoSchedulerDeployments) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangoschedulerdeploymentsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangoschedulerdeploymentsResource, c.ns, opts)) } // Create takes the representation of a arangoSchedulerDeployment and creates it. Returns the server's representation of the arangoSchedulerDeployment, and an error, if there is any. func (c *FakeArangoSchedulerDeployments) Create(ctx context.Context, arangoSchedulerDeployment *v1beta1.ArangoSchedulerDeployment, opts v1.CreateOptions) (result *v1beta1.ArangoSchedulerDeployment, err error) { + emptyResult := &v1beta1.ArangoSchedulerDeployment{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangoschedulerdeploymentsResource, c.ns, arangoSchedulerDeployment), &v1beta1.ArangoSchedulerDeployment{}) + Invokes(testing.NewCreateActionWithOptions(arangoschedulerdeploymentsResource, c.ns, arangoSchedulerDeployment, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerDeployment), err } // Update takes the representation of a arangoSchedulerDeployment and updates it. Returns the server's representation of the arangoSchedulerDeployment, and an error, if there is any. func (c *FakeArangoSchedulerDeployments) Update(ctx context.Context, arangoSchedulerDeployment *v1beta1.ArangoSchedulerDeployment, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerDeployment, err error) { + emptyResult := &v1beta1.ArangoSchedulerDeployment{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangoschedulerdeploymentsResource, c.ns, arangoSchedulerDeployment), &v1beta1.ArangoSchedulerDeployment{}) + Invokes(testing.NewUpdateActionWithOptions(arangoschedulerdeploymentsResource, c.ns, arangoSchedulerDeployment, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerDeployment), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoSchedulerDeployments) UpdateStatus(ctx context.Context, arangoSchedulerDeployment *v1beta1.ArangoSchedulerDeployment, opts v1.UpdateOptions) (*v1beta1.ArangoSchedulerDeployment, error) { +func (c *FakeArangoSchedulerDeployments) UpdateStatus(ctx context.Context, arangoSchedulerDeployment *v1beta1.ArangoSchedulerDeployment, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerDeployment, err error) { + emptyResult := &v1beta1.ArangoSchedulerDeployment{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangoschedulerdeploymentsResource, "status", c.ns, arangoSchedulerDeployment), &v1beta1.ArangoSchedulerDeployment{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangoschedulerdeploymentsResource, "status", c.ns, arangoSchedulerDeployment, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerDeployment), err } @@ -127,7 +133,7 @@ func (c *FakeArangoSchedulerDeployments) Delete(ctx context.Context, name string // DeleteCollection deletes a collection of objects. func (c *FakeArangoSchedulerDeployments) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangoschedulerdeploymentsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangoschedulerdeploymentsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1beta1.ArangoSchedulerDeploymentList{}) return err @@ -135,11 +141,36 @@ func (c *FakeArangoSchedulerDeployments) DeleteCollection(ctx context.Context, o // Patch applies the patch and returns the patched arangoSchedulerDeployment. func (c *FakeArangoSchedulerDeployments) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoSchedulerDeployment, err error) { + emptyResult := &v1beta1.ArangoSchedulerDeployment{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangoschedulerdeploymentsResource, c.ns, name, pt, data, subresources...), &v1beta1.ArangoSchedulerDeployment{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangoschedulerdeploymentsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerDeployment), err } + +// GetScale takes name of the arangoSchedulerDeployment, and returns the corresponding scale object, and an error if there is any. +func (c *FakeArangoSchedulerDeployments) GetScale(ctx context.Context, arangoSchedulerDeploymentName string, options v1.GetOptions) (result *autoscalingv1.Scale, err error) { + emptyResult := &autoscalingv1.Scale{} + obj, err := c.Fake. + Invokes(testing.NewGetSubresourceActionWithOptions(arangoschedulerdeploymentsResource, c.ns, "scale", arangoSchedulerDeploymentName, options), emptyResult) + + if obj == nil { + return emptyResult, err + } + return obj.(*autoscalingv1.Scale), err +} + +// UpdateScale takes the representation of a scale and updates it. Returns the server's representation of the scale, and an error, if there is any. +func (c *FakeArangoSchedulerDeployments) UpdateScale(ctx context.Context, arangoSchedulerDeploymentName string, scale *autoscalingv1.Scale, opts v1.UpdateOptions) (result *autoscalingv1.Scale, err error) { + emptyResult := &autoscalingv1.Scale{} + obj, err := c.Fake. + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangoschedulerdeploymentsResource, "scale", c.ns, scale, opts), &autoscalingv1.Scale{}) + + if obj == nil { + return emptyResult, err + } + return obj.(*autoscalingv1.Scale), err +} diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulerpod.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulerpod.go index b9edcc57d..903bffafb 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulerpod.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoschedulerpod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -45,22 +45,24 @@ var arangoschedulerpodsKind = v1beta1.SchemeGroupVersion.WithKind("ArangoSchedul // Get takes name of the arangoSchedulerPod, and returns the corresponding arangoSchedulerPod object, and an error if there is any. func (c *FakeArangoSchedulerPods) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1beta1.ArangoSchedulerPod, err error) { + emptyResult := &v1beta1.ArangoSchedulerPod{} obj, err := c.Fake. - Invokes(testing.NewGetAction(arangoschedulerpodsResource, c.ns, name), &v1beta1.ArangoSchedulerPod{}) + Invokes(testing.NewGetActionWithOptions(arangoschedulerpodsResource, c.ns, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerPod), err } // List takes label and field selectors, and returns the list of ArangoSchedulerPods that match those selectors. func (c *FakeArangoSchedulerPods) List(ctx context.Context, opts v1.ListOptions) (result *v1beta1.ArangoSchedulerPodList, err error) { + emptyResult := &v1beta1.ArangoSchedulerPodList{} obj, err := c.Fake. - Invokes(testing.NewListAction(arangoschedulerpodsResource, arangoschedulerpodsKind, c.ns, opts), &v1beta1.ArangoSchedulerPodList{}) + Invokes(testing.NewListActionWithOptions(arangoschedulerpodsResource, arangoschedulerpodsKind, c.ns, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -79,40 +81,43 @@ func (c *FakeArangoSchedulerPods) List(ctx context.Context, opts v1.ListOptions) // Watch returns a watch.Interface that watches the requested arangoSchedulerPods. func (c *FakeArangoSchedulerPods) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewWatchAction(arangoschedulerpodsResource, c.ns, opts)) + InvokesWatch(testing.NewWatchActionWithOptions(arangoschedulerpodsResource, c.ns, opts)) } // Create takes the representation of a arangoSchedulerPod and creates it. Returns the server's representation of the arangoSchedulerPod, and an error, if there is any. func (c *FakeArangoSchedulerPods) Create(ctx context.Context, arangoSchedulerPod *v1beta1.ArangoSchedulerPod, opts v1.CreateOptions) (result *v1beta1.ArangoSchedulerPod, err error) { + emptyResult := &v1beta1.ArangoSchedulerPod{} obj, err := c.Fake. - Invokes(testing.NewCreateAction(arangoschedulerpodsResource, c.ns, arangoSchedulerPod), &v1beta1.ArangoSchedulerPod{}) + Invokes(testing.NewCreateActionWithOptions(arangoschedulerpodsResource, c.ns, arangoSchedulerPod, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerPod), err } // Update takes the representation of a arangoSchedulerPod and updates it. Returns the server's representation of the arangoSchedulerPod, and an error, if there is any. func (c *FakeArangoSchedulerPods) Update(ctx context.Context, arangoSchedulerPod *v1beta1.ArangoSchedulerPod, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerPod, err error) { + emptyResult := &v1beta1.ArangoSchedulerPod{} obj, err := c.Fake. - Invokes(testing.NewUpdateAction(arangoschedulerpodsResource, c.ns, arangoSchedulerPod), &v1beta1.ArangoSchedulerPod{}) + Invokes(testing.NewUpdateActionWithOptions(arangoschedulerpodsResource, c.ns, arangoSchedulerPod, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerPod), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoSchedulerPods) UpdateStatus(ctx context.Context, arangoSchedulerPod *v1beta1.ArangoSchedulerPod, opts v1.UpdateOptions) (*v1beta1.ArangoSchedulerPod, error) { +func (c *FakeArangoSchedulerPods) UpdateStatus(ctx context.Context, arangoSchedulerPod *v1beta1.ArangoSchedulerPod, opts v1.UpdateOptions) (result *v1beta1.ArangoSchedulerPod, err error) { + emptyResult := &v1beta1.ArangoSchedulerPod{} obj, err := c.Fake. - Invokes(testing.NewUpdateSubresourceAction(arangoschedulerpodsResource, "status", c.ns, arangoSchedulerPod), &v1beta1.ArangoSchedulerPod{}) + Invokes(testing.NewUpdateSubresourceActionWithOptions(arangoschedulerpodsResource, "status", c.ns, arangoSchedulerPod, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerPod), err } @@ -127,7 +132,7 @@ func (c *FakeArangoSchedulerPods) Delete(ctx context.Context, name string, opts // DeleteCollection deletes a collection of objects. func (c *FakeArangoSchedulerPods) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(arangoschedulerpodsResource, c.ns, listOpts) + action := testing.NewDeleteCollectionActionWithOptions(arangoschedulerpodsResource, c.ns, opts, listOpts) _, err := c.Fake.Invokes(action, &v1beta1.ArangoSchedulerPodList{}) return err @@ -135,11 +140,12 @@ func (c *FakeArangoSchedulerPods) DeleteCollection(ctx context.Context, opts v1. // Patch applies the patch and returns the patched arangoSchedulerPod. func (c *FakeArangoSchedulerPods) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1beta1.ArangoSchedulerPod, err error) { + emptyResult := &v1beta1.ArangoSchedulerPod{} obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(arangoschedulerpodsResource, c.ns, name, pt, data, subresources...), &v1beta1.ArangoSchedulerPod{}) + Invokes(testing.NewPatchSubresourceActionWithOptions(arangoschedulerpodsResource, c.ns, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1beta1.ArangoSchedulerPod), err } diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_scheduler_client.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_scheduler_client.go index f6e278220..51977f27f 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_scheduler_client.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_scheduler_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/generated_expansion.go index 7ee5d874a..e31370722 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/generated_expansion.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/scheduler_client.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/scheduler_client.go index ada000f18..8a50fd6eb 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/scheduler_client.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/scheduler_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/storage/v1alpha/arangolocalstorage.go b/pkg/generated/clientset/versioned/typed/storage/v1alpha/arangolocalstorage.go index b6c10ae15..41118b0bd 100644 --- a/pkg/generated/clientset/versioned/typed/storage/v1alpha/arangolocalstorage.go +++ b/pkg/generated/clientset/versioned/typed/storage/v1alpha/arangolocalstorage.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,14 +24,13 @@ package v1alpha import ( "context" - "time" v1alpha "github.com/arangodb/kube-arangodb/pkg/apis/storage/v1alpha" scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" types "k8s.io/apimachinery/pkg/types" watch "k8s.io/apimachinery/pkg/watch" - rest "k8s.io/client-go/rest" + gentype "k8s.io/client-go/gentype" ) // ArangoLocalStoragesGetter has a method to return a ArangoLocalStorageInterface. @@ -44,6 +43,7 @@ type ArangoLocalStoragesGetter interface { type ArangoLocalStorageInterface interface { Create(ctx context.Context, arangoLocalStorage *v1alpha.ArangoLocalStorage, opts v1.CreateOptions) (*v1alpha.ArangoLocalStorage, error) Update(ctx context.Context, arangoLocalStorage *v1alpha.ArangoLocalStorage, opts v1.UpdateOptions) (*v1alpha.ArangoLocalStorage, error) + // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). UpdateStatus(ctx context.Context, arangoLocalStorage *v1alpha.ArangoLocalStorage, opts v1.UpdateOptions) (*v1alpha.ArangoLocalStorage, error) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error @@ -56,133 +56,18 @@ type ArangoLocalStorageInterface interface { // arangoLocalStorages implements ArangoLocalStorageInterface type arangoLocalStorages struct { - client rest.Interface + *gentype.ClientWithList[*v1alpha.ArangoLocalStorage, *v1alpha.ArangoLocalStorageList] } // newArangoLocalStorages returns a ArangoLocalStorages func newArangoLocalStorages(c *StorageV1alphaClient) *arangoLocalStorages { return &arangoLocalStorages{ - client: c.RESTClient(), + gentype.NewClientWithList[*v1alpha.ArangoLocalStorage, *v1alpha.ArangoLocalStorageList]( + "arangolocalstorages", + c.RESTClient(), + scheme.ParameterCodec, + "", + func() *v1alpha.ArangoLocalStorage { return &v1alpha.ArangoLocalStorage{} }, + func() *v1alpha.ArangoLocalStorageList { return &v1alpha.ArangoLocalStorageList{} }), } } - -// Get takes name of the arangoLocalStorage, and returns the corresponding arangoLocalStorage object, and an error if there is any. -func (c *arangoLocalStorages) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha.ArangoLocalStorage, err error) { - result = &v1alpha.ArangoLocalStorage{} - err = c.client.Get(). - Resource("arangolocalstorages"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(ctx). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of ArangoLocalStorages that match those selectors. -func (c *arangoLocalStorages) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha.ArangoLocalStorageList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1alpha.ArangoLocalStorageList{} - err = c.client.Get(). - Resource("arangolocalstorages"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(ctx). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested arangoLocalStorages. -func (c *arangoLocalStorages) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Resource("arangolocalstorages"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch(ctx) -} - -// Create takes the representation of a arangoLocalStorage and creates it. Returns the server's representation of the arangoLocalStorage, and an error, if there is any. -func (c *arangoLocalStorages) Create(ctx context.Context, arangoLocalStorage *v1alpha.ArangoLocalStorage, opts v1.CreateOptions) (result *v1alpha.ArangoLocalStorage, err error) { - result = &v1alpha.ArangoLocalStorage{} - err = c.client.Post(). - Resource("arangolocalstorages"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoLocalStorage). - Do(ctx). - Into(result) - return -} - -// Update takes the representation of a arangoLocalStorage and updates it. Returns the server's representation of the arangoLocalStorage, and an error, if there is any. -func (c *arangoLocalStorages) Update(ctx context.Context, arangoLocalStorage *v1alpha.ArangoLocalStorage, opts v1.UpdateOptions) (result *v1alpha.ArangoLocalStorage, err error) { - result = &v1alpha.ArangoLocalStorage{} - err = c.client.Put(). - Resource("arangolocalstorages"). - Name(arangoLocalStorage.Name). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoLocalStorage). - Do(ctx). - Into(result) - return -} - -// UpdateStatus was generated because the type contains a Status member. -// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *arangoLocalStorages) UpdateStatus(ctx context.Context, arangoLocalStorage *v1alpha.ArangoLocalStorage, opts v1.UpdateOptions) (result *v1alpha.ArangoLocalStorage, err error) { - result = &v1alpha.ArangoLocalStorage{} - err = c.client.Put(). - Resource("arangolocalstorages"). - Name(arangoLocalStorage.Name). - SubResource("status"). - VersionedParams(&opts, scheme.ParameterCodec). - Body(arangoLocalStorage). - Do(ctx). - Into(result) - return -} - -// Delete takes name of the arangoLocalStorage and deletes it. Returns an error if one occurs. -func (c *arangoLocalStorages) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { - return c.client.Delete(). - Resource("arangolocalstorages"). - Name(name). - Body(&opts). - Do(ctx). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *arangoLocalStorages) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - var timeout time.Duration - if listOpts.TimeoutSeconds != nil { - timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Resource("arangolocalstorages"). - VersionedParams(&listOpts, scheme.ParameterCodec). - Timeout(timeout). - Body(&opts). - Do(ctx). - Error() -} - -// Patch applies the patch and returns the patched arangoLocalStorage. -func (c *arangoLocalStorages) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha.ArangoLocalStorage, err error) { - result = &v1alpha.ArangoLocalStorage{} - err = c.client.Patch(pt). - Resource("arangolocalstorages"). - Name(name). - SubResource(subresources...). - VersionedParams(&opts, scheme.ParameterCodec). - Body(data). - Do(ctx). - Into(result) - return -} diff --git a/pkg/generated/clientset/versioned/typed/storage/v1alpha/doc.go b/pkg/generated/clientset/versioned/typed/storage/v1alpha/doc.go index b7dbe04df..cdefc69ca 100644 --- a/pkg/generated/clientset/versioned/typed/storage/v1alpha/doc.go +++ b/pkg/generated/clientset/versioned/typed/storage/v1alpha/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/storage/v1alpha/fake/doc.go b/pkg/generated/clientset/versioned/typed/storage/v1alpha/fake/doc.go index cc487d814..cb60dd032 100644 --- a/pkg/generated/clientset/versioned/typed/storage/v1alpha/fake/doc.go +++ b/pkg/generated/clientset/versioned/typed/storage/v1alpha/fake/doc.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/storage/v1alpha/fake/fake_arangolocalstorage.go b/pkg/generated/clientset/versioned/typed/storage/v1alpha/fake/fake_arangolocalstorage.go index b48c7c513..30ea29267 100644 --- a/pkg/generated/clientset/versioned/typed/storage/v1alpha/fake/fake_arangolocalstorage.go +++ b/pkg/generated/clientset/versioned/typed/storage/v1alpha/fake/fake_arangolocalstorage.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -44,20 +44,22 @@ var arangolocalstoragesKind = v1alpha.SchemeGroupVersion.WithKind("ArangoLocalSt // Get takes name of the arangoLocalStorage, and returns the corresponding arangoLocalStorage object, and an error if there is any. func (c *FakeArangoLocalStorages) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha.ArangoLocalStorage, err error) { + emptyResult := &v1alpha.ArangoLocalStorage{} obj, err := c.Fake. - Invokes(testing.NewRootGetAction(arangolocalstoragesResource, name), &v1alpha.ArangoLocalStorage{}) + Invokes(testing.NewRootGetActionWithOptions(arangolocalstoragesResource, name, options), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha.ArangoLocalStorage), err } // List takes label and field selectors, and returns the list of ArangoLocalStorages that match those selectors. func (c *FakeArangoLocalStorages) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha.ArangoLocalStorageList, err error) { + emptyResult := &v1alpha.ArangoLocalStorageList{} obj, err := c.Fake. - Invokes(testing.NewRootListAction(arangolocalstoragesResource, arangolocalstoragesKind, opts), &v1alpha.ArangoLocalStorageList{}) + Invokes(testing.NewRootListActionWithOptions(arangolocalstoragesResource, arangolocalstoragesKind, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } label, _, _ := testing.ExtractFromListOptions(opts) @@ -76,36 +78,39 @@ func (c *FakeArangoLocalStorages) List(ctx context.Context, opts v1.ListOptions) // Watch returns a watch.Interface that watches the requested arangoLocalStorages. func (c *FakeArangoLocalStorages) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { return c.Fake. - InvokesWatch(testing.NewRootWatchAction(arangolocalstoragesResource, opts)) + InvokesWatch(testing.NewRootWatchActionWithOptions(arangolocalstoragesResource, opts)) } // Create takes the representation of a arangoLocalStorage and creates it. Returns the server's representation of the arangoLocalStorage, and an error, if there is any. func (c *FakeArangoLocalStorages) Create(ctx context.Context, arangoLocalStorage *v1alpha.ArangoLocalStorage, opts v1.CreateOptions) (result *v1alpha.ArangoLocalStorage, err error) { + emptyResult := &v1alpha.ArangoLocalStorage{} obj, err := c.Fake. - Invokes(testing.NewRootCreateAction(arangolocalstoragesResource, arangoLocalStorage), &v1alpha.ArangoLocalStorage{}) + Invokes(testing.NewRootCreateActionWithOptions(arangolocalstoragesResource, arangoLocalStorage, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha.ArangoLocalStorage), err } // Update takes the representation of a arangoLocalStorage and updates it. Returns the server's representation of the arangoLocalStorage, and an error, if there is any. func (c *FakeArangoLocalStorages) Update(ctx context.Context, arangoLocalStorage *v1alpha.ArangoLocalStorage, opts v1.UpdateOptions) (result *v1alpha.ArangoLocalStorage, err error) { + emptyResult := &v1alpha.ArangoLocalStorage{} obj, err := c.Fake. - Invokes(testing.NewRootUpdateAction(arangolocalstoragesResource, arangoLocalStorage), &v1alpha.ArangoLocalStorage{}) + Invokes(testing.NewRootUpdateActionWithOptions(arangolocalstoragesResource, arangoLocalStorage, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha.ArangoLocalStorage), err } // UpdateStatus was generated because the type contains a Status member. // Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). -func (c *FakeArangoLocalStorages) UpdateStatus(ctx context.Context, arangoLocalStorage *v1alpha.ArangoLocalStorage, opts v1.UpdateOptions) (*v1alpha.ArangoLocalStorage, error) { +func (c *FakeArangoLocalStorages) UpdateStatus(ctx context.Context, arangoLocalStorage *v1alpha.ArangoLocalStorage, opts v1.UpdateOptions) (result *v1alpha.ArangoLocalStorage, err error) { + emptyResult := &v1alpha.ArangoLocalStorage{} obj, err := c.Fake. - Invokes(testing.NewRootUpdateSubresourceAction(arangolocalstoragesResource, "status", arangoLocalStorage), &v1alpha.ArangoLocalStorage{}) + Invokes(testing.NewRootUpdateSubresourceActionWithOptions(arangolocalstoragesResource, "status", arangoLocalStorage, opts), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha.ArangoLocalStorage), err } @@ -119,7 +124,7 @@ func (c *FakeArangoLocalStorages) Delete(ctx context.Context, name string, opts // DeleteCollection deletes a collection of objects. func (c *FakeArangoLocalStorages) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { - action := testing.NewRootDeleteCollectionAction(arangolocalstoragesResource, listOpts) + action := testing.NewRootDeleteCollectionActionWithOptions(arangolocalstoragesResource, opts, listOpts) _, err := c.Fake.Invokes(action, &v1alpha.ArangoLocalStorageList{}) return err @@ -127,10 +132,11 @@ func (c *FakeArangoLocalStorages) DeleteCollection(ctx context.Context, opts v1. // Patch applies the patch and returns the patched arangoLocalStorage. func (c *FakeArangoLocalStorages) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha.ArangoLocalStorage, err error) { + emptyResult := &v1alpha.ArangoLocalStorage{} obj, err := c.Fake. - Invokes(testing.NewRootPatchSubresourceAction(arangolocalstoragesResource, name, pt, data, subresources...), &v1alpha.ArangoLocalStorage{}) + Invokes(testing.NewRootPatchSubresourceActionWithOptions(arangolocalstoragesResource, name, pt, data, opts, subresources...), emptyResult) if obj == nil { - return nil, err + return emptyResult, err } return obj.(*v1alpha.ArangoLocalStorage), err } diff --git a/pkg/generated/clientset/versioned/typed/storage/v1alpha/fake/fake_storage_client.go b/pkg/generated/clientset/versioned/typed/storage/v1alpha/fake/fake_storage_client.go index 1b45bbfa6..d93414b92 100644 --- a/pkg/generated/clientset/versioned/typed/storage/v1alpha/fake/fake_storage_client.go +++ b/pkg/generated/clientset/versioned/typed/storage/v1alpha/fake/fake_storage_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/storage/v1alpha/generated_expansion.go b/pkg/generated/clientset/versioned/typed/storage/v1alpha/generated_expansion.go index ce8cd189d..dafca1230 100644 --- a/pkg/generated/clientset/versioned/typed/storage/v1alpha/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/storage/v1alpha/generated_expansion.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/clientset/versioned/typed/storage/v1alpha/storage_client.go b/pkg/generated/clientset/versioned/typed/storage/v1alpha/storage_client.go index 7c6f86260..bd05b2d73 100644 --- a/pkg/generated/clientset/versioned/typed/storage/v1alpha/storage_client.go +++ b/pkg/generated/clientset/versioned/typed/storage/v1alpha/storage_client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/analytics/interface.go b/pkg/generated/informers/externalversions/analytics/interface.go index 6f7d6b64c..dce6d1722 100644 --- a/pkg/generated/informers/externalversions/analytics/interface.go +++ b/pkg/generated/informers/externalversions/analytics/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/analytics/v1alpha1/graphanalyticsengine.go b/pkg/generated/informers/externalversions/analytics/v1alpha1/graphanalyticsengine.go index 0f1762e69..ba19078e6 100644 --- a/pkg/generated/informers/externalversions/analytics/v1alpha1/graphanalyticsengine.go +++ b/pkg/generated/informers/externalversions/analytics/v1alpha1/graphanalyticsengine.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/analytics/v1alpha1/interface.go b/pkg/generated/informers/externalversions/analytics/v1alpha1/interface.go index 85661b57c..e51cd0bee 100644 --- a/pkg/generated/informers/externalversions/analytics/v1alpha1/interface.go +++ b/pkg/generated/informers/externalversions/analytics/v1alpha1/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/apps/interface.go b/pkg/generated/informers/externalversions/apps/interface.go index 2ba09eff5..d10b0eb5b 100644 --- a/pkg/generated/informers/externalversions/apps/interface.go +++ b/pkg/generated/informers/externalversions/apps/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/apps/v1/arangojob.go b/pkg/generated/informers/externalversions/apps/v1/arangojob.go index 560b314f5..514b38ecb 100644 --- a/pkg/generated/informers/externalversions/apps/v1/arangojob.go +++ b/pkg/generated/informers/externalversions/apps/v1/arangojob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/apps/v1/interface.go b/pkg/generated/informers/externalversions/apps/v1/interface.go index 393da76d9..7c02099b5 100644 --- a/pkg/generated/informers/externalversions/apps/v1/interface.go +++ b/pkg/generated/informers/externalversions/apps/v1/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/backup/interface.go b/pkg/generated/informers/externalversions/backup/interface.go index b2d986cd2..17d56c649 100644 --- a/pkg/generated/informers/externalversions/backup/interface.go +++ b/pkg/generated/informers/externalversions/backup/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/backup/v1/arangobackup.go b/pkg/generated/informers/externalversions/backup/v1/arangobackup.go index 1e9fae6a7..aab5d2564 100644 --- a/pkg/generated/informers/externalversions/backup/v1/arangobackup.go +++ b/pkg/generated/informers/externalversions/backup/v1/arangobackup.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/backup/v1/arangobackuppolicy.go b/pkg/generated/informers/externalversions/backup/v1/arangobackuppolicy.go index e6e1fbc4c..594b9162b 100644 --- a/pkg/generated/informers/externalversions/backup/v1/arangobackuppolicy.go +++ b/pkg/generated/informers/externalversions/backup/v1/arangobackuppolicy.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/backup/v1/interface.go b/pkg/generated/informers/externalversions/backup/v1/interface.go index 173e22148..db1a8a243 100644 --- a/pkg/generated/informers/externalversions/backup/v1/interface.go +++ b/pkg/generated/informers/externalversions/backup/v1/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/deployment/interface.go b/pkg/generated/informers/externalversions/deployment/interface.go index fa78d13db..f1564a7e7 100644 --- a/pkg/generated/informers/externalversions/deployment/interface.go +++ b/pkg/generated/informers/externalversions/deployment/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/deployment/v1/arangoclustersynchronization.go b/pkg/generated/informers/externalversions/deployment/v1/arangoclustersynchronization.go index cdcdeaefd..1fa3ac9c4 100644 --- a/pkg/generated/informers/externalversions/deployment/v1/arangoclustersynchronization.go +++ b/pkg/generated/informers/externalversions/deployment/v1/arangoclustersynchronization.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/deployment/v1/arangodeployment.go b/pkg/generated/informers/externalversions/deployment/v1/arangodeployment.go index 857d1b2b7..b68315fa1 100644 --- a/pkg/generated/informers/externalversions/deployment/v1/arangodeployment.go +++ b/pkg/generated/informers/externalversions/deployment/v1/arangodeployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/deployment/v1/arangomember.go b/pkg/generated/informers/externalversions/deployment/v1/arangomember.go index ab15641f5..9c88ef573 100644 --- a/pkg/generated/informers/externalversions/deployment/v1/arangomember.go +++ b/pkg/generated/informers/externalversions/deployment/v1/arangomember.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/deployment/v1/arangotask.go b/pkg/generated/informers/externalversions/deployment/v1/arangotask.go index b8937e352..c9c749f3d 100644 --- a/pkg/generated/informers/externalversions/deployment/v1/arangotask.go +++ b/pkg/generated/informers/externalversions/deployment/v1/arangotask.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/deployment/v1/interface.go b/pkg/generated/informers/externalversions/deployment/v1/interface.go index 5a5106c27..a48f5a429 100644 --- a/pkg/generated/informers/externalversions/deployment/v1/interface.go +++ b/pkg/generated/informers/externalversions/deployment/v1/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/deployment/v2alpha1/arangoclustersynchronization.go b/pkg/generated/informers/externalversions/deployment/v2alpha1/arangoclustersynchronization.go index bf323e123..b99816ac6 100644 --- a/pkg/generated/informers/externalversions/deployment/v2alpha1/arangoclustersynchronization.go +++ b/pkg/generated/informers/externalversions/deployment/v2alpha1/arangoclustersynchronization.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/deployment/v2alpha1/arangodeployment.go b/pkg/generated/informers/externalversions/deployment/v2alpha1/arangodeployment.go index d650d2ef9..8187716c3 100644 --- a/pkg/generated/informers/externalversions/deployment/v2alpha1/arangodeployment.go +++ b/pkg/generated/informers/externalversions/deployment/v2alpha1/arangodeployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/deployment/v2alpha1/arangomember.go b/pkg/generated/informers/externalversions/deployment/v2alpha1/arangomember.go index bdc758bb7..947fb28b4 100644 --- a/pkg/generated/informers/externalversions/deployment/v2alpha1/arangomember.go +++ b/pkg/generated/informers/externalversions/deployment/v2alpha1/arangomember.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/deployment/v2alpha1/arangotask.go b/pkg/generated/informers/externalversions/deployment/v2alpha1/arangotask.go index c39a60a89..3a91d64fb 100644 --- a/pkg/generated/informers/externalversions/deployment/v2alpha1/arangotask.go +++ b/pkg/generated/informers/externalversions/deployment/v2alpha1/arangotask.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/deployment/v2alpha1/interface.go b/pkg/generated/informers/externalversions/deployment/v2alpha1/interface.go index 51794bc9d..ecbb8e3c2 100644 --- a/pkg/generated/informers/externalversions/deployment/v2alpha1/interface.go +++ b/pkg/generated/informers/externalversions/deployment/v2alpha1/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/factory.go b/pkg/generated/informers/externalversions/factory.go index 180f55ea6..ebce53c58 100644 --- a/pkg/generated/informers/externalversions/factory.go +++ b/pkg/generated/informers/externalversions/factory.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -35,6 +35,7 @@ import ( internalinterfaces "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/internalinterfaces" ml "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/ml" networking "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/networking" + platform "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/platform" replication "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/replication" scheduler "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/scheduler" storage "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/storage" @@ -240,6 +241,7 @@ type SharedInformerFactory interface { // Start initializes all requested informers. They are handled in goroutines // which run until the stop channel gets closed. + // Warning: Start does not block. When run in a go-routine, it will race with a later WaitForCacheSync. Start(stopCh <-chan struct{}) // Shutdown marks a factory as shutting down. At that point no new @@ -271,6 +273,7 @@ type SharedInformerFactory interface { Database() deployment.Interface Ml() ml.Interface Networking() networking.Interface + Platform() platform.Interface Replication() replication.Interface Scheduler() scheduler.Interface Storage() storage.Interface @@ -300,6 +303,10 @@ func (f *sharedInformerFactory) Networking() networking.Interface { return networking.New(f, f.namespace, f.tweakListOptions) } +func (f *sharedInformerFactory) Platform() platform.Interface { + return platform.New(f, f.namespace, f.tweakListOptions) +} + func (f *sharedInformerFactory) Replication() replication.Interface { return replication.New(f, f.namespace, f.tweakListOptions) } diff --git a/pkg/generated/informers/externalversions/generic.go b/pkg/generated/informers/externalversions/generic.go index 1dabd1a59..891e8e5d2 100644 --- a/pkg/generated/informers/externalversions/generic.go +++ b/pkg/generated/informers/externalversions/generic.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -33,6 +33,7 @@ import ( mlv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" networkingv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" + platformv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" replicationv1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v1" replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1" schedulerv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1" @@ -122,6 +123,12 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource case networkingv1alpha1.SchemeGroupVersion.WithResource("arangoroutes"): return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1alpha1().ArangoRoutes().Informer()}, nil + // Group=platform.arangodb.com, Version=v1alpha1 + case platformv1alpha1.SchemeGroupVersion.WithResource("arangoplatformcharts"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Platform().V1alpha1().ArangoPlatformCharts().Informer()}, nil + case platformv1alpha1.SchemeGroupVersion.WithResource("arangoplatformstorages"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Platform().V1alpha1().ArangoPlatformStorages().Informer()}, nil + // Group=replication.database.arangodb.com, Version=v1 case replicationv1.SchemeGroupVersion.WithResource("arangodeploymentreplications"): return &genericInformer{resource: resource.GroupResource(), informer: f.Replication().V1().ArangoDeploymentReplications().Informer()}, nil diff --git a/pkg/generated/informers/externalversions/internalinterfaces/factory_interfaces.go b/pkg/generated/informers/externalversions/internalinterfaces/factory_interfaces.go index 8f59bd1ba..605684eb0 100644 --- a/pkg/generated/informers/externalversions/internalinterfaces/factory_interfaces.go +++ b/pkg/generated/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/ml/interface.go b/pkg/generated/informers/externalversions/ml/interface.go index 3d20a3e01..0d88f5ae2 100644 --- a/pkg/generated/informers/externalversions/ml/interface.go +++ b/pkg/generated/informers/externalversions/ml/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlbatchjob.go b/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlbatchjob.go index 6a47a5322..47dbf6d44 100644 --- a/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlbatchjob.go +++ b/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlbatchjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlcronjob.go b/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlcronjob.go index fa6552cf7..538917604 100644 --- a/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlcronjob.go +++ b/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlcronjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlextension.go b/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlextension.go index a4d3c562a..a36b8eb8c 100644 --- a/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlextension.go +++ b/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlextension.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlstorage.go b/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlstorage.go index 495c30ff8..cec4c71ac 100644 --- a/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlstorage.go +++ b/pkg/generated/informers/externalversions/ml/v1alpha1/arangomlstorage.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/ml/v1alpha1/interface.go b/pkg/generated/informers/externalversions/ml/v1alpha1/interface.go index 2a931b5fc..2db455a0c 100644 --- a/pkg/generated/informers/externalversions/ml/v1alpha1/interface.go +++ b/pkg/generated/informers/externalversions/ml/v1alpha1/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/ml/v1beta1/arangomlextension.go b/pkg/generated/informers/externalversions/ml/v1beta1/arangomlextension.go index 845de2eba..cd5605173 100644 --- a/pkg/generated/informers/externalversions/ml/v1beta1/arangomlextension.go +++ b/pkg/generated/informers/externalversions/ml/v1beta1/arangomlextension.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/ml/v1beta1/arangomlstorage.go b/pkg/generated/informers/externalversions/ml/v1beta1/arangomlstorage.go index ab518348a..bd2bc6418 100644 --- a/pkg/generated/informers/externalversions/ml/v1beta1/arangomlstorage.go +++ b/pkg/generated/informers/externalversions/ml/v1beta1/arangomlstorage.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/ml/v1beta1/interface.go b/pkg/generated/informers/externalversions/ml/v1beta1/interface.go index fa7d3fe91..9dbc9bb0b 100644 --- a/pkg/generated/informers/externalversions/ml/v1beta1/interface.go +++ b/pkg/generated/informers/externalversions/ml/v1beta1/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/networking/interface.go b/pkg/generated/informers/externalversions/networking/interface.go index 2013452d9..f1183d14e 100644 --- a/pkg/generated/informers/externalversions/networking/interface.go +++ b/pkg/generated/informers/externalversions/networking/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/networking/v1alpha1/arangoroute.go b/pkg/generated/informers/externalversions/networking/v1alpha1/arangoroute.go index 6544ecae6..ca4451464 100644 --- a/pkg/generated/informers/externalversions/networking/v1alpha1/arangoroute.go +++ b/pkg/generated/informers/externalversions/networking/v1alpha1/arangoroute.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/networking/v1alpha1/interface.go b/pkg/generated/informers/externalversions/networking/v1alpha1/interface.go index 316876c87..0515916c7 100644 --- a/pkg/generated/informers/externalversions/networking/v1alpha1/interface.go +++ b/pkg/generated/informers/externalversions/networking/v1alpha1/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/platform/interface.go b/pkg/generated/informers/externalversions/platform/interface.go new file mode 100644 index 000000000..013b8b853 --- /dev/null +++ b/pkg/generated/informers/externalversions/platform/interface.go @@ -0,0 +1,50 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by informer-gen. DO NOT EDIT. + +package platform + +import ( + internalinterfaces "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/internalinterfaces" + v1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/platform/v1alpha1" +) + +// Interface provides access to each of this group's versions. +type Interface interface { + // V1alpha1 provides access to shared informers for resources in V1alpha1. + V1alpha1() v1alpha1.Interface +} + +type group struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &group{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// V1alpha1 returns a new v1alpha1.Interface. +func (g *group) V1alpha1() v1alpha1.Interface { + return v1alpha1.New(g.factory, g.namespace, g.tweakListOptions) +} diff --git a/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformchart.go b/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformchart.go new file mode 100644 index 000000000..b1d2bf506 --- /dev/null +++ b/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformchart.go @@ -0,0 +1,94 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by informer-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "context" + time "time" + + platformv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + versioned "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned" + internalinterfaces "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/internalinterfaces" + v1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/listers/platform/v1alpha1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// ArangoPlatformChartInformer provides access to a shared informer and lister for +// ArangoPlatformCharts. +type ArangoPlatformChartInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1alpha1.ArangoPlatformChartLister +} + +type arangoPlatformChartInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewArangoPlatformChartInformer constructs a new informer for ArangoPlatformChart type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewArangoPlatformChartInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredArangoPlatformChartInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredArangoPlatformChartInformer constructs a new informer for ArangoPlatformChart type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredArangoPlatformChartInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.PlatformV1alpha1().ArangoPlatformCharts(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.PlatformV1alpha1().ArangoPlatformCharts(namespace).Watch(context.TODO(), options) + }, + }, + &platformv1alpha1.ArangoPlatformChart{}, + resyncPeriod, + indexers, + ) +} + +func (f *arangoPlatformChartInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredArangoPlatformChartInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *arangoPlatformChartInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&platformv1alpha1.ArangoPlatformChart{}, f.defaultInformer) +} + +func (f *arangoPlatformChartInformer) Lister() v1alpha1.ArangoPlatformChartLister { + return v1alpha1.NewArangoPlatformChartLister(f.Informer().GetIndexer()) +} diff --git a/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformstorage.go b/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformstorage.go new file mode 100644 index 000000000..db7270268 --- /dev/null +++ b/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformstorage.go @@ -0,0 +1,94 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by informer-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "context" + time "time" + + platformv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + versioned "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned" + internalinterfaces "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/internalinterfaces" + v1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/listers/platform/v1alpha1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + cache "k8s.io/client-go/tools/cache" +) + +// ArangoPlatformStorageInformer provides access to a shared informer and lister for +// ArangoPlatformStorages. +type ArangoPlatformStorageInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1alpha1.ArangoPlatformStorageLister +} + +type arangoPlatformStorageInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc + namespace string +} + +// NewArangoPlatformStorageInformer constructs a new informer for ArangoPlatformStorage type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewArangoPlatformStorageInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredArangoPlatformStorageInformer(client, namespace, resyncPeriod, indexers, nil) +} + +// NewFilteredArangoPlatformStorageInformer constructs a new informer for ArangoPlatformStorage type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredArangoPlatformStorageInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options v1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.PlatformV1alpha1().ArangoPlatformStorages(namespace).List(context.TODO(), options) + }, + WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.PlatformV1alpha1().ArangoPlatformStorages(namespace).Watch(context.TODO(), options) + }, + }, + &platformv1alpha1.ArangoPlatformStorage{}, + resyncPeriod, + indexers, + ) +} + +func (f *arangoPlatformStorageInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredArangoPlatformStorageInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) +} + +func (f *arangoPlatformStorageInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&platformv1alpha1.ArangoPlatformStorage{}, f.defaultInformer) +} + +func (f *arangoPlatformStorageInformer) Lister() v1alpha1.ArangoPlatformStorageLister { + return v1alpha1.NewArangoPlatformStorageLister(f.Informer().GetIndexer()) +} diff --git a/pkg/generated/informers/externalversions/platform/v1alpha1/interface.go b/pkg/generated/informers/externalversions/platform/v1alpha1/interface.go new file mode 100644 index 000000000..1b54a3fc4 --- /dev/null +++ b/pkg/generated/informers/externalversions/platform/v1alpha1/interface.go @@ -0,0 +1,56 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by informer-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + internalinterfaces "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/internalinterfaces" +) + +// Interface provides access to all the informers in this group version. +type Interface interface { + // ArangoPlatformCharts returns a ArangoPlatformChartInformer. + ArangoPlatformCharts() ArangoPlatformChartInformer + // ArangoPlatformStorages returns a ArangoPlatformStorageInformer. + ArangoPlatformStorages() ArangoPlatformStorageInformer +} + +type version struct { + factory internalinterfaces.SharedInformerFactory + namespace string + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// New returns a new Interface. +func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakListOptions internalinterfaces.TweakListOptionsFunc) Interface { + return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions} +} + +// ArangoPlatformCharts returns a ArangoPlatformChartInformer. +func (v *version) ArangoPlatformCharts() ArangoPlatformChartInformer { + return &arangoPlatformChartInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} + +// ArangoPlatformStorages returns a ArangoPlatformStorageInformer. +func (v *version) ArangoPlatformStorages() ArangoPlatformStorageInformer { + return &arangoPlatformStorageInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} +} diff --git a/pkg/generated/informers/externalversions/replication/interface.go b/pkg/generated/informers/externalversions/replication/interface.go index 14edc318a..f1cc2d087 100644 --- a/pkg/generated/informers/externalversions/replication/interface.go +++ b/pkg/generated/informers/externalversions/replication/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/replication/v1/arangodeploymentreplication.go b/pkg/generated/informers/externalversions/replication/v1/arangodeploymentreplication.go index bd929d8fb..36c0503b9 100644 --- a/pkg/generated/informers/externalversions/replication/v1/arangodeploymentreplication.go +++ b/pkg/generated/informers/externalversions/replication/v1/arangodeploymentreplication.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/replication/v1/interface.go b/pkg/generated/informers/externalversions/replication/v1/interface.go index e59b6c3be..55257e1ee 100644 --- a/pkg/generated/informers/externalversions/replication/v1/interface.go +++ b/pkg/generated/informers/externalversions/replication/v1/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/replication/v2alpha1/arangodeploymentreplication.go b/pkg/generated/informers/externalversions/replication/v2alpha1/arangodeploymentreplication.go index ab67289f9..798152461 100644 --- a/pkg/generated/informers/externalversions/replication/v2alpha1/arangodeploymentreplication.go +++ b/pkg/generated/informers/externalversions/replication/v2alpha1/arangodeploymentreplication.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/replication/v2alpha1/interface.go b/pkg/generated/informers/externalversions/replication/v2alpha1/interface.go index 6cc5232a4..e760c9567 100644 --- a/pkg/generated/informers/externalversions/replication/v2alpha1/interface.go +++ b/pkg/generated/informers/externalversions/replication/v2alpha1/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/scheduler/interface.go b/pkg/generated/informers/externalversions/scheduler/interface.go index 7d276ad87..0b7a90417 100644 --- a/pkg/generated/informers/externalversions/scheduler/interface.go +++ b/pkg/generated/informers/externalversions/scheduler/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/scheduler/v1alpha1/arangoprofile.go b/pkg/generated/informers/externalversions/scheduler/v1alpha1/arangoprofile.go index 05c628e69..5c3b99779 100644 --- a/pkg/generated/informers/externalversions/scheduler/v1alpha1/arangoprofile.go +++ b/pkg/generated/informers/externalversions/scheduler/v1alpha1/arangoprofile.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/scheduler/v1alpha1/interface.go b/pkg/generated/informers/externalversions/scheduler/v1alpha1/interface.go index c55e20f3c..a8c5f6ad8 100644 --- a/pkg/generated/informers/externalversions/scheduler/v1alpha1/interface.go +++ b/pkg/generated/informers/externalversions/scheduler/v1alpha1/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoprofile.go b/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoprofile.go index b201f39ac..bc909cc96 100644 --- a/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoprofile.go +++ b/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoprofile.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulerbatchjob.go b/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulerbatchjob.go index fc93eea7e..919619569 100644 --- a/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulerbatchjob.go +++ b/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulerbatchjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulercronjob.go b/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulercronjob.go index 59b27a269..d3aa80077 100644 --- a/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulercronjob.go +++ b/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulercronjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulerdeployment.go b/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulerdeployment.go index 214fe6e08..be87f8d18 100644 --- a/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulerdeployment.go +++ b/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulerdeployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulerpod.go b/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulerpod.go index 9c302b729..58d966c25 100644 --- a/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulerpod.go +++ b/pkg/generated/informers/externalversions/scheduler/v1beta1/arangoschedulerpod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/scheduler/v1beta1/interface.go b/pkg/generated/informers/externalversions/scheduler/v1beta1/interface.go index 94009ca55..03947a42f 100644 --- a/pkg/generated/informers/externalversions/scheduler/v1beta1/interface.go +++ b/pkg/generated/informers/externalversions/scheduler/v1beta1/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/storage/interface.go b/pkg/generated/informers/externalversions/storage/interface.go index e509f917f..4cefbebac 100644 --- a/pkg/generated/informers/externalversions/storage/interface.go +++ b/pkg/generated/informers/externalversions/storage/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/storage/v1alpha/arangolocalstorage.go b/pkg/generated/informers/externalversions/storage/v1alpha/arangolocalstorage.go index bea4c8274..347da4227 100644 --- a/pkg/generated/informers/externalversions/storage/v1alpha/arangolocalstorage.go +++ b/pkg/generated/informers/externalversions/storage/v1alpha/arangolocalstorage.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/informers/externalversions/storage/v1alpha/interface.go b/pkg/generated/informers/externalversions/storage/v1alpha/interface.go index a472b72c0..d55e72b4a 100644 --- a/pkg/generated/informers/externalversions/storage/v1alpha/interface.go +++ b/pkg/generated/informers/externalversions/storage/v1alpha/interface.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/listers/analytics/v1alpha1/expansion_generated.go b/pkg/generated/listers/analytics/v1alpha1/expansion_generated.go index eb4ab75b3..36b8271c5 100644 --- a/pkg/generated/listers/analytics/v1alpha1/expansion_generated.go +++ b/pkg/generated/listers/analytics/v1alpha1/expansion_generated.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/listers/analytics/v1alpha1/graphanalyticsengine.go b/pkg/generated/listers/analytics/v1alpha1/graphanalyticsengine.go index 5c6596981..5a6a12bd4 100644 --- a/pkg/generated/listers/analytics/v1alpha1/graphanalyticsengine.go +++ b/pkg/generated/listers/analytics/v1alpha1/graphanalyticsengine.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1alpha1 import ( v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type GraphAnalyticsEngineLister interface { // graphAnalyticsEngineLister implements the GraphAnalyticsEngineLister interface. type graphAnalyticsEngineLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1alpha1.GraphAnalyticsEngine] } // NewGraphAnalyticsEngineLister returns a new GraphAnalyticsEngineLister. func NewGraphAnalyticsEngineLister(indexer cache.Indexer) GraphAnalyticsEngineLister { - return &graphAnalyticsEngineLister{indexer: indexer} -} - -// List lists all GraphAnalyticsEngines in the indexer. -func (s *graphAnalyticsEngineLister) List(selector labels.Selector) (ret []*v1alpha1.GraphAnalyticsEngine, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.GraphAnalyticsEngine)) - }) - return ret, err + return &graphAnalyticsEngineLister{listers.New[*v1alpha1.GraphAnalyticsEngine](indexer, v1alpha1.Resource("graphanalyticsengine"))} } // GraphAnalyticsEngines returns an object that can list and get GraphAnalyticsEngines. func (s *graphAnalyticsEngineLister) GraphAnalyticsEngines(namespace string) GraphAnalyticsEngineNamespaceLister { - return graphAnalyticsEngineNamespaceLister{indexer: s.indexer, namespace: namespace} + return graphAnalyticsEngineNamespaceLister{listers.NewNamespaced[*v1alpha1.GraphAnalyticsEngine](s.ResourceIndexer, namespace)} } // GraphAnalyticsEngineNamespaceLister helps list and get GraphAnalyticsEngines. @@ -78,26 +70,5 @@ type GraphAnalyticsEngineNamespaceLister interface { // graphAnalyticsEngineNamespaceLister implements the GraphAnalyticsEngineNamespaceLister // interface. type graphAnalyticsEngineNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all GraphAnalyticsEngines in the indexer for a given namespace. -func (s graphAnalyticsEngineNamespaceLister) List(selector labels.Selector) (ret []*v1alpha1.GraphAnalyticsEngine, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.GraphAnalyticsEngine)) - }) - return ret, err -} - -// Get retrieves the GraphAnalyticsEngine from the indexer for a given namespace and name. -func (s graphAnalyticsEngineNamespaceLister) Get(name string) (*v1alpha1.GraphAnalyticsEngine, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1alpha1.Resource("graphanalyticsengine"), name) - } - return obj.(*v1alpha1.GraphAnalyticsEngine), nil + listers.ResourceIndexer[*v1alpha1.GraphAnalyticsEngine] } diff --git a/pkg/generated/listers/apps/v1/arangojob.go b/pkg/generated/listers/apps/v1/arangojob.go index cb42726f0..f7aad82be 100644 --- a/pkg/generated/listers/apps/v1/arangojob.go +++ b/pkg/generated/listers/apps/v1/arangojob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1 import ( v1 "github.com/arangodb/kube-arangodb/pkg/apis/apps/v1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoJobLister interface { // arangoJobLister implements the ArangoJobLister interface. type arangoJobLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1.ArangoJob] } // NewArangoJobLister returns a new ArangoJobLister. func NewArangoJobLister(indexer cache.Indexer) ArangoJobLister { - return &arangoJobLister{indexer: indexer} -} - -// List lists all ArangoJobs in the indexer. -func (s *arangoJobLister) List(selector labels.Selector) (ret []*v1.ArangoJob, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoJob)) - }) - return ret, err + return &arangoJobLister{listers.New[*v1.ArangoJob](indexer, v1.Resource("arangojob"))} } // ArangoJobs returns an object that can list and get ArangoJobs. func (s *arangoJobLister) ArangoJobs(namespace string) ArangoJobNamespaceLister { - return arangoJobNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoJobNamespaceLister{listers.NewNamespaced[*v1.ArangoJob](s.ResourceIndexer, namespace)} } // ArangoJobNamespaceLister helps list and get ArangoJobs. @@ -78,26 +70,5 @@ type ArangoJobNamespaceLister interface { // arangoJobNamespaceLister implements the ArangoJobNamespaceLister // interface. type arangoJobNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoJobs in the indexer for a given namespace. -func (s arangoJobNamespaceLister) List(selector labels.Selector) (ret []*v1.ArangoJob, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoJob)) - }) - return ret, err -} - -// Get retrieves the ArangoJob from the indexer for a given namespace and name. -func (s arangoJobNamespaceLister) Get(name string) (*v1.ArangoJob, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1.Resource("arangojob"), name) - } - return obj.(*v1.ArangoJob), nil + listers.ResourceIndexer[*v1.ArangoJob] } diff --git a/pkg/generated/listers/apps/v1/expansion_generated.go b/pkg/generated/listers/apps/v1/expansion_generated.go index a7f4d2ab7..3992b03a6 100644 --- a/pkg/generated/listers/apps/v1/expansion_generated.go +++ b/pkg/generated/listers/apps/v1/expansion_generated.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/listers/backup/v1/arangobackup.go b/pkg/generated/listers/backup/v1/arangobackup.go index 9513ff225..becc235fe 100644 --- a/pkg/generated/listers/backup/v1/arangobackup.go +++ b/pkg/generated/listers/backup/v1/arangobackup.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1 import ( v1 "github.com/arangodb/kube-arangodb/pkg/apis/backup/v1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoBackupLister interface { // arangoBackupLister implements the ArangoBackupLister interface. type arangoBackupLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1.ArangoBackup] } // NewArangoBackupLister returns a new ArangoBackupLister. func NewArangoBackupLister(indexer cache.Indexer) ArangoBackupLister { - return &arangoBackupLister{indexer: indexer} -} - -// List lists all ArangoBackups in the indexer. -func (s *arangoBackupLister) List(selector labels.Selector) (ret []*v1.ArangoBackup, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoBackup)) - }) - return ret, err + return &arangoBackupLister{listers.New[*v1.ArangoBackup](indexer, v1.Resource("arangobackup"))} } // ArangoBackups returns an object that can list and get ArangoBackups. func (s *arangoBackupLister) ArangoBackups(namespace string) ArangoBackupNamespaceLister { - return arangoBackupNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoBackupNamespaceLister{listers.NewNamespaced[*v1.ArangoBackup](s.ResourceIndexer, namespace)} } // ArangoBackupNamespaceLister helps list and get ArangoBackups. @@ -78,26 +70,5 @@ type ArangoBackupNamespaceLister interface { // arangoBackupNamespaceLister implements the ArangoBackupNamespaceLister // interface. type arangoBackupNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoBackups in the indexer for a given namespace. -func (s arangoBackupNamespaceLister) List(selector labels.Selector) (ret []*v1.ArangoBackup, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoBackup)) - }) - return ret, err -} - -// Get retrieves the ArangoBackup from the indexer for a given namespace and name. -func (s arangoBackupNamespaceLister) Get(name string) (*v1.ArangoBackup, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1.Resource("arangobackup"), name) - } - return obj.(*v1.ArangoBackup), nil + listers.ResourceIndexer[*v1.ArangoBackup] } diff --git a/pkg/generated/listers/backup/v1/arangobackuppolicy.go b/pkg/generated/listers/backup/v1/arangobackuppolicy.go index 1fb73f4e4..20b663bb4 100644 --- a/pkg/generated/listers/backup/v1/arangobackuppolicy.go +++ b/pkg/generated/listers/backup/v1/arangobackuppolicy.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1 import ( v1 "github.com/arangodb/kube-arangodb/pkg/apis/backup/v1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoBackupPolicyLister interface { // arangoBackupPolicyLister implements the ArangoBackupPolicyLister interface. type arangoBackupPolicyLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1.ArangoBackupPolicy] } // NewArangoBackupPolicyLister returns a new ArangoBackupPolicyLister. func NewArangoBackupPolicyLister(indexer cache.Indexer) ArangoBackupPolicyLister { - return &arangoBackupPolicyLister{indexer: indexer} -} - -// List lists all ArangoBackupPolicies in the indexer. -func (s *arangoBackupPolicyLister) List(selector labels.Selector) (ret []*v1.ArangoBackupPolicy, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoBackupPolicy)) - }) - return ret, err + return &arangoBackupPolicyLister{listers.New[*v1.ArangoBackupPolicy](indexer, v1.Resource("arangobackuppolicy"))} } // ArangoBackupPolicies returns an object that can list and get ArangoBackupPolicies. func (s *arangoBackupPolicyLister) ArangoBackupPolicies(namespace string) ArangoBackupPolicyNamespaceLister { - return arangoBackupPolicyNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoBackupPolicyNamespaceLister{listers.NewNamespaced[*v1.ArangoBackupPolicy](s.ResourceIndexer, namespace)} } // ArangoBackupPolicyNamespaceLister helps list and get ArangoBackupPolicies. @@ -78,26 +70,5 @@ type ArangoBackupPolicyNamespaceLister interface { // arangoBackupPolicyNamespaceLister implements the ArangoBackupPolicyNamespaceLister // interface. type arangoBackupPolicyNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoBackupPolicies in the indexer for a given namespace. -func (s arangoBackupPolicyNamespaceLister) List(selector labels.Selector) (ret []*v1.ArangoBackupPolicy, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoBackupPolicy)) - }) - return ret, err -} - -// Get retrieves the ArangoBackupPolicy from the indexer for a given namespace and name. -func (s arangoBackupPolicyNamespaceLister) Get(name string) (*v1.ArangoBackupPolicy, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1.Resource("arangobackuppolicy"), name) - } - return obj.(*v1.ArangoBackupPolicy), nil + listers.ResourceIndexer[*v1.ArangoBackupPolicy] } diff --git a/pkg/generated/listers/backup/v1/expansion_generated.go b/pkg/generated/listers/backup/v1/expansion_generated.go index 92d39d4c8..4ef919fb0 100644 --- a/pkg/generated/listers/backup/v1/expansion_generated.go +++ b/pkg/generated/listers/backup/v1/expansion_generated.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/listers/deployment/v1/arangoclustersynchronization.go b/pkg/generated/listers/deployment/v1/arangoclustersynchronization.go index c4cb3a81c..6029d07d6 100644 --- a/pkg/generated/listers/deployment/v1/arangoclustersynchronization.go +++ b/pkg/generated/listers/deployment/v1/arangoclustersynchronization.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1 import ( v1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoClusterSynchronizationLister interface { // arangoClusterSynchronizationLister implements the ArangoClusterSynchronizationLister interface. type arangoClusterSynchronizationLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1.ArangoClusterSynchronization] } // NewArangoClusterSynchronizationLister returns a new ArangoClusterSynchronizationLister. func NewArangoClusterSynchronizationLister(indexer cache.Indexer) ArangoClusterSynchronizationLister { - return &arangoClusterSynchronizationLister{indexer: indexer} -} - -// List lists all ArangoClusterSynchronizations in the indexer. -func (s *arangoClusterSynchronizationLister) List(selector labels.Selector) (ret []*v1.ArangoClusterSynchronization, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoClusterSynchronization)) - }) - return ret, err + return &arangoClusterSynchronizationLister{listers.New[*v1.ArangoClusterSynchronization](indexer, v1.Resource("arangoclustersynchronization"))} } // ArangoClusterSynchronizations returns an object that can list and get ArangoClusterSynchronizations. func (s *arangoClusterSynchronizationLister) ArangoClusterSynchronizations(namespace string) ArangoClusterSynchronizationNamespaceLister { - return arangoClusterSynchronizationNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoClusterSynchronizationNamespaceLister{listers.NewNamespaced[*v1.ArangoClusterSynchronization](s.ResourceIndexer, namespace)} } // ArangoClusterSynchronizationNamespaceLister helps list and get ArangoClusterSynchronizations. @@ -78,26 +70,5 @@ type ArangoClusterSynchronizationNamespaceLister interface { // arangoClusterSynchronizationNamespaceLister implements the ArangoClusterSynchronizationNamespaceLister // interface. type arangoClusterSynchronizationNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoClusterSynchronizations in the indexer for a given namespace. -func (s arangoClusterSynchronizationNamespaceLister) List(selector labels.Selector) (ret []*v1.ArangoClusterSynchronization, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoClusterSynchronization)) - }) - return ret, err -} - -// Get retrieves the ArangoClusterSynchronization from the indexer for a given namespace and name. -func (s arangoClusterSynchronizationNamespaceLister) Get(name string) (*v1.ArangoClusterSynchronization, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1.Resource("arangoclustersynchronization"), name) - } - return obj.(*v1.ArangoClusterSynchronization), nil + listers.ResourceIndexer[*v1.ArangoClusterSynchronization] } diff --git a/pkg/generated/listers/deployment/v1/arangodeployment.go b/pkg/generated/listers/deployment/v1/arangodeployment.go index ae6c76dfa..f7a814179 100644 --- a/pkg/generated/listers/deployment/v1/arangodeployment.go +++ b/pkg/generated/listers/deployment/v1/arangodeployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1 import ( v1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoDeploymentLister interface { // arangoDeploymentLister implements the ArangoDeploymentLister interface. type arangoDeploymentLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1.ArangoDeployment] } // NewArangoDeploymentLister returns a new ArangoDeploymentLister. func NewArangoDeploymentLister(indexer cache.Indexer) ArangoDeploymentLister { - return &arangoDeploymentLister{indexer: indexer} -} - -// List lists all ArangoDeployments in the indexer. -func (s *arangoDeploymentLister) List(selector labels.Selector) (ret []*v1.ArangoDeployment, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoDeployment)) - }) - return ret, err + return &arangoDeploymentLister{listers.New[*v1.ArangoDeployment](indexer, v1.Resource("arangodeployment"))} } // ArangoDeployments returns an object that can list and get ArangoDeployments. func (s *arangoDeploymentLister) ArangoDeployments(namespace string) ArangoDeploymentNamespaceLister { - return arangoDeploymentNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoDeploymentNamespaceLister{listers.NewNamespaced[*v1.ArangoDeployment](s.ResourceIndexer, namespace)} } // ArangoDeploymentNamespaceLister helps list and get ArangoDeployments. @@ -78,26 +70,5 @@ type ArangoDeploymentNamespaceLister interface { // arangoDeploymentNamespaceLister implements the ArangoDeploymentNamespaceLister // interface. type arangoDeploymentNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoDeployments in the indexer for a given namespace. -func (s arangoDeploymentNamespaceLister) List(selector labels.Selector) (ret []*v1.ArangoDeployment, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoDeployment)) - }) - return ret, err -} - -// Get retrieves the ArangoDeployment from the indexer for a given namespace and name. -func (s arangoDeploymentNamespaceLister) Get(name string) (*v1.ArangoDeployment, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1.Resource("arangodeployment"), name) - } - return obj.(*v1.ArangoDeployment), nil + listers.ResourceIndexer[*v1.ArangoDeployment] } diff --git a/pkg/generated/listers/deployment/v1/arangomember.go b/pkg/generated/listers/deployment/v1/arangomember.go index 1679a6c28..b2436c21b 100644 --- a/pkg/generated/listers/deployment/v1/arangomember.go +++ b/pkg/generated/listers/deployment/v1/arangomember.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1 import ( v1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoMemberLister interface { // arangoMemberLister implements the ArangoMemberLister interface. type arangoMemberLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1.ArangoMember] } // NewArangoMemberLister returns a new ArangoMemberLister. func NewArangoMemberLister(indexer cache.Indexer) ArangoMemberLister { - return &arangoMemberLister{indexer: indexer} -} - -// List lists all ArangoMembers in the indexer. -func (s *arangoMemberLister) List(selector labels.Selector) (ret []*v1.ArangoMember, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoMember)) - }) - return ret, err + return &arangoMemberLister{listers.New[*v1.ArangoMember](indexer, v1.Resource("arangomember"))} } // ArangoMembers returns an object that can list and get ArangoMembers. func (s *arangoMemberLister) ArangoMembers(namespace string) ArangoMemberNamespaceLister { - return arangoMemberNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoMemberNamespaceLister{listers.NewNamespaced[*v1.ArangoMember](s.ResourceIndexer, namespace)} } // ArangoMemberNamespaceLister helps list and get ArangoMembers. @@ -78,26 +70,5 @@ type ArangoMemberNamespaceLister interface { // arangoMemberNamespaceLister implements the ArangoMemberNamespaceLister // interface. type arangoMemberNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoMembers in the indexer for a given namespace. -func (s arangoMemberNamespaceLister) List(selector labels.Selector) (ret []*v1.ArangoMember, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoMember)) - }) - return ret, err -} - -// Get retrieves the ArangoMember from the indexer for a given namespace and name. -func (s arangoMemberNamespaceLister) Get(name string) (*v1.ArangoMember, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1.Resource("arangomember"), name) - } - return obj.(*v1.ArangoMember), nil + listers.ResourceIndexer[*v1.ArangoMember] } diff --git a/pkg/generated/listers/deployment/v1/arangotask.go b/pkg/generated/listers/deployment/v1/arangotask.go index e41e84f5a..12cf06e5c 100644 --- a/pkg/generated/listers/deployment/v1/arangotask.go +++ b/pkg/generated/listers/deployment/v1/arangotask.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1 import ( v1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoTaskLister interface { // arangoTaskLister implements the ArangoTaskLister interface. type arangoTaskLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1.ArangoTask] } // NewArangoTaskLister returns a new ArangoTaskLister. func NewArangoTaskLister(indexer cache.Indexer) ArangoTaskLister { - return &arangoTaskLister{indexer: indexer} -} - -// List lists all ArangoTasks in the indexer. -func (s *arangoTaskLister) List(selector labels.Selector) (ret []*v1.ArangoTask, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoTask)) - }) - return ret, err + return &arangoTaskLister{listers.New[*v1.ArangoTask](indexer, v1.Resource("arangotask"))} } // ArangoTasks returns an object that can list and get ArangoTasks. func (s *arangoTaskLister) ArangoTasks(namespace string) ArangoTaskNamespaceLister { - return arangoTaskNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoTaskNamespaceLister{listers.NewNamespaced[*v1.ArangoTask](s.ResourceIndexer, namespace)} } // ArangoTaskNamespaceLister helps list and get ArangoTasks. @@ -78,26 +70,5 @@ type ArangoTaskNamespaceLister interface { // arangoTaskNamespaceLister implements the ArangoTaskNamespaceLister // interface. type arangoTaskNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoTasks in the indexer for a given namespace. -func (s arangoTaskNamespaceLister) List(selector labels.Selector) (ret []*v1.ArangoTask, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoTask)) - }) - return ret, err -} - -// Get retrieves the ArangoTask from the indexer for a given namespace and name. -func (s arangoTaskNamespaceLister) Get(name string) (*v1.ArangoTask, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1.Resource("arangotask"), name) - } - return obj.(*v1.ArangoTask), nil + listers.ResourceIndexer[*v1.ArangoTask] } diff --git a/pkg/generated/listers/deployment/v1/expansion_generated.go b/pkg/generated/listers/deployment/v1/expansion_generated.go index a8003d1d9..ad9ec833a 100644 --- a/pkg/generated/listers/deployment/v1/expansion_generated.go +++ b/pkg/generated/listers/deployment/v1/expansion_generated.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/listers/deployment/v2alpha1/arangoclustersynchronization.go b/pkg/generated/listers/deployment/v2alpha1/arangoclustersynchronization.go index 259553c05..b0044188f 100644 --- a/pkg/generated/listers/deployment/v2alpha1/arangoclustersynchronization.go +++ b/pkg/generated/listers/deployment/v2alpha1/arangoclustersynchronization.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v2alpha1 import ( v2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoClusterSynchronizationLister interface { // arangoClusterSynchronizationLister implements the ArangoClusterSynchronizationLister interface. type arangoClusterSynchronizationLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v2alpha1.ArangoClusterSynchronization] } // NewArangoClusterSynchronizationLister returns a new ArangoClusterSynchronizationLister. func NewArangoClusterSynchronizationLister(indexer cache.Indexer) ArangoClusterSynchronizationLister { - return &arangoClusterSynchronizationLister{indexer: indexer} -} - -// List lists all ArangoClusterSynchronizations in the indexer. -func (s *arangoClusterSynchronizationLister) List(selector labels.Selector) (ret []*v2alpha1.ArangoClusterSynchronization, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v2alpha1.ArangoClusterSynchronization)) - }) - return ret, err + return &arangoClusterSynchronizationLister{listers.New[*v2alpha1.ArangoClusterSynchronization](indexer, v2alpha1.Resource("arangoclustersynchronization"))} } // ArangoClusterSynchronizations returns an object that can list and get ArangoClusterSynchronizations. func (s *arangoClusterSynchronizationLister) ArangoClusterSynchronizations(namespace string) ArangoClusterSynchronizationNamespaceLister { - return arangoClusterSynchronizationNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoClusterSynchronizationNamespaceLister{listers.NewNamespaced[*v2alpha1.ArangoClusterSynchronization](s.ResourceIndexer, namespace)} } // ArangoClusterSynchronizationNamespaceLister helps list and get ArangoClusterSynchronizations. @@ -78,26 +70,5 @@ type ArangoClusterSynchronizationNamespaceLister interface { // arangoClusterSynchronizationNamespaceLister implements the ArangoClusterSynchronizationNamespaceLister // interface. type arangoClusterSynchronizationNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoClusterSynchronizations in the indexer for a given namespace. -func (s arangoClusterSynchronizationNamespaceLister) List(selector labels.Selector) (ret []*v2alpha1.ArangoClusterSynchronization, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v2alpha1.ArangoClusterSynchronization)) - }) - return ret, err -} - -// Get retrieves the ArangoClusterSynchronization from the indexer for a given namespace and name. -func (s arangoClusterSynchronizationNamespaceLister) Get(name string) (*v2alpha1.ArangoClusterSynchronization, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v2alpha1.Resource("arangoclustersynchronization"), name) - } - return obj.(*v2alpha1.ArangoClusterSynchronization), nil + listers.ResourceIndexer[*v2alpha1.ArangoClusterSynchronization] } diff --git a/pkg/generated/listers/deployment/v2alpha1/arangodeployment.go b/pkg/generated/listers/deployment/v2alpha1/arangodeployment.go index 8eb7770fa..661fe453d 100644 --- a/pkg/generated/listers/deployment/v2alpha1/arangodeployment.go +++ b/pkg/generated/listers/deployment/v2alpha1/arangodeployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v2alpha1 import ( v2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoDeploymentLister interface { // arangoDeploymentLister implements the ArangoDeploymentLister interface. type arangoDeploymentLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v2alpha1.ArangoDeployment] } // NewArangoDeploymentLister returns a new ArangoDeploymentLister. func NewArangoDeploymentLister(indexer cache.Indexer) ArangoDeploymentLister { - return &arangoDeploymentLister{indexer: indexer} -} - -// List lists all ArangoDeployments in the indexer. -func (s *arangoDeploymentLister) List(selector labels.Selector) (ret []*v2alpha1.ArangoDeployment, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v2alpha1.ArangoDeployment)) - }) - return ret, err + return &arangoDeploymentLister{listers.New[*v2alpha1.ArangoDeployment](indexer, v2alpha1.Resource("arangodeployment"))} } // ArangoDeployments returns an object that can list and get ArangoDeployments. func (s *arangoDeploymentLister) ArangoDeployments(namespace string) ArangoDeploymentNamespaceLister { - return arangoDeploymentNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoDeploymentNamespaceLister{listers.NewNamespaced[*v2alpha1.ArangoDeployment](s.ResourceIndexer, namespace)} } // ArangoDeploymentNamespaceLister helps list and get ArangoDeployments. @@ -78,26 +70,5 @@ type ArangoDeploymentNamespaceLister interface { // arangoDeploymentNamespaceLister implements the ArangoDeploymentNamespaceLister // interface. type arangoDeploymentNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoDeployments in the indexer for a given namespace. -func (s arangoDeploymentNamespaceLister) List(selector labels.Selector) (ret []*v2alpha1.ArangoDeployment, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v2alpha1.ArangoDeployment)) - }) - return ret, err -} - -// Get retrieves the ArangoDeployment from the indexer for a given namespace and name. -func (s arangoDeploymentNamespaceLister) Get(name string) (*v2alpha1.ArangoDeployment, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v2alpha1.Resource("arangodeployment"), name) - } - return obj.(*v2alpha1.ArangoDeployment), nil + listers.ResourceIndexer[*v2alpha1.ArangoDeployment] } diff --git a/pkg/generated/listers/deployment/v2alpha1/arangomember.go b/pkg/generated/listers/deployment/v2alpha1/arangomember.go index dcbd7943b..2d30474fc 100644 --- a/pkg/generated/listers/deployment/v2alpha1/arangomember.go +++ b/pkg/generated/listers/deployment/v2alpha1/arangomember.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v2alpha1 import ( v2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoMemberLister interface { // arangoMemberLister implements the ArangoMemberLister interface. type arangoMemberLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v2alpha1.ArangoMember] } // NewArangoMemberLister returns a new ArangoMemberLister. func NewArangoMemberLister(indexer cache.Indexer) ArangoMemberLister { - return &arangoMemberLister{indexer: indexer} -} - -// List lists all ArangoMembers in the indexer. -func (s *arangoMemberLister) List(selector labels.Selector) (ret []*v2alpha1.ArangoMember, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v2alpha1.ArangoMember)) - }) - return ret, err + return &arangoMemberLister{listers.New[*v2alpha1.ArangoMember](indexer, v2alpha1.Resource("arangomember"))} } // ArangoMembers returns an object that can list and get ArangoMembers. func (s *arangoMemberLister) ArangoMembers(namespace string) ArangoMemberNamespaceLister { - return arangoMemberNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoMemberNamespaceLister{listers.NewNamespaced[*v2alpha1.ArangoMember](s.ResourceIndexer, namespace)} } // ArangoMemberNamespaceLister helps list and get ArangoMembers. @@ -78,26 +70,5 @@ type ArangoMemberNamespaceLister interface { // arangoMemberNamespaceLister implements the ArangoMemberNamespaceLister // interface. type arangoMemberNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoMembers in the indexer for a given namespace. -func (s arangoMemberNamespaceLister) List(selector labels.Selector) (ret []*v2alpha1.ArangoMember, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v2alpha1.ArangoMember)) - }) - return ret, err -} - -// Get retrieves the ArangoMember from the indexer for a given namespace and name. -func (s arangoMemberNamespaceLister) Get(name string) (*v2alpha1.ArangoMember, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v2alpha1.Resource("arangomember"), name) - } - return obj.(*v2alpha1.ArangoMember), nil + listers.ResourceIndexer[*v2alpha1.ArangoMember] } diff --git a/pkg/generated/listers/deployment/v2alpha1/arangotask.go b/pkg/generated/listers/deployment/v2alpha1/arangotask.go index ca618947a..1665e6f3d 100644 --- a/pkg/generated/listers/deployment/v2alpha1/arangotask.go +++ b/pkg/generated/listers/deployment/v2alpha1/arangotask.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v2alpha1 import ( v2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoTaskLister interface { // arangoTaskLister implements the ArangoTaskLister interface. type arangoTaskLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v2alpha1.ArangoTask] } // NewArangoTaskLister returns a new ArangoTaskLister. func NewArangoTaskLister(indexer cache.Indexer) ArangoTaskLister { - return &arangoTaskLister{indexer: indexer} -} - -// List lists all ArangoTasks in the indexer. -func (s *arangoTaskLister) List(selector labels.Selector) (ret []*v2alpha1.ArangoTask, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v2alpha1.ArangoTask)) - }) - return ret, err + return &arangoTaskLister{listers.New[*v2alpha1.ArangoTask](indexer, v2alpha1.Resource("arangotask"))} } // ArangoTasks returns an object that can list and get ArangoTasks. func (s *arangoTaskLister) ArangoTasks(namespace string) ArangoTaskNamespaceLister { - return arangoTaskNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoTaskNamespaceLister{listers.NewNamespaced[*v2alpha1.ArangoTask](s.ResourceIndexer, namespace)} } // ArangoTaskNamespaceLister helps list and get ArangoTasks. @@ -78,26 +70,5 @@ type ArangoTaskNamespaceLister interface { // arangoTaskNamespaceLister implements the ArangoTaskNamespaceLister // interface. type arangoTaskNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoTasks in the indexer for a given namespace. -func (s arangoTaskNamespaceLister) List(selector labels.Selector) (ret []*v2alpha1.ArangoTask, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v2alpha1.ArangoTask)) - }) - return ret, err -} - -// Get retrieves the ArangoTask from the indexer for a given namespace and name. -func (s arangoTaskNamespaceLister) Get(name string) (*v2alpha1.ArangoTask, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v2alpha1.Resource("arangotask"), name) - } - return obj.(*v2alpha1.ArangoTask), nil + listers.ResourceIndexer[*v2alpha1.ArangoTask] } diff --git a/pkg/generated/listers/deployment/v2alpha1/expansion_generated.go b/pkg/generated/listers/deployment/v2alpha1/expansion_generated.go index b012988a7..5fddcbfbc 100644 --- a/pkg/generated/listers/deployment/v2alpha1/expansion_generated.go +++ b/pkg/generated/listers/deployment/v2alpha1/expansion_generated.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/listers/ml/v1alpha1/arangomlbatchjob.go b/pkg/generated/listers/ml/v1alpha1/arangomlbatchjob.go index f289b31ab..15ab1aa7d 100644 --- a/pkg/generated/listers/ml/v1alpha1/arangomlbatchjob.go +++ b/pkg/generated/listers/ml/v1alpha1/arangomlbatchjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1alpha1 import ( v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoMLBatchJobLister interface { // arangoMLBatchJobLister implements the ArangoMLBatchJobLister interface. type arangoMLBatchJobLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1alpha1.ArangoMLBatchJob] } // NewArangoMLBatchJobLister returns a new ArangoMLBatchJobLister. func NewArangoMLBatchJobLister(indexer cache.Indexer) ArangoMLBatchJobLister { - return &arangoMLBatchJobLister{indexer: indexer} -} - -// List lists all ArangoMLBatchJobs in the indexer. -func (s *arangoMLBatchJobLister) List(selector labels.Selector) (ret []*v1alpha1.ArangoMLBatchJob, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.ArangoMLBatchJob)) - }) - return ret, err + return &arangoMLBatchJobLister{listers.New[*v1alpha1.ArangoMLBatchJob](indexer, v1alpha1.Resource("arangomlbatchjob"))} } // ArangoMLBatchJobs returns an object that can list and get ArangoMLBatchJobs. func (s *arangoMLBatchJobLister) ArangoMLBatchJobs(namespace string) ArangoMLBatchJobNamespaceLister { - return arangoMLBatchJobNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoMLBatchJobNamespaceLister{listers.NewNamespaced[*v1alpha1.ArangoMLBatchJob](s.ResourceIndexer, namespace)} } // ArangoMLBatchJobNamespaceLister helps list and get ArangoMLBatchJobs. @@ -78,26 +70,5 @@ type ArangoMLBatchJobNamespaceLister interface { // arangoMLBatchJobNamespaceLister implements the ArangoMLBatchJobNamespaceLister // interface. type arangoMLBatchJobNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoMLBatchJobs in the indexer for a given namespace. -func (s arangoMLBatchJobNamespaceLister) List(selector labels.Selector) (ret []*v1alpha1.ArangoMLBatchJob, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.ArangoMLBatchJob)) - }) - return ret, err -} - -// Get retrieves the ArangoMLBatchJob from the indexer for a given namespace and name. -func (s arangoMLBatchJobNamespaceLister) Get(name string) (*v1alpha1.ArangoMLBatchJob, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1alpha1.Resource("arangomlbatchjob"), name) - } - return obj.(*v1alpha1.ArangoMLBatchJob), nil + listers.ResourceIndexer[*v1alpha1.ArangoMLBatchJob] } diff --git a/pkg/generated/listers/ml/v1alpha1/arangomlcronjob.go b/pkg/generated/listers/ml/v1alpha1/arangomlcronjob.go index c9347f9e7..8b77c5a4c 100644 --- a/pkg/generated/listers/ml/v1alpha1/arangomlcronjob.go +++ b/pkg/generated/listers/ml/v1alpha1/arangomlcronjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1alpha1 import ( v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoMLCronJobLister interface { // arangoMLCronJobLister implements the ArangoMLCronJobLister interface. type arangoMLCronJobLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1alpha1.ArangoMLCronJob] } // NewArangoMLCronJobLister returns a new ArangoMLCronJobLister. func NewArangoMLCronJobLister(indexer cache.Indexer) ArangoMLCronJobLister { - return &arangoMLCronJobLister{indexer: indexer} -} - -// List lists all ArangoMLCronJobs in the indexer. -func (s *arangoMLCronJobLister) List(selector labels.Selector) (ret []*v1alpha1.ArangoMLCronJob, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.ArangoMLCronJob)) - }) - return ret, err + return &arangoMLCronJobLister{listers.New[*v1alpha1.ArangoMLCronJob](indexer, v1alpha1.Resource("arangomlcronjob"))} } // ArangoMLCronJobs returns an object that can list and get ArangoMLCronJobs. func (s *arangoMLCronJobLister) ArangoMLCronJobs(namespace string) ArangoMLCronJobNamespaceLister { - return arangoMLCronJobNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoMLCronJobNamespaceLister{listers.NewNamespaced[*v1alpha1.ArangoMLCronJob](s.ResourceIndexer, namespace)} } // ArangoMLCronJobNamespaceLister helps list and get ArangoMLCronJobs. @@ -78,26 +70,5 @@ type ArangoMLCronJobNamespaceLister interface { // arangoMLCronJobNamespaceLister implements the ArangoMLCronJobNamespaceLister // interface. type arangoMLCronJobNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoMLCronJobs in the indexer for a given namespace. -func (s arangoMLCronJobNamespaceLister) List(selector labels.Selector) (ret []*v1alpha1.ArangoMLCronJob, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.ArangoMLCronJob)) - }) - return ret, err -} - -// Get retrieves the ArangoMLCronJob from the indexer for a given namespace and name. -func (s arangoMLCronJobNamespaceLister) Get(name string) (*v1alpha1.ArangoMLCronJob, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1alpha1.Resource("arangomlcronjob"), name) - } - return obj.(*v1alpha1.ArangoMLCronJob), nil + listers.ResourceIndexer[*v1alpha1.ArangoMLCronJob] } diff --git a/pkg/generated/listers/ml/v1alpha1/arangomlextension.go b/pkg/generated/listers/ml/v1alpha1/arangomlextension.go index 808311f7f..6eb9373e3 100644 --- a/pkg/generated/listers/ml/v1alpha1/arangomlextension.go +++ b/pkg/generated/listers/ml/v1alpha1/arangomlextension.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1alpha1 import ( v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoMLExtensionLister interface { // arangoMLExtensionLister implements the ArangoMLExtensionLister interface. type arangoMLExtensionLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1alpha1.ArangoMLExtension] } // NewArangoMLExtensionLister returns a new ArangoMLExtensionLister. func NewArangoMLExtensionLister(indexer cache.Indexer) ArangoMLExtensionLister { - return &arangoMLExtensionLister{indexer: indexer} -} - -// List lists all ArangoMLExtensions in the indexer. -func (s *arangoMLExtensionLister) List(selector labels.Selector) (ret []*v1alpha1.ArangoMLExtension, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.ArangoMLExtension)) - }) - return ret, err + return &arangoMLExtensionLister{listers.New[*v1alpha1.ArangoMLExtension](indexer, v1alpha1.Resource("arangomlextension"))} } // ArangoMLExtensions returns an object that can list and get ArangoMLExtensions. func (s *arangoMLExtensionLister) ArangoMLExtensions(namespace string) ArangoMLExtensionNamespaceLister { - return arangoMLExtensionNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoMLExtensionNamespaceLister{listers.NewNamespaced[*v1alpha1.ArangoMLExtension](s.ResourceIndexer, namespace)} } // ArangoMLExtensionNamespaceLister helps list and get ArangoMLExtensions. @@ -78,26 +70,5 @@ type ArangoMLExtensionNamespaceLister interface { // arangoMLExtensionNamespaceLister implements the ArangoMLExtensionNamespaceLister // interface. type arangoMLExtensionNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoMLExtensions in the indexer for a given namespace. -func (s arangoMLExtensionNamespaceLister) List(selector labels.Selector) (ret []*v1alpha1.ArangoMLExtension, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.ArangoMLExtension)) - }) - return ret, err -} - -// Get retrieves the ArangoMLExtension from the indexer for a given namespace and name. -func (s arangoMLExtensionNamespaceLister) Get(name string) (*v1alpha1.ArangoMLExtension, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1alpha1.Resource("arangomlextension"), name) - } - return obj.(*v1alpha1.ArangoMLExtension), nil + listers.ResourceIndexer[*v1alpha1.ArangoMLExtension] } diff --git a/pkg/generated/listers/ml/v1alpha1/arangomlstorage.go b/pkg/generated/listers/ml/v1alpha1/arangomlstorage.go index 02aecad43..a50533b3f 100644 --- a/pkg/generated/listers/ml/v1alpha1/arangomlstorage.go +++ b/pkg/generated/listers/ml/v1alpha1/arangomlstorage.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1alpha1 import ( v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoMLStorageLister interface { // arangoMLStorageLister implements the ArangoMLStorageLister interface. type arangoMLStorageLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1alpha1.ArangoMLStorage] } // NewArangoMLStorageLister returns a new ArangoMLStorageLister. func NewArangoMLStorageLister(indexer cache.Indexer) ArangoMLStorageLister { - return &arangoMLStorageLister{indexer: indexer} -} - -// List lists all ArangoMLStorages in the indexer. -func (s *arangoMLStorageLister) List(selector labels.Selector) (ret []*v1alpha1.ArangoMLStorage, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.ArangoMLStorage)) - }) - return ret, err + return &arangoMLStorageLister{listers.New[*v1alpha1.ArangoMLStorage](indexer, v1alpha1.Resource("arangomlstorage"))} } // ArangoMLStorages returns an object that can list and get ArangoMLStorages. func (s *arangoMLStorageLister) ArangoMLStorages(namespace string) ArangoMLStorageNamespaceLister { - return arangoMLStorageNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoMLStorageNamespaceLister{listers.NewNamespaced[*v1alpha1.ArangoMLStorage](s.ResourceIndexer, namespace)} } // ArangoMLStorageNamespaceLister helps list and get ArangoMLStorages. @@ -78,26 +70,5 @@ type ArangoMLStorageNamespaceLister interface { // arangoMLStorageNamespaceLister implements the ArangoMLStorageNamespaceLister // interface. type arangoMLStorageNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoMLStorages in the indexer for a given namespace. -func (s arangoMLStorageNamespaceLister) List(selector labels.Selector) (ret []*v1alpha1.ArangoMLStorage, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.ArangoMLStorage)) - }) - return ret, err -} - -// Get retrieves the ArangoMLStorage from the indexer for a given namespace and name. -func (s arangoMLStorageNamespaceLister) Get(name string) (*v1alpha1.ArangoMLStorage, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1alpha1.Resource("arangomlstorage"), name) - } - return obj.(*v1alpha1.ArangoMLStorage), nil + listers.ResourceIndexer[*v1alpha1.ArangoMLStorage] } diff --git a/pkg/generated/listers/ml/v1alpha1/expansion_generated.go b/pkg/generated/listers/ml/v1alpha1/expansion_generated.go index 0914d81a3..567a52e66 100644 --- a/pkg/generated/listers/ml/v1alpha1/expansion_generated.go +++ b/pkg/generated/listers/ml/v1alpha1/expansion_generated.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/listers/ml/v1beta1/arangomlextension.go b/pkg/generated/listers/ml/v1beta1/arangomlextension.go index 67a7fc3e9..98c610217 100644 --- a/pkg/generated/listers/ml/v1beta1/arangomlextension.go +++ b/pkg/generated/listers/ml/v1beta1/arangomlextension.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1beta1 import ( v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoMLExtensionLister interface { // arangoMLExtensionLister implements the ArangoMLExtensionLister interface. type arangoMLExtensionLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1beta1.ArangoMLExtension] } // NewArangoMLExtensionLister returns a new ArangoMLExtensionLister. func NewArangoMLExtensionLister(indexer cache.Indexer) ArangoMLExtensionLister { - return &arangoMLExtensionLister{indexer: indexer} -} - -// List lists all ArangoMLExtensions in the indexer. -func (s *arangoMLExtensionLister) List(selector labels.Selector) (ret []*v1beta1.ArangoMLExtension, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.ArangoMLExtension)) - }) - return ret, err + return &arangoMLExtensionLister{listers.New[*v1beta1.ArangoMLExtension](indexer, v1beta1.Resource("arangomlextension"))} } // ArangoMLExtensions returns an object that can list and get ArangoMLExtensions. func (s *arangoMLExtensionLister) ArangoMLExtensions(namespace string) ArangoMLExtensionNamespaceLister { - return arangoMLExtensionNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoMLExtensionNamespaceLister{listers.NewNamespaced[*v1beta1.ArangoMLExtension](s.ResourceIndexer, namespace)} } // ArangoMLExtensionNamespaceLister helps list and get ArangoMLExtensions. @@ -78,26 +70,5 @@ type ArangoMLExtensionNamespaceLister interface { // arangoMLExtensionNamespaceLister implements the ArangoMLExtensionNamespaceLister // interface. type arangoMLExtensionNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoMLExtensions in the indexer for a given namespace. -func (s arangoMLExtensionNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.ArangoMLExtension, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.ArangoMLExtension)) - }) - return ret, err -} - -// Get retrieves the ArangoMLExtension from the indexer for a given namespace and name. -func (s arangoMLExtensionNamespaceLister) Get(name string) (*v1beta1.ArangoMLExtension, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1beta1.Resource("arangomlextension"), name) - } - return obj.(*v1beta1.ArangoMLExtension), nil + listers.ResourceIndexer[*v1beta1.ArangoMLExtension] } diff --git a/pkg/generated/listers/ml/v1beta1/arangomlstorage.go b/pkg/generated/listers/ml/v1beta1/arangomlstorage.go index 802fa10c8..6882db3cf 100644 --- a/pkg/generated/listers/ml/v1beta1/arangomlstorage.go +++ b/pkg/generated/listers/ml/v1beta1/arangomlstorage.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1beta1 import ( v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoMLStorageLister interface { // arangoMLStorageLister implements the ArangoMLStorageLister interface. type arangoMLStorageLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1beta1.ArangoMLStorage] } // NewArangoMLStorageLister returns a new ArangoMLStorageLister. func NewArangoMLStorageLister(indexer cache.Indexer) ArangoMLStorageLister { - return &arangoMLStorageLister{indexer: indexer} -} - -// List lists all ArangoMLStorages in the indexer. -func (s *arangoMLStorageLister) List(selector labels.Selector) (ret []*v1beta1.ArangoMLStorage, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.ArangoMLStorage)) - }) - return ret, err + return &arangoMLStorageLister{listers.New[*v1beta1.ArangoMLStorage](indexer, v1beta1.Resource("arangomlstorage"))} } // ArangoMLStorages returns an object that can list and get ArangoMLStorages. func (s *arangoMLStorageLister) ArangoMLStorages(namespace string) ArangoMLStorageNamespaceLister { - return arangoMLStorageNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoMLStorageNamespaceLister{listers.NewNamespaced[*v1beta1.ArangoMLStorage](s.ResourceIndexer, namespace)} } // ArangoMLStorageNamespaceLister helps list and get ArangoMLStorages. @@ -78,26 +70,5 @@ type ArangoMLStorageNamespaceLister interface { // arangoMLStorageNamespaceLister implements the ArangoMLStorageNamespaceLister // interface. type arangoMLStorageNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoMLStorages in the indexer for a given namespace. -func (s arangoMLStorageNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.ArangoMLStorage, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.ArangoMLStorage)) - }) - return ret, err -} - -// Get retrieves the ArangoMLStorage from the indexer for a given namespace and name. -func (s arangoMLStorageNamespaceLister) Get(name string) (*v1beta1.ArangoMLStorage, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1beta1.Resource("arangomlstorage"), name) - } - return obj.(*v1beta1.ArangoMLStorage), nil + listers.ResourceIndexer[*v1beta1.ArangoMLStorage] } diff --git a/pkg/generated/listers/ml/v1beta1/expansion_generated.go b/pkg/generated/listers/ml/v1beta1/expansion_generated.go index 38a07d562..4e8b89743 100644 --- a/pkg/generated/listers/ml/v1beta1/expansion_generated.go +++ b/pkg/generated/listers/ml/v1beta1/expansion_generated.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/listers/networking/v1alpha1/arangoroute.go b/pkg/generated/listers/networking/v1alpha1/arangoroute.go index 737f34c10..c1c0d152d 100644 --- a/pkg/generated/listers/networking/v1alpha1/arangoroute.go +++ b/pkg/generated/listers/networking/v1alpha1/arangoroute.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1alpha1 import ( v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoRouteLister interface { // arangoRouteLister implements the ArangoRouteLister interface. type arangoRouteLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1alpha1.ArangoRoute] } // NewArangoRouteLister returns a new ArangoRouteLister. func NewArangoRouteLister(indexer cache.Indexer) ArangoRouteLister { - return &arangoRouteLister{indexer: indexer} -} - -// List lists all ArangoRoutes in the indexer. -func (s *arangoRouteLister) List(selector labels.Selector) (ret []*v1alpha1.ArangoRoute, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.ArangoRoute)) - }) - return ret, err + return &arangoRouteLister{listers.New[*v1alpha1.ArangoRoute](indexer, v1alpha1.Resource("arangoroute"))} } // ArangoRoutes returns an object that can list and get ArangoRoutes. func (s *arangoRouteLister) ArangoRoutes(namespace string) ArangoRouteNamespaceLister { - return arangoRouteNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoRouteNamespaceLister{listers.NewNamespaced[*v1alpha1.ArangoRoute](s.ResourceIndexer, namespace)} } // ArangoRouteNamespaceLister helps list and get ArangoRoutes. @@ -78,26 +70,5 @@ type ArangoRouteNamespaceLister interface { // arangoRouteNamespaceLister implements the ArangoRouteNamespaceLister // interface. type arangoRouteNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoRoutes in the indexer for a given namespace. -func (s arangoRouteNamespaceLister) List(selector labels.Selector) (ret []*v1alpha1.ArangoRoute, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.ArangoRoute)) - }) - return ret, err -} - -// Get retrieves the ArangoRoute from the indexer for a given namespace and name. -func (s arangoRouteNamespaceLister) Get(name string) (*v1alpha1.ArangoRoute, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1alpha1.Resource("arangoroute"), name) - } - return obj.(*v1alpha1.ArangoRoute), nil + listers.ResourceIndexer[*v1alpha1.ArangoRoute] } diff --git a/pkg/generated/listers/networking/v1alpha1/expansion_generated.go b/pkg/generated/listers/networking/v1alpha1/expansion_generated.go index e0d7ccab7..f8f28f0fb 100644 --- a/pkg/generated/listers/networking/v1alpha1/expansion_generated.go +++ b/pkg/generated/listers/networking/v1alpha1/expansion_generated.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/listers/platform/v1alpha1/arangoplatformchart.go b/pkg/generated/listers/platform/v1alpha1/arangoplatformchart.go new file mode 100644 index 000000000..d7ab993fd --- /dev/null +++ b/pkg/generated/listers/platform/v1alpha1/arangoplatformchart.go @@ -0,0 +1,74 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by lister-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" + "k8s.io/client-go/tools/cache" +) + +// ArangoPlatformChartLister helps list ArangoPlatformCharts. +// All objects returned here must be treated as read-only. +type ArangoPlatformChartLister interface { + // List lists all ArangoPlatformCharts in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1alpha1.ArangoPlatformChart, err error) + // ArangoPlatformCharts returns an object that can list and get ArangoPlatformCharts. + ArangoPlatformCharts(namespace string) ArangoPlatformChartNamespaceLister + ArangoPlatformChartListerExpansion +} + +// arangoPlatformChartLister implements the ArangoPlatformChartLister interface. +type arangoPlatformChartLister struct { + listers.ResourceIndexer[*v1alpha1.ArangoPlatformChart] +} + +// NewArangoPlatformChartLister returns a new ArangoPlatformChartLister. +func NewArangoPlatformChartLister(indexer cache.Indexer) ArangoPlatformChartLister { + return &arangoPlatformChartLister{listers.New[*v1alpha1.ArangoPlatformChart](indexer, v1alpha1.Resource("arangoplatformchart"))} +} + +// ArangoPlatformCharts returns an object that can list and get ArangoPlatformCharts. +func (s *arangoPlatformChartLister) ArangoPlatformCharts(namespace string) ArangoPlatformChartNamespaceLister { + return arangoPlatformChartNamespaceLister{listers.NewNamespaced[*v1alpha1.ArangoPlatformChart](s.ResourceIndexer, namespace)} +} + +// ArangoPlatformChartNamespaceLister helps list and get ArangoPlatformCharts. +// All objects returned here must be treated as read-only. +type ArangoPlatformChartNamespaceLister interface { + // List lists all ArangoPlatformCharts in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1alpha1.ArangoPlatformChart, err error) + // Get retrieves the ArangoPlatformChart from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1alpha1.ArangoPlatformChart, error) + ArangoPlatformChartNamespaceListerExpansion +} + +// arangoPlatformChartNamespaceLister implements the ArangoPlatformChartNamespaceLister +// interface. +type arangoPlatformChartNamespaceLister struct { + listers.ResourceIndexer[*v1alpha1.ArangoPlatformChart] +} diff --git a/pkg/generated/listers/platform/v1alpha1/arangoplatformstorage.go b/pkg/generated/listers/platform/v1alpha1/arangoplatformstorage.go new file mode 100644 index 000000000..92a66801f --- /dev/null +++ b/pkg/generated/listers/platform/v1alpha1/arangoplatformstorage.go @@ -0,0 +1,74 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by lister-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" + "k8s.io/client-go/tools/cache" +) + +// ArangoPlatformStorageLister helps list ArangoPlatformStorages. +// All objects returned here must be treated as read-only. +type ArangoPlatformStorageLister interface { + // List lists all ArangoPlatformStorages in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1alpha1.ArangoPlatformStorage, err error) + // ArangoPlatformStorages returns an object that can list and get ArangoPlatformStorages. + ArangoPlatformStorages(namespace string) ArangoPlatformStorageNamespaceLister + ArangoPlatformStorageListerExpansion +} + +// arangoPlatformStorageLister implements the ArangoPlatformStorageLister interface. +type arangoPlatformStorageLister struct { + listers.ResourceIndexer[*v1alpha1.ArangoPlatformStorage] +} + +// NewArangoPlatformStorageLister returns a new ArangoPlatformStorageLister. +func NewArangoPlatformStorageLister(indexer cache.Indexer) ArangoPlatformStorageLister { + return &arangoPlatformStorageLister{listers.New[*v1alpha1.ArangoPlatformStorage](indexer, v1alpha1.Resource("arangoplatformstorage"))} +} + +// ArangoPlatformStorages returns an object that can list and get ArangoPlatformStorages. +func (s *arangoPlatformStorageLister) ArangoPlatformStorages(namespace string) ArangoPlatformStorageNamespaceLister { + return arangoPlatformStorageNamespaceLister{listers.NewNamespaced[*v1alpha1.ArangoPlatformStorage](s.ResourceIndexer, namespace)} +} + +// ArangoPlatformStorageNamespaceLister helps list and get ArangoPlatformStorages. +// All objects returned here must be treated as read-only. +type ArangoPlatformStorageNamespaceLister interface { + // List lists all ArangoPlatformStorages in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1alpha1.ArangoPlatformStorage, err error) + // Get retrieves the ArangoPlatformStorage from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1alpha1.ArangoPlatformStorage, error) + ArangoPlatformStorageNamespaceListerExpansion +} + +// arangoPlatformStorageNamespaceLister implements the ArangoPlatformStorageNamespaceLister +// interface. +type arangoPlatformStorageNamespaceLister struct { + listers.ResourceIndexer[*v1alpha1.ArangoPlatformStorage] +} diff --git a/pkg/generated/listers/platform/v1alpha1/expansion_generated.go b/pkg/generated/listers/platform/v1alpha1/expansion_generated.go new file mode 100644 index 000000000..c7079c637 --- /dev/null +++ b/pkg/generated/listers/platform/v1alpha1/expansion_generated.go @@ -0,0 +1,39 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +// Code generated by lister-gen. DO NOT EDIT. + +package v1alpha1 + +// ArangoPlatformChartListerExpansion allows custom methods to be added to +// ArangoPlatformChartLister. +type ArangoPlatformChartListerExpansion interface{} + +// ArangoPlatformChartNamespaceListerExpansion allows custom methods to be added to +// ArangoPlatformChartNamespaceLister. +type ArangoPlatformChartNamespaceListerExpansion interface{} + +// ArangoPlatformStorageListerExpansion allows custom methods to be added to +// ArangoPlatformStorageLister. +type ArangoPlatformStorageListerExpansion interface{} + +// ArangoPlatformStorageNamespaceListerExpansion allows custom methods to be added to +// ArangoPlatformStorageNamespaceLister. +type ArangoPlatformStorageNamespaceListerExpansion interface{} diff --git a/pkg/generated/listers/replication/v1/arangodeploymentreplication.go b/pkg/generated/listers/replication/v1/arangodeploymentreplication.go index 75733e798..cf6016ed3 100644 --- a/pkg/generated/listers/replication/v1/arangodeploymentreplication.go +++ b/pkg/generated/listers/replication/v1/arangodeploymentreplication.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1 import ( v1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoDeploymentReplicationLister interface { // arangoDeploymentReplicationLister implements the ArangoDeploymentReplicationLister interface. type arangoDeploymentReplicationLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1.ArangoDeploymentReplication] } // NewArangoDeploymentReplicationLister returns a new ArangoDeploymentReplicationLister. func NewArangoDeploymentReplicationLister(indexer cache.Indexer) ArangoDeploymentReplicationLister { - return &arangoDeploymentReplicationLister{indexer: indexer} -} - -// List lists all ArangoDeploymentReplications in the indexer. -func (s *arangoDeploymentReplicationLister) List(selector labels.Selector) (ret []*v1.ArangoDeploymentReplication, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoDeploymentReplication)) - }) - return ret, err + return &arangoDeploymentReplicationLister{listers.New[*v1.ArangoDeploymentReplication](indexer, v1.Resource("arangodeploymentreplication"))} } // ArangoDeploymentReplications returns an object that can list and get ArangoDeploymentReplications. func (s *arangoDeploymentReplicationLister) ArangoDeploymentReplications(namespace string) ArangoDeploymentReplicationNamespaceLister { - return arangoDeploymentReplicationNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoDeploymentReplicationNamespaceLister{listers.NewNamespaced[*v1.ArangoDeploymentReplication](s.ResourceIndexer, namespace)} } // ArangoDeploymentReplicationNamespaceLister helps list and get ArangoDeploymentReplications. @@ -78,26 +70,5 @@ type ArangoDeploymentReplicationNamespaceLister interface { // arangoDeploymentReplicationNamespaceLister implements the ArangoDeploymentReplicationNamespaceLister // interface. type arangoDeploymentReplicationNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoDeploymentReplications in the indexer for a given namespace. -func (s arangoDeploymentReplicationNamespaceLister) List(selector labels.Selector) (ret []*v1.ArangoDeploymentReplication, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1.ArangoDeploymentReplication)) - }) - return ret, err -} - -// Get retrieves the ArangoDeploymentReplication from the indexer for a given namespace and name. -func (s arangoDeploymentReplicationNamespaceLister) Get(name string) (*v1.ArangoDeploymentReplication, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1.Resource("arangodeploymentreplication"), name) - } - return obj.(*v1.ArangoDeploymentReplication), nil + listers.ResourceIndexer[*v1.ArangoDeploymentReplication] } diff --git a/pkg/generated/listers/replication/v1/expansion_generated.go b/pkg/generated/listers/replication/v1/expansion_generated.go index 938f093a7..3e58c9796 100644 --- a/pkg/generated/listers/replication/v1/expansion_generated.go +++ b/pkg/generated/listers/replication/v1/expansion_generated.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/listers/replication/v2alpha1/arangodeploymentreplication.go b/pkg/generated/listers/replication/v2alpha1/arangodeploymentreplication.go index afc579df9..c3ce290e9 100644 --- a/pkg/generated/listers/replication/v2alpha1/arangodeploymentreplication.go +++ b/pkg/generated/listers/replication/v2alpha1/arangodeploymentreplication.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v2alpha1 import ( v2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoDeploymentReplicationLister interface { // arangoDeploymentReplicationLister implements the ArangoDeploymentReplicationLister interface. type arangoDeploymentReplicationLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v2alpha1.ArangoDeploymentReplication] } // NewArangoDeploymentReplicationLister returns a new ArangoDeploymentReplicationLister. func NewArangoDeploymentReplicationLister(indexer cache.Indexer) ArangoDeploymentReplicationLister { - return &arangoDeploymentReplicationLister{indexer: indexer} -} - -// List lists all ArangoDeploymentReplications in the indexer. -func (s *arangoDeploymentReplicationLister) List(selector labels.Selector) (ret []*v2alpha1.ArangoDeploymentReplication, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v2alpha1.ArangoDeploymentReplication)) - }) - return ret, err + return &arangoDeploymentReplicationLister{listers.New[*v2alpha1.ArangoDeploymentReplication](indexer, v2alpha1.Resource("arangodeploymentreplication"))} } // ArangoDeploymentReplications returns an object that can list and get ArangoDeploymentReplications. func (s *arangoDeploymentReplicationLister) ArangoDeploymentReplications(namespace string) ArangoDeploymentReplicationNamespaceLister { - return arangoDeploymentReplicationNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoDeploymentReplicationNamespaceLister{listers.NewNamespaced[*v2alpha1.ArangoDeploymentReplication](s.ResourceIndexer, namespace)} } // ArangoDeploymentReplicationNamespaceLister helps list and get ArangoDeploymentReplications. @@ -78,26 +70,5 @@ type ArangoDeploymentReplicationNamespaceLister interface { // arangoDeploymentReplicationNamespaceLister implements the ArangoDeploymentReplicationNamespaceLister // interface. type arangoDeploymentReplicationNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoDeploymentReplications in the indexer for a given namespace. -func (s arangoDeploymentReplicationNamespaceLister) List(selector labels.Selector) (ret []*v2alpha1.ArangoDeploymentReplication, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v2alpha1.ArangoDeploymentReplication)) - }) - return ret, err -} - -// Get retrieves the ArangoDeploymentReplication from the indexer for a given namespace and name. -func (s arangoDeploymentReplicationNamespaceLister) Get(name string) (*v2alpha1.ArangoDeploymentReplication, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v2alpha1.Resource("arangodeploymentreplication"), name) - } - return obj.(*v2alpha1.ArangoDeploymentReplication), nil + listers.ResourceIndexer[*v2alpha1.ArangoDeploymentReplication] } diff --git a/pkg/generated/listers/replication/v2alpha1/expansion_generated.go b/pkg/generated/listers/replication/v2alpha1/expansion_generated.go index df9c2fadf..014bc3670 100644 --- a/pkg/generated/listers/replication/v2alpha1/expansion_generated.go +++ b/pkg/generated/listers/replication/v2alpha1/expansion_generated.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/listers/scheduler/v1alpha1/arangoprofile.go b/pkg/generated/listers/scheduler/v1alpha1/arangoprofile.go index ab68f9f20..226de7f78 100644 --- a/pkg/generated/listers/scheduler/v1alpha1/arangoprofile.go +++ b/pkg/generated/listers/scheduler/v1alpha1/arangoprofile.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1alpha1 import ( v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoProfileLister interface { // arangoProfileLister implements the ArangoProfileLister interface. type arangoProfileLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1alpha1.ArangoProfile] } // NewArangoProfileLister returns a new ArangoProfileLister. func NewArangoProfileLister(indexer cache.Indexer) ArangoProfileLister { - return &arangoProfileLister{indexer: indexer} -} - -// List lists all ArangoProfiles in the indexer. -func (s *arangoProfileLister) List(selector labels.Selector) (ret []*v1alpha1.ArangoProfile, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.ArangoProfile)) - }) - return ret, err + return &arangoProfileLister{listers.New[*v1alpha1.ArangoProfile](indexer, v1alpha1.Resource("arangoprofile"))} } // ArangoProfiles returns an object that can list and get ArangoProfiles. func (s *arangoProfileLister) ArangoProfiles(namespace string) ArangoProfileNamespaceLister { - return arangoProfileNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoProfileNamespaceLister{listers.NewNamespaced[*v1alpha1.ArangoProfile](s.ResourceIndexer, namespace)} } // ArangoProfileNamespaceLister helps list and get ArangoProfiles. @@ -78,26 +70,5 @@ type ArangoProfileNamespaceLister interface { // arangoProfileNamespaceLister implements the ArangoProfileNamespaceLister // interface. type arangoProfileNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoProfiles in the indexer for a given namespace. -func (s arangoProfileNamespaceLister) List(selector labels.Selector) (ret []*v1alpha1.ArangoProfile, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha1.ArangoProfile)) - }) - return ret, err -} - -// Get retrieves the ArangoProfile from the indexer for a given namespace and name. -func (s arangoProfileNamespaceLister) Get(name string) (*v1alpha1.ArangoProfile, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1alpha1.Resource("arangoprofile"), name) - } - return obj.(*v1alpha1.ArangoProfile), nil + listers.ResourceIndexer[*v1alpha1.ArangoProfile] } diff --git a/pkg/generated/listers/scheduler/v1alpha1/expansion_generated.go b/pkg/generated/listers/scheduler/v1alpha1/expansion_generated.go index 06299687c..3190daa65 100644 --- a/pkg/generated/listers/scheduler/v1alpha1/expansion_generated.go +++ b/pkg/generated/listers/scheduler/v1alpha1/expansion_generated.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/listers/scheduler/v1beta1/arangoprofile.go b/pkg/generated/listers/scheduler/v1beta1/arangoprofile.go index f53124f3e..bbe794af8 100644 --- a/pkg/generated/listers/scheduler/v1beta1/arangoprofile.go +++ b/pkg/generated/listers/scheduler/v1beta1/arangoprofile.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1beta1 import ( v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoProfileLister interface { // arangoProfileLister implements the ArangoProfileLister interface. type arangoProfileLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1beta1.ArangoProfile] } // NewArangoProfileLister returns a new ArangoProfileLister. func NewArangoProfileLister(indexer cache.Indexer) ArangoProfileLister { - return &arangoProfileLister{indexer: indexer} -} - -// List lists all ArangoProfiles in the indexer. -func (s *arangoProfileLister) List(selector labels.Selector) (ret []*v1beta1.ArangoProfile, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.ArangoProfile)) - }) - return ret, err + return &arangoProfileLister{listers.New[*v1beta1.ArangoProfile](indexer, v1beta1.Resource("arangoprofile"))} } // ArangoProfiles returns an object that can list and get ArangoProfiles. func (s *arangoProfileLister) ArangoProfiles(namespace string) ArangoProfileNamespaceLister { - return arangoProfileNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoProfileNamespaceLister{listers.NewNamespaced[*v1beta1.ArangoProfile](s.ResourceIndexer, namespace)} } // ArangoProfileNamespaceLister helps list and get ArangoProfiles. @@ -78,26 +70,5 @@ type ArangoProfileNamespaceLister interface { // arangoProfileNamespaceLister implements the ArangoProfileNamespaceLister // interface. type arangoProfileNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoProfiles in the indexer for a given namespace. -func (s arangoProfileNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.ArangoProfile, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.ArangoProfile)) - }) - return ret, err -} - -// Get retrieves the ArangoProfile from the indexer for a given namespace and name. -func (s arangoProfileNamespaceLister) Get(name string) (*v1beta1.ArangoProfile, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1beta1.Resource("arangoprofile"), name) - } - return obj.(*v1beta1.ArangoProfile), nil + listers.ResourceIndexer[*v1beta1.ArangoProfile] } diff --git a/pkg/generated/listers/scheduler/v1beta1/arangoschedulerbatchjob.go b/pkg/generated/listers/scheduler/v1beta1/arangoschedulerbatchjob.go index d2eb5f9a2..5470d741c 100644 --- a/pkg/generated/listers/scheduler/v1beta1/arangoschedulerbatchjob.go +++ b/pkg/generated/listers/scheduler/v1beta1/arangoschedulerbatchjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1beta1 import ( v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoSchedulerBatchJobLister interface { // arangoSchedulerBatchJobLister implements the ArangoSchedulerBatchJobLister interface. type arangoSchedulerBatchJobLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1beta1.ArangoSchedulerBatchJob] } // NewArangoSchedulerBatchJobLister returns a new ArangoSchedulerBatchJobLister. func NewArangoSchedulerBatchJobLister(indexer cache.Indexer) ArangoSchedulerBatchJobLister { - return &arangoSchedulerBatchJobLister{indexer: indexer} -} - -// List lists all ArangoSchedulerBatchJobs in the indexer. -func (s *arangoSchedulerBatchJobLister) List(selector labels.Selector) (ret []*v1beta1.ArangoSchedulerBatchJob, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.ArangoSchedulerBatchJob)) - }) - return ret, err + return &arangoSchedulerBatchJobLister{listers.New[*v1beta1.ArangoSchedulerBatchJob](indexer, v1beta1.Resource("arangoschedulerbatchjob"))} } // ArangoSchedulerBatchJobs returns an object that can list and get ArangoSchedulerBatchJobs. func (s *arangoSchedulerBatchJobLister) ArangoSchedulerBatchJobs(namespace string) ArangoSchedulerBatchJobNamespaceLister { - return arangoSchedulerBatchJobNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoSchedulerBatchJobNamespaceLister{listers.NewNamespaced[*v1beta1.ArangoSchedulerBatchJob](s.ResourceIndexer, namespace)} } // ArangoSchedulerBatchJobNamespaceLister helps list and get ArangoSchedulerBatchJobs. @@ -78,26 +70,5 @@ type ArangoSchedulerBatchJobNamespaceLister interface { // arangoSchedulerBatchJobNamespaceLister implements the ArangoSchedulerBatchJobNamespaceLister // interface. type arangoSchedulerBatchJobNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoSchedulerBatchJobs in the indexer for a given namespace. -func (s arangoSchedulerBatchJobNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.ArangoSchedulerBatchJob, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.ArangoSchedulerBatchJob)) - }) - return ret, err -} - -// Get retrieves the ArangoSchedulerBatchJob from the indexer for a given namespace and name. -func (s arangoSchedulerBatchJobNamespaceLister) Get(name string) (*v1beta1.ArangoSchedulerBatchJob, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1beta1.Resource("arangoschedulerbatchjob"), name) - } - return obj.(*v1beta1.ArangoSchedulerBatchJob), nil + listers.ResourceIndexer[*v1beta1.ArangoSchedulerBatchJob] } diff --git a/pkg/generated/listers/scheduler/v1beta1/arangoschedulercronjob.go b/pkg/generated/listers/scheduler/v1beta1/arangoschedulercronjob.go index cc4e86c97..488298ca0 100644 --- a/pkg/generated/listers/scheduler/v1beta1/arangoschedulercronjob.go +++ b/pkg/generated/listers/scheduler/v1beta1/arangoschedulercronjob.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1beta1 import ( v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoSchedulerCronJobLister interface { // arangoSchedulerCronJobLister implements the ArangoSchedulerCronJobLister interface. type arangoSchedulerCronJobLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1beta1.ArangoSchedulerCronJob] } // NewArangoSchedulerCronJobLister returns a new ArangoSchedulerCronJobLister. func NewArangoSchedulerCronJobLister(indexer cache.Indexer) ArangoSchedulerCronJobLister { - return &arangoSchedulerCronJobLister{indexer: indexer} -} - -// List lists all ArangoSchedulerCronJobs in the indexer. -func (s *arangoSchedulerCronJobLister) List(selector labels.Selector) (ret []*v1beta1.ArangoSchedulerCronJob, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.ArangoSchedulerCronJob)) - }) - return ret, err + return &arangoSchedulerCronJobLister{listers.New[*v1beta1.ArangoSchedulerCronJob](indexer, v1beta1.Resource("arangoschedulercronjob"))} } // ArangoSchedulerCronJobs returns an object that can list and get ArangoSchedulerCronJobs. func (s *arangoSchedulerCronJobLister) ArangoSchedulerCronJobs(namespace string) ArangoSchedulerCronJobNamespaceLister { - return arangoSchedulerCronJobNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoSchedulerCronJobNamespaceLister{listers.NewNamespaced[*v1beta1.ArangoSchedulerCronJob](s.ResourceIndexer, namespace)} } // ArangoSchedulerCronJobNamespaceLister helps list and get ArangoSchedulerCronJobs. @@ -78,26 +70,5 @@ type ArangoSchedulerCronJobNamespaceLister interface { // arangoSchedulerCronJobNamespaceLister implements the ArangoSchedulerCronJobNamespaceLister // interface. type arangoSchedulerCronJobNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoSchedulerCronJobs in the indexer for a given namespace. -func (s arangoSchedulerCronJobNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.ArangoSchedulerCronJob, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.ArangoSchedulerCronJob)) - }) - return ret, err -} - -// Get retrieves the ArangoSchedulerCronJob from the indexer for a given namespace and name. -func (s arangoSchedulerCronJobNamespaceLister) Get(name string) (*v1beta1.ArangoSchedulerCronJob, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1beta1.Resource("arangoschedulercronjob"), name) - } - return obj.(*v1beta1.ArangoSchedulerCronJob), nil + listers.ResourceIndexer[*v1beta1.ArangoSchedulerCronJob] } diff --git a/pkg/generated/listers/scheduler/v1beta1/arangoschedulerdeployment.go b/pkg/generated/listers/scheduler/v1beta1/arangoschedulerdeployment.go index 227ad243d..11f956cc4 100644 --- a/pkg/generated/listers/scheduler/v1beta1/arangoschedulerdeployment.go +++ b/pkg/generated/listers/scheduler/v1beta1/arangoschedulerdeployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1beta1 import ( v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoSchedulerDeploymentLister interface { // arangoSchedulerDeploymentLister implements the ArangoSchedulerDeploymentLister interface. type arangoSchedulerDeploymentLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1beta1.ArangoSchedulerDeployment] } // NewArangoSchedulerDeploymentLister returns a new ArangoSchedulerDeploymentLister. func NewArangoSchedulerDeploymentLister(indexer cache.Indexer) ArangoSchedulerDeploymentLister { - return &arangoSchedulerDeploymentLister{indexer: indexer} -} - -// List lists all ArangoSchedulerDeployments in the indexer. -func (s *arangoSchedulerDeploymentLister) List(selector labels.Selector) (ret []*v1beta1.ArangoSchedulerDeployment, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.ArangoSchedulerDeployment)) - }) - return ret, err + return &arangoSchedulerDeploymentLister{listers.New[*v1beta1.ArangoSchedulerDeployment](indexer, v1beta1.Resource("arangoschedulerdeployment"))} } // ArangoSchedulerDeployments returns an object that can list and get ArangoSchedulerDeployments. func (s *arangoSchedulerDeploymentLister) ArangoSchedulerDeployments(namespace string) ArangoSchedulerDeploymentNamespaceLister { - return arangoSchedulerDeploymentNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoSchedulerDeploymentNamespaceLister{listers.NewNamespaced[*v1beta1.ArangoSchedulerDeployment](s.ResourceIndexer, namespace)} } // ArangoSchedulerDeploymentNamespaceLister helps list and get ArangoSchedulerDeployments. @@ -78,26 +70,5 @@ type ArangoSchedulerDeploymentNamespaceLister interface { // arangoSchedulerDeploymentNamespaceLister implements the ArangoSchedulerDeploymentNamespaceLister // interface. type arangoSchedulerDeploymentNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoSchedulerDeployments in the indexer for a given namespace. -func (s arangoSchedulerDeploymentNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.ArangoSchedulerDeployment, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.ArangoSchedulerDeployment)) - }) - return ret, err -} - -// Get retrieves the ArangoSchedulerDeployment from the indexer for a given namespace and name. -func (s arangoSchedulerDeploymentNamespaceLister) Get(name string) (*v1beta1.ArangoSchedulerDeployment, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1beta1.Resource("arangoschedulerdeployment"), name) - } - return obj.(*v1beta1.ArangoSchedulerDeployment), nil + listers.ResourceIndexer[*v1beta1.ArangoSchedulerDeployment] } diff --git a/pkg/generated/listers/scheduler/v1beta1/arangoschedulerpod.go b/pkg/generated/listers/scheduler/v1beta1/arangoschedulerpod.go index 40de6ef0f..dd7748142 100644 --- a/pkg/generated/listers/scheduler/v1beta1/arangoschedulerpod.go +++ b/pkg/generated/listers/scheduler/v1beta1/arangoschedulerpod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1beta1 import ( v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -42,25 +42,17 @@ type ArangoSchedulerPodLister interface { // arangoSchedulerPodLister implements the ArangoSchedulerPodLister interface. type arangoSchedulerPodLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1beta1.ArangoSchedulerPod] } // NewArangoSchedulerPodLister returns a new ArangoSchedulerPodLister. func NewArangoSchedulerPodLister(indexer cache.Indexer) ArangoSchedulerPodLister { - return &arangoSchedulerPodLister{indexer: indexer} -} - -// List lists all ArangoSchedulerPods in the indexer. -func (s *arangoSchedulerPodLister) List(selector labels.Selector) (ret []*v1beta1.ArangoSchedulerPod, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.ArangoSchedulerPod)) - }) - return ret, err + return &arangoSchedulerPodLister{listers.New[*v1beta1.ArangoSchedulerPod](indexer, v1beta1.Resource("arangoschedulerpod"))} } // ArangoSchedulerPods returns an object that can list and get ArangoSchedulerPods. func (s *arangoSchedulerPodLister) ArangoSchedulerPods(namespace string) ArangoSchedulerPodNamespaceLister { - return arangoSchedulerPodNamespaceLister{indexer: s.indexer, namespace: namespace} + return arangoSchedulerPodNamespaceLister{listers.NewNamespaced[*v1beta1.ArangoSchedulerPod](s.ResourceIndexer, namespace)} } // ArangoSchedulerPodNamespaceLister helps list and get ArangoSchedulerPods. @@ -78,26 +70,5 @@ type ArangoSchedulerPodNamespaceLister interface { // arangoSchedulerPodNamespaceLister implements the ArangoSchedulerPodNamespaceLister // interface. type arangoSchedulerPodNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all ArangoSchedulerPods in the indexer for a given namespace. -func (s arangoSchedulerPodNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.ArangoSchedulerPod, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.ArangoSchedulerPod)) - }) - return ret, err -} - -// Get retrieves the ArangoSchedulerPod from the indexer for a given namespace and name. -func (s arangoSchedulerPodNamespaceLister) Get(name string) (*v1beta1.ArangoSchedulerPod, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1beta1.Resource("arangoschedulerpod"), name) - } - return obj.(*v1beta1.ArangoSchedulerPod), nil + listers.ResourceIndexer[*v1beta1.ArangoSchedulerPod] } diff --git a/pkg/generated/listers/scheduler/v1beta1/expansion_generated.go b/pkg/generated/listers/scheduler/v1beta1/expansion_generated.go index 5a7a420fc..b497ed1b2 100644 --- a/pkg/generated/listers/scheduler/v1beta1/expansion_generated.go +++ b/pkg/generated/listers/scheduler/v1beta1/expansion_generated.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/generated/listers/storage/v1alpha/arangolocalstorage.go b/pkg/generated/listers/storage/v1alpha/arangolocalstorage.go index d2d199a1a..862102346 100644 --- a/pkg/generated/listers/storage/v1alpha/arangolocalstorage.go +++ b/pkg/generated/listers/storage/v1alpha/arangolocalstorage.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ package v1alpha import ( v1alpha "github.com/arangodb/kube-arangodb/pkg/apis/storage/v1alpha" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/listers" "k8s.io/client-go/tools/cache" ) @@ -43,30 +43,10 @@ type ArangoLocalStorageLister interface { // arangoLocalStorageLister implements the ArangoLocalStorageLister interface. type arangoLocalStorageLister struct { - indexer cache.Indexer + listers.ResourceIndexer[*v1alpha.ArangoLocalStorage] } // NewArangoLocalStorageLister returns a new ArangoLocalStorageLister. func NewArangoLocalStorageLister(indexer cache.Indexer) ArangoLocalStorageLister { - return &arangoLocalStorageLister{indexer: indexer} -} - -// List lists all ArangoLocalStorages in the indexer. -func (s *arangoLocalStorageLister) List(selector labels.Selector) (ret []*v1alpha.ArangoLocalStorage, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1alpha.ArangoLocalStorage)) - }) - return ret, err -} - -// Get retrieves the ArangoLocalStorage from the index for a given name. -func (s *arangoLocalStorageLister) Get(name string) (*v1alpha.ArangoLocalStorage, error) { - obj, exists, err := s.indexer.GetByKey(name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1alpha.Resource("arangolocalstorage"), name) - } - return obj.(*v1alpha.ArangoLocalStorage), nil + return &arangoLocalStorageLister{listers.New[*v1alpha.ArangoLocalStorage](indexer, v1alpha.Resource("arangolocalstorage"))} } diff --git a/pkg/generated/listers/storage/v1alpha/expansion_generated.go b/pkg/generated/listers/storage/v1alpha/expansion_generated.go index 41131ff88..0f66a0fbe 100644 --- a/pkg/generated/listers/storage/v1alpha/expansion_generated.go +++ b/pkg/generated/listers/storage/v1alpha/expansion_generated.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/pkg/handlers/backup/finalizer.go b/pkg/handlers/backup/finalizer.go index 33855dc07..df5370133 100644 --- a/pkg/handlers/backup/finalizer.go +++ b/pkg/handlers/backup/finalizer.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -34,7 +34,7 @@ import ( ) func (h *handler) finalize(backup *backupApi.ArangoBackup) error { - if backup.Finalizers == nil || len(backup.Finalizers) == 0 { + if len(backup.Finalizers) == 0 { return nil } diff --git a/pkg/handlers/backup/handler.go b/pkg/handlers/backup/handler.go index 1659167ec..78790de74 100644 --- a/pkg/handlers/backup/handler.go +++ b/pkg/handlers/backup/handler.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -289,7 +289,7 @@ func (h *handler) Handle(_ context.Context, item operation.Item) error { defer lock.Unlock() // Add owner reference - if b.OwnerReferences == nil || len(b.OwnerReferences) == 0 { + if len(b.OwnerReferences) == 0 { deployment, err := h.client.DatabaseV1().ArangoDeployments(b.Namespace).Get(context.Background(), b.Spec.Deployment.Name, meta.GetOptions{}) if err == nil { b.OwnerReferences = []meta.OwnerReference{ diff --git a/pkg/handlers/networking/route/handler.go b/pkg/handlers/networking/route/handler.go index bd6009a8b..3dc289045 100644 --- a/pkg/handlers/networking/route/handler.go +++ b/pkg/handlers/networking/route/handler.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -23,7 +23,6 @@ package route import ( "context" - apiErrors "k8s.io/apimachinery/pkg/api/errors" meta "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" @@ -34,6 +33,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/operatorV2/event" "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" ) var logger = logging.Global().RegisterAndGetLogger("networking-route-operator", logging.Info) @@ -56,7 +56,7 @@ func (h *handler) Handle(ctx context.Context, item operation.Item) error { object, err := util.WithKubernetesContextTimeoutP2A2(ctx, h.client.NetworkingV1alpha1().ArangoRoutes(item.Namespace).Get, item.Name, meta.GetOptions{}) if err != nil { - if apiErrors.IsNotFound(err) { + if kerrors.IsNotFound(err) { return nil } diff --git a/pkg/handlers/networking/route/handler_deployment.go b/pkg/handlers/networking/route/handler_deployment.go index 86f7faa06..622770b5c 100644 --- a/pkg/handlers/networking/route/handler_deployment.go +++ b/pkg/handlers/networking/route/handler_deployment.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -23,7 +23,6 @@ package route import ( "context" - apiErrors "k8s.io/apimachinery/pkg/api/errors" meta "k8s.io/apimachinery/pkg/apis/meta/v1" api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" @@ -32,6 +31,7 @@ import ( operator "github.com/arangodb/kube-arangodb/pkg/operatorV2" "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" ) func (h *handler) HandleArangoDeployment(ctx context.Context, item operation.Item, extension *networkingApi.ArangoRoute, status *networkingApi.ArangoRouteStatus) (bool, error) { @@ -43,7 +43,7 @@ func (h *handler) HandleArangoDeployment(ctx context.Context, item operation.Ite deployment, err := util.WithKubernetesContextTimeoutP2A2(ctx, h.client.DatabaseV1().ArangoDeployments(item.Namespace).Get, name, meta.GetOptions{}) if err != nil { - if apiErrors.IsNotFound(err) { + if kerrors.IsNotFound(err) { // Condition for Found should be set to false if util.Or( status.Conditions.Update(networkingApi.DeploymentFoundCondition, false, "ArangoDeployment not found", "ArangoDeployment not found"), diff --git a/pkg/handlers/networking/route/handler_destination.go b/pkg/handlers/networking/route/handler_destination.go index f6232c2f2..8c644d5e0 100644 --- a/pkg/handlers/networking/route/handler_destination.go +++ b/pkg/handlers/networking/route/handler_destination.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -48,6 +48,11 @@ func (h *handler) HandleArangoDestination(ctx context.Context, item operation.It func (h *handler) HandleArangoDestinationWithTargets(ctx context.Context, item operation.Item, extension *networkingApi.ArangoRoute, status *networkingApi.ArangoRouteStatus, depl *api.ArangoDeployment) (*operator.Condition, bool, error) { c, changed, err := h.HandleArangoDestination(ctx, item, extension, status, depl) + + if operator.IsTemporary(err) { + return nil, false, err + } + if c == nil && !c.Status && status.Target != nil { status.Target = nil changed = true diff --git a/pkg/handlers/networking/route/handler_destination_endpoints.go b/pkg/handlers/networking/route/handler_destination_endpoints.go index c67a9a8a1..edf616d94 100644 --- a/pkg/handlers/networking/route/handler_destination_endpoints.go +++ b/pkg/handlers/networking/route/handler_destination_endpoints.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ import ( "fmt" core "k8s.io/api/core/v1" + kerrors "k8s.io/apimachinery/pkg/api/errors" meta "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" @@ -48,7 +49,7 @@ func (h *handler) HandleArangoDestinationEndpoints(ctx context.Context, item ope s, err := util.WithKubernetesContextTimeoutP2A2(ctx, h.kubeClient.CoreV1().Services(endpoints.GetNamespace(extension)).Get, endpoints.GetName(), meta.GetOptions{}) if err != nil { - if api.IsNotFound(err) { + if kerrors.IsNotFound(err) { return &operator.Condition{ Status: false, Reason: "Destination Not Found", @@ -56,11 +57,7 @@ func (h *handler) HandleArangoDestinationEndpoints(ctx context.Context, item ope }, false, nil } - return &operator.Condition{ - Status: false, - Reason: "Destination Not Found", - Message: fmt.Sprintf("Unknown error for service `%s/%s`: %s", endpoints.GetNamespace(extension), endpoints.GetName(), err.Error()), - }, false, nil + return nil, false, operator.Temporary(err, "Unable to get service") } if !endpoints.Equals(s) { @@ -73,7 +70,7 @@ func (h *handler) HandleArangoDestinationEndpoints(ctx context.Context, item ope e, err := util.WithKubernetesContextTimeoutP2A2(ctx, h.kubeClient.CoreV1().Endpoints(endpoints.GetNamespace(extension)).Get, endpoints.GetName(), meta.GetOptions{}) if err != nil { - if api.IsNotFound(err) { + if kerrors.IsNotFound(err) { return &operator.Condition{ Status: false, Reason: "Destination Not Found", @@ -81,11 +78,7 @@ func (h *handler) HandleArangoDestinationEndpoints(ctx context.Context, item ope }, false, nil } - return &operator.Condition{ - Status: false, - Reason: "Destination Not Found", - Message: fmt.Sprintf("Unknown error for endpoints `%s/%s`: %s", endpoints.GetNamespace(extension), endpoints.GetName(), err.Error()), - }, false, nil + return nil, false, operator.Temporary(err, "Unable to get endpoints") } // Discover port name - empty names are allowed @@ -119,7 +112,11 @@ func (h *handler) HandleArangoDestinationEndpoints(ctx context.Context, item ope var target networkingApi.ArangoRouteStatusTarget target.Path = dest.GetPath() + target.Timeout = dest.GetTimeout() target.Type = networkingApi.ArangoRouteStatusTargetEndpointsType + target.Protocol = dest.GetProtocol().Get() + + target.Options = extension.Spec.Options.AsStatus() // Render Auth Settings diff --git a/pkg/handlers/networking/route/handler_destination_endpoints_test.go b/pkg/handlers/networking/route/handler_destination_endpoints_test.go index 469ce724d..3732b5dbb 100644 --- a/pkg/handlers/networking/route/handler_destination_endpoints_test.go +++ b/pkg/handlers/networking/route/handler_destination_endpoints_test.go @@ -96,6 +96,149 @@ func Test_Handler_Destination_Endpoints_Valid(t *testing.T) { require.Len(t, extension.Status.Target.RenderURLs(), 1) require.EqualValues(t, "http://127.0.0.1:10244/", extension.Status.Target.RenderURLs()[0]) + require.EqualValues(t, "http1", extension.Status.Target.Protocol) + + c, ok := extension.Status.Conditions.Get(networkingApi.DestinationValidCondition) + require.True(t, ok) + require.EqualValues(t, c.Reason, "Destination Found") + require.EqualValues(t, c.Reason, "Destination Found") + require.EqualValues(t, c.Hash, extension.Status.Target.Hash()) +} + +func Test_Handler_Destination_Endpoints_Valid_HTTP1(t *testing.T) { + // Setup + handler := newFakeHandler() + + // Arrange + extension := tests.NewMetaObject[*networkingApi.ArangoRoute](t, tests.FakeNamespace, "test", + func(t *testing.T, obj *networkingApi.ArangoRoute) { + obj.Spec.Deployment = util.NewType("deployment") + }, + func(t *testing.T, obj *networkingApi.ArangoRoute) { + obj.Spec.Destination = &networkingApi.ArangoRouteSpecDestination{ + Protocol: util.NewType(networkingApi.ArangoRouteDestinationProtocolHTTP1), + Endpoints: &networkingApi.ArangoRouteSpecDestinationEndpoints{ + Object: &sharedApi.Object{ + Name: "deployment", + }, + Port: util.NewType(intstr.FromInt32(10244)), + }, + } + }) + deployment := tests.NewMetaObject[*api.ArangoDeployment](t, tests.FakeNamespace, "deployment") + svc := tests.NewMetaObject[*core.Service](t, tests.FakeNamespace, "deployment", func(t *testing.T, obj *core.Service) { + obj.Spec.Ports = []core.ServicePort{ + { + Port: 10244, + }, + } + }) + endpoints := tests.NewMetaObject[*core.Endpoints](t, tests.FakeNamespace, "deployment", func(t *testing.T, obj *core.Endpoints) { + obj.Subsets = []core.EndpointSubset{ + { + Addresses: []core.EndpointAddress{ + { + IP: "127.0.0.1", + }, + }, + Ports: []core.EndpointPort{ + { + Name: "", + Port: 10244, + }, + }, + }, + } + }) + + refresh := tests.CreateObjects(t, handler.kubeClient, handler.client, &deployment, &extension, &svc, &endpoints) + + // Test + require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension))) + + // Refresh + refresh(t) + + // Assert + require.True(t, extension.Status.Conditions.IsTrue(networkingApi.SpecValidCondition)) + require.True(t, extension.Status.Conditions.IsTrue(networkingApi.DestinationValidCondition)) + require.True(t, extension.Status.Conditions.IsTrue(networkingApi.ReadyCondition)) + require.Equal(t, networkingApi.ArangoRouteStatusTargetEndpointsType, extension.Status.Target.Type) + + require.Len(t, extension.Status.Target.RenderURLs(), 1) + require.EqualValues(t, "http://127.0.0.1:10244/", extension.Status.Target.RenderURLs()[0]) + require.EqualValues(t, "http1", extension.Status.Target.Protocol) + + c, ok := extension.Status.Conditions.Get(networkingApi.DestinationValidCondition) + require.True(t, ok) + require.EqualValues(t, c.Reason, "Destination Found") + require.EqualValues(t, c.Reason, "Destination Found") + require.EqualValues(t, c.Hash, extension.Status.Target.Hash()) +} + +func Test_Handler_Destination_Endpoints_Valid_HTTP2(t *testing.T) { + // Setup + handler := newFakeHandler() + + // Arrange + extension := tests.NewMetaObject[*networkingApi.ArangoRoute](t, tests.FakeNamespace, "test", + func(t *testing.T, obj *networkingApi.ArangoRoute) { + obj.Spec.Deployment = util.NewType("deployment") + }, + func(t *testing.T, obj *networkingApi.ArangoRoute) { + obj.Spec.Destination = &networkingApi.ArangoRouteSpecDestination{ + Protocol: util.NewType(networkingApi.ArangoRouteDestinationProtocolHTTP2), + Endpoints: &networkingApi.ArangoRouteSpecDestinationEndpoints{ + Object: &sharedApi.Object{ + Name: "deployment", + }, + Port: util.NewType(intstr.FromInt32(10244)), + }, + } + }) + deployment := tests.NewMetaObject[*api.ArangoDeployment](t, tests.FakeNamespace, "deployment") + svc := tests.NewMetaObject[*core.Service](t, tests.FakeNamespace, "deployment", func(t *testing.T, obj *core.Service) { + obj.Spec.Ports = []core.ServicePort{ + { + Port: 10244, + }, + } + }) + endpoints := tests.NewMetaObject[*core.Endpoints](t, tests.FakeNamespace, "deployment", func(t *testing.T, obj *core.Endpoints) { + obj.Subsets = []core.EndpointSubset{ + { + Addresses: []core.EndpointAddress{ + { + IP: "127.0.0.1", + }, + }, + Ports: []core.EndpointPort{ + { + Name: "", + Port: 10244, + }, + }, + }, + } + }) + + refresh := tests.CreateObjects(t, handler.kubeClient, handler.client, &deployment, &extension, &svc, &endpoints) + + // Test + require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension))) + + // Refresh + refresh(t) + + // Assert + require.True(t, extension.Status.Conditions.IsTrue(networkingApi.SpecValidCondition)) + require.True(t, extension.Status.Conditions.IsTrue(networkingApi.DestinationValidCondition)) + require.True(t, extension.Status.Conditions.IsTrue(networkingApi.ReadyCondition)) + require.Equal(t, networkingApi.ArangoRouteStatusTargetEndpointsType, extension.Status.Target.Type) + + require.Len(t, extension.Status.Target.RenderURLs(), 1) + require.EqualValues(t, "http://127.0.0.1:10244/", extension.Status.Target.RenderURLs()[0]) + require.EqualValues(t, "http2", extension.Status.Target.Protocol) c, ok := extension.Status.Conditions.Get(networkingApi.DestinationValidCondition) require.True(t, ok) diff --git a/pkg/handlers/networking/route/handler_destination_service.go b/pkg/handlers/networking/route/handler_destination_service.go index de56f4efb..eac85d043 100644 --- a/pkg/handlers/networking/route/handler_destination_service.go +++ b/pkg/handlers/networking/route/handler_destination_service.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -33,6 +33,7 @@ import ( operator "github.com/arangodb/kube-arangodb/pkg/operatorV2" "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" ) func (h *handler) HandleArangoDestinationService(ctx context.Context, item operation.Item, extension *networkingApi.ArangoRoute, status *networkingApi.ArangoRouteStatus, deployment *api.ArangoDeployment, dest *networkingApi.ArangoRouteSpecDestination, svc *networkingApi.ArangoRouteSpecDestinationService) (*operator.Condition, bool, error) { @@ -48,7 +49,7 @@ func (h *handler) HandleArangoDestinationService(ctx context.Context, item opera s, err := util.WithKubernetesContextTimeoutP2A2(ctx, h.kubeClient.CoreV1().Services(svc.GetNamespace(extension)).Get, svc.GetName(), meta.GetOptions{}) if err != nil { - if api.IsNotFound(err) { + if kerrors.IsNotFound(err) { return &operator.Condition{ Status: false, Reason: "Destination Not Found", @@ -56,11 +57,7 @@ func (h *handler) HandleArangoDestinationService(ctx context.Context, item opera }, false, nil } - return &operator.Condition{ - Status: false, - Reason: "Destination Not Found", - Message: fmt.Sprintf("Unknown error for service `%s/%s`: %s", svc.GetNamespace(extension), svc.GetName(), err.Error()), - }, false, nil + return nil, false, operator.Temporary(err, "Unable to get service") } if !svc.Equals(s) { @@ -118,7 +115,11 @@ func (h *handler) HandleArangoDestinationService(ctx context.Context, item opera var target networkingApi.ArangoRouteStatusTarget target.Path = dest.GetPath() + target.Timeout = dest.GetTimeout() target.Type = networkingApi.ArangoRouteStatusTargetServiceType + target.Protocol = dest.GetProtocol().Get() + + target.Options = extension.Spec.Options.AsStatus() // Render Auth Settings diff --git a/pkg/handlers/networking/route/handler_destination_service_test.go b/pkg/handlers/networking/route/handler_destination_service_test.go index c62b354f2..dcab7a8bb 100644 --- a/pkg/handlers/networking/route/handler_destination_service_test.go +++ b/pkg/handlers/networking/route/handler_destination_service_test.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -72,7 +72,7 @@ func Test_Handler_Destination_Service_Missing(t *testing.T) { c, ok := extension.Status.Conditions.Get(networkingApi.DestinationValidCondition) require.True(t, ok) require.EqualValues(t, c.Reason, "Destination Not Found") - require.EqualValues(t, c.Message, "Unknown error for service `fake/deployment`: services \"deployment\" not found") + require.EqualValues(t, c.Message, "Service `fake/deployment` Not found") } func Test_Handler_Destination_Service_Valid(t *testing.T) { @@ -119,6 +119,115 @@ func Test_Handler_Destination_Service_Valid(t *testing.T) { require.Len(t, extension.Status.Target.RenderURLs(), 1) require.EqualValues(t, "http://deployment.fake.svc:10244/", extension.Status.Target.RenderURLs()[0]) + require.EqualValues(t, "http1", extension.Status.Target.Protocol) + + c, ok := extension.Status.Conditions.Get(networkingApi.DestinationValidCondition) + require.True(t, ok) + require.EqualValues(t, c.Reason, "Destination Found") + require.EqualValues(t, c.Reason, "Destination Found") + require.EqualValues(t, c.Hash, extension.Status.Target.Hash()) +} + +func Test_Handler_Destination_Service_Valid_HTTP1(t *testing.T) { + // Setup + handler := newFakeHandler() + + // Arrange + extension := tests.NewMetaObject[*networkingApi.ArangoRoute](t, tests.FakeNamespace, "test", + func(t *testing.T, obj *networkingApi.ArangoRoute) { + obj.Spec.Deployment = util.NewType("deployment") + }, + func(t *testing.T, obj *networkingApi.ArangoRoute) { + obj.Spec.Destination = &networkingApi.ArangoRouteSpecDestination{ + Protocol: util.NewType(networkingApi.ArangoRouteDestinationProtocolHTTP1), + Service: &networkingApi.ArangoRouteSpecDestinationService{ + Object: &sharedApi.Object{ + Name: "deployment", + }, + Port: util.NewType(intstr.FromInt32(10244)), + }, + } + }) + deployment := tests.NewMetaObject[*api.ArangoDeployment](t, tests.FakeNamespace, "deployment") + svc := tests.NewMetaObject[*core.Service](t, tests.FakeNamespace, "deployment", func(t *testing.T, obj *core.Service) { + obj.Spec.Ports = []core.ServicePort{ + { + Port: 10244, + }, + } + }) + + refresh := tests.CreateObjects(t, handler.kubeClient, handler.client, &deployment, &extension, &svc) + + // Test + require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension))) + + // Refresh + refresh(t) + + // Assert + require.True(t, extension.Status.Conditions.IsTrue(networkingApi.SpecValidCondition)) + require.True(t, extension.Status.Conditions.IsTrue(networkingApi.DestinationValidCondition)) + require.True(t, extension.Status.Conditions.IsTrue(networkingApi.ReadyCondition)) + require.Equal(t, networkingApi.ArangoRouteStatusTargetServiceType, extension.Status.Target.Type) + + require.Len(t, extension.Status.Target.RenderURLs(), 1) + require.EqualValues(t, "http://deployment.fake.svc:10244/", extension.Status.Target.RenderURLs()[0]) + require.EqualValues(t, "http1", extension.Status.Target.Protocol) + + c, ok := extension.Status.Conditions.Get(networkingApi.DestinationValidCondition) + require.True(t, ok) + require.EqualValues(t, c.Reason, "Destination Found") + require.EqualValues(t, c.Reason, "Destination Found") + require.EqualValues(t, c.Hash, extension.Status.Target.Hash()) +} + +func Test_Handler_Destination_Service_Valid_HTTP2(t *testing.T) { + // Setup + handler := newFakeHandler() + + // Arrange + extension := tests.NewMetaObject[*networkingApi.ArangoRoute](t, tests.FakeNamespace, "test", + func(t *testing.T, obj *networkingApi.ArangoRoute) { + obj.Spec.Deployment = util.NewType("deployment") + }, + func(t *testing.T, obj *networkingApi.ArangoRoute) { + obj.Spec.Destination = &networkingApi.ArangoRouteSpecDestination{ + Protocol: util.NewType(networkingApi.ArangoRouteDestinationProtocolHTTP2), + Service: &networkingApi.ArangoRouteSpecDestinationService{ + Object: &sharedApi.Object{ + Name: "deployment", + }, + Port: util.NewType(intstr.FromInt32(10244)), + }, + } + }) + deployment := tests.NewMetaObject[*api.ArangoDeployment](t, tests.FakeNamespace, "deployment") + svc := tests.NewMetaObject[*core.Service](t, tests.FakeNamespace, "deployment", func(t *testing.T, obj *core.Service) { + obj.Spec.Ports = []core.ServicePort{ + { + Port: 10244, + }, + } + }) + + refresh := tests.CreateObjects(t, handler.kubeClient, handler.client, &deployment, &extension, &svc) + + // Test + require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension))) + + // Refresh + refresh(t) + + // Assert + require.True(t, extension.Status.Conditions.IsTrue(networkingApi.SpecValidCondition)) + require.True(t, extension.Status.Conditions.IsTrue(networkingApi.DestinationValidCondition)) + require.True(t, extension.Status.Conditions.IsTrue(networkingApi.ReadyCondition)) + require.Equal(t, networkingApi.ArangoRouteStatusTargetServiceType, extension.Status.Target.Type) + + require.Len(t, extension.Status.Target.RenderURLs(), 1) + require.EqualValues(t, "http://deployment.fake.svc:10244/", extension.Status.Target.RenderURLs()[0]) + require.EqualValues(t, "http2", extension.Status.Target.Protocol) c, ok := extension.Status.Conditions.Get(networkingApi.DestinationValidCondition) require.True(t, ok) diff --git a/pkg/handlers/platform/chart/chart_test.go b/pkg/handlers/platform/chart/chart_test.go new file mode 100644 index 000000000..712cf951f --- /dev/null +++ b/pkg/handlers/platform/chart/chart_test.go @@ -0,0 +1,177 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package chart + +import ( + "testing" + + "github.com/stretchr/testify/require" + + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/tests" + "github.com/arangodb/kube-arangodb/pkg/util/tests/suite" +) + +func Test_ChartReconcile_EmptyChart(t *testing.T) { + handler := newFakeHandler() + + // Arrange + extension := tests.NewMetaObject[*platformApi.ArangoPlatformChart](t, tests.FakeNamespace, "example", + func(t *testing.T, obj *platformApi.ArangoPlatformChart) {}) + extension_invalid_name := tests.NewMetaObject[*platformApi.ArangoPlatformChart](t, tests.FakeNamespace, "example-wrong-name", + func(t *testing.T, obj *platformApi.ArangoPlatformChart) {}) + + refresh := tests.CreateObjects(t, handler.kubeClient, handler.client, &extension, &extension_invalid_name) + + t.Run("Missing chart", func(t *testing.T) { + // Test + require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension))) + + // Refresh + refresh(t) + + // Validate + require.False(t, extension.Status.Conditions.IsTrue(platformApi.SpecValidCondition)) + require.False(t, extension.Status.Conditions.IsTrue(platformApi.ReadyCondition)) + }) + + t.Run("Invalid chart", func(t *testing.T) { + // Arrange + tests.Apply(t, extension, func(t *testing.T, obj *platformApi.ArangoPlatformChart) { + obj.Spec.Definition = []byte("1234") + }) + tests.UpdateObjects(t, handler.kubeClient, handler.client, &extension) + + // Test + require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension))) + + // Refresh + refresh(t) + + // Validate + require.True(t, extension.Status.Conditions.IsTrue(platformApi.SpecValidCondition)) + require.NotNil(t, extension.Status.Info) + require.False(t, extension.Status.Info.Valid) + require.EqualValues(t, extension.Status.Info.Message, "Chart is invalid") + require.False(t, extension.Status.Conditions.IsTrue(platformApi.ReadyCondition)) + }) + + t.Run("Invalid chart name", func(t *testing.T) { + // Arrange + tests.Apply(t, extension_invalid_name, func(t *testing.T, obj *platformApi.ArangoPlatformChart) { + obj.Spec.Definition = suite.GetChart(t, "example", "1.0.0") + }) + tests.UpdateObjects(t, handler.kubeClient, handler.client, &extension_invalid_name) + + // Test + require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension_invalid_name))) + + // Refresh + refresh(t) + + // Validate + require.True(t, extension_invalid_name.Status.Conditions.IsTrue(platformApi.SpecValidCondition)) + require.NotNil(t, extension_invalid_name.Status.Info) + require.False(t, extension_invalid_name.Status.Info.Valid) + require.EqualValues(t, extension_invalid_name.Status.Info.Message, "Chart Name mismatch") + require.False(t, extension_invalid_name.Status.Conditions.IsTrue(platformApi.ReadyCondition)) + }) + + t.Run("Valid chart 1.0.0", func(t *testing.T) { + // Arrange + tests.Apply(t, extension, func(t *testing.T, obj *platformApi.ArangoPlatformChart) { + obj.Spec.Definition = suite.GetChart(t, "example", "1.0.0") + }) + tests.UpdateObjects(t, handler.kubeClient, handler.client, &extension) + + // Test + require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension))) + + // Refresh + refresh(t) + + // Validate + require.True(t, extension.Status.Conditions.IsTrue(platformApi.SpecValidCondition)) + require.NotNil(t, extension.Status.Info) + require.True(t, extension.Status.Info.Valid) + require.EqualValues(t, extension.Status.Info.Message, "") + require.NotNil(t, extension.Status.Info.Details) + require.EqualValues(t, "example", extension.Status.Info.Details.GetName()) + require.EqualValues(t, "1.0.0", extension.Status.Info.Details.GetVersion()) + require.EqualValues(t, util.SHA256(suite.GetChart(t, "example", "1.0.0")), extension.Status.Info.Checksum) + require.Nil(t, extension.Status.Info.Details.Platform) + require.True(t, extension.Status.Conditions.IsTrue(platformApi.ReadyCondition)) + }) + + t.Run("Valid chart 1.0.1", func(t *testing.T) { + // Arrange + tests.Apply(t, extension, func(t *testing.T, obj *platformApi.ArangoPlatformChart) { + obj.Spec.Definition = suite.GetChart(t, "example", "1.0.1") + }) + tests.UpdateObjects(t, handler.kubeClient, handler.client, &extension) + + // Test + require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension))) + + // Refresh + refresh(t) + + // Validate + require.True(t, extension.Status.Conditions.IsTrue(platformApi.SpecValidCondition)) + require.NotNil(t, extension.Status.Info) + require.True(t, extension.Status.Info.Valid) + require.EqualValues(t, extension.Status.Info.Message, "") + require.NotNil(t, extension.Status.Info.Details) + require.EqualValues(t, "example", extension.Status.Info.Details.GetName()) + require.EqualValues(t, "1.0.1", extension.Status.Info.Details.GetVersion()) + require.EqualValues(t, util.SHA256(suite.GetChart(t, "example", "1.0.1")), extension.Status.Info.Checksum) + require.NotNil(t, extension.Status.Info.Details.Platform) + require.True(t, extension.Status.Conditions.IsTrue(platformApi.ReadyCondition)) + }) + + t.Run("Valid chart 1.1.0", func(t *testing.T) { + // Arrange + tests.Apply(t, extension, func(t *testing.T, obj *platformApi.ArangoPlatformChart) { + obj.Spec.Definition = suite.GetChart(t, "example", "1.1.0") + }) + tests.UpdateObjects(t, handler.kubeClient, handler.client, &extension) + + // Test + require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension))) + + // Refresh + refresh(t) + + // Validate + require.True(t, extension.Status.Conditions.IsTrue(platformApi.SpecValidCondition)) + require.NotNil(t, extension.Status.Info) + require.True(t, extension.Status.Info.Valid) + require.EqualValues(t, extension.Status.Info.Message, "") + require.NotNil(t, extension.Status.Info.Details) + require.EqualValues(t, "example", extension.Status.Info.Details.GetName()) + require.EqualValues(t, "1.1.0", extension.Status.Info.Details.GetVersion()) + require.Nil(t, extension.Status.Info.Details.Platform) + require.EqualValues(t, util.SHA256(suite.GetChart(t, "example", "1.1.0")), extension.Status.Info.Checksum) + require.True(t, extension.Status.Conditions.IsTrue(platformApi.ReadyCondition)) + }) +} diff --git a/pkg/handlers/platform/chart/handler.go b/pkg/handlers/platform/chart/handler.go new file mode 100644 index 000000000..3467371b2 --- /dev/null +++ b/pkg/handlers/platform/chart/handler.go @@ -0,0 +1,209 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package chart + +import ( + "context" + + "helm.sh/helm/v3/pkg/chart" + apiErrors "k8s.io/apimachinery/pkg/api/errors" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" + + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + arangoClientSet "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned" + "github.com/arangodb/kube-arangodb/pkg/logging" + operator "github.com/arangodb/kube-arangodb/pkg/operatorV2" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/event" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/helm" +) + +var logger = logging.Global().RegisterAndGetLogger("platform-chart-operator", logging.Info) + +type handler struct { + client arangoClientSet.Interface + kubeClient kubernetes.Interface + + eventRecorder event.RecorderInstance + + operator operator.Operator +} + +func (h *handler) Name() string { + return Kind() +} + +func (h *handler) Handle(ctx context.Context, item operation.Item) error { + // Get Backup object. It also covers NotFound case + object, err := util.WithKubernetesContextTimeoutP2A2(ctx, h.client.PlatformV1alpha1().ArangoPlatformCharts(item.Namespace).Get, item.Name, meta.GetOptions{}) + if err != nil { + if apiErrors.IsNotFound(err) { + return nil + } + + return err + } + + status := object.Status.DeepCopy() + + changed, reconcileErr := operator.HandleP3WithStop(ctx, item, object, status, h.handle) + if reconcileErr != nil && !operator.IsReconcile(reconcileErr) { + logger.Err(reconcileErr).Warn("Fail for %s %s/%s", + item.Kind, + item.Namespace, + item.Name) + + return reconcileErr + } + + if !changed { + return reconcileErr + } + + logger.Debug("Updating %s %s/%s", + item.Kind, + item.Namespace, + item.Name) + + if _, err := operator.WithArangoPlatformChartUpdateStatusInterfaceRetry(context.Background(), h.client.PlatformV1alpha1().ArangoPlatformCharts(object.GetNamespace()), object, *status, meta.UpdateOptions{}); err != nil { + return err + } + + return reconcileErr +} + +func (h *handler) handle(ctx context.Context, item operation.Item, extension *platformApi.ArangoPlatformChart, status *platformApi.ArangoPlatformChartStatus) (bool, error) { + return operator.HandleP3WithCondition(ctx, &status.Conditions, platformApi.ReadyCondition, item, extension, status, h.HandleSpecValidity, h.HandleSpecData) +} + +func (h *handler) HandleSpecValidity(ctx context.Context, item operation.Item, extension *platformApi.ArangoPlatformChart, status *platformApi.ArangoPlatformChartStatus) (bool, error) { + if err := extension.Spec.Validate(); err != nil { + // We have received an error in the spec! + + logger.Err(err).Warn("Invalid Spec on %s", item.String()) + + if status.Conditions.Update(platformApi.SpecValidCondition, false, "Spec is invalid", "Spec is invalid") { + return true, operator.Stop("Invalid spec") + } + return false, operator.Stop("Invalid spec") + } + + if status.Conditions.Update(platformApi.SpecValidCondition, true, "Spec is valid", "Spec is valid") { + return true, nil + } + + return false, nil +} + +func (h *handler) HandleSpecData(ctx context.Context, item operation.Item, extension *platformApi.ArangoPlatformChart, status *platformApi.ArangoPlatformChartStatus) (bool, error) { + if status.Info != nil { + if status.Info.Checksum != extension.Spec.Definition.SHA256() { + status.Info = nil + return true, operator.Reconcile("Spec changed") + } + + if !status.Info.Valid { + return false, operator.Stop("Invalid Chart") + } + + // All fine + return false, nil + } + + chart, err := helm.Chart(extension.Spec.Definition).Get() + if err != nil { + status.Info = &platformApi.ChartStatusInfo{ + Definition: extension.Spec.Definition, + Checksum: extension.Spec.Definition.SHA256(), + Valid: false, + Message: "Chart is invalid", + } + + return true, operator.Reconcile("Spec changed") + } + + if chart.Chart().Name() != extension.GetName() { + status.Info = &platformApi.ChartStatusInfo{ + Definition: extension.Spec.Definition, + Checksum: extension.Spec.Definition.SHA256(), + Valid: false, + Message: "Chart Name mismatch", + } + + return true, operator.Reconcile("Spec changed") + } + + platform, err := chart.Platform() + if err != nil { + status.Info = &platformApi.ChartStatusInfo{ + Definition: extension.Spec.Definition, + Checksum: extension.Spec.Definition.SHA256(), + Valid: false, + Message: "Chart is invalid: Unable to get platform details", + } + + return true, operator.Reconcile("Spec changed") + } + + status.Info = &platformApi.ChartStatusInfo{ + Definition: extension.Spec.Definition, + Checksum: extension.Spec.Definition.SHA256(), + Valid: true, + Details: chartInfoExtract(chart.Chart(), platform), + } + + return true, operator.Reconcile("Spec changed") +} + +func (h *handler) CanBeHandled(item operation.Item) bool { + return item.Group == Group() && + item.Version == Version() && + item.Kind == Kind() +} + +func chartInfoExtract(chart *chart.Chart, platform *helm.Platform) *platformApi.ChartDetails { + if chart == nil || chart.Metadata == nil { + return nil + } + + r := &platformApi.ChartDetails{ + Name: chart.Name(), + Version: chart.Metadata.Version, + } + + if platform != nil { + var c platformApi.ChartDetailsPlatform + + if len(platform.Requirements) > 0 { + c.Requirements = make(platformApi.ChartDetailsPlatformRequirements, len(platform.Requirements)) + + for k, v := range platform.Requirements { + c.Requirements[k] = platformApi.ChartDetailsPlatformVersionConstrain(v) + } + } + + r.Platform = &c + } + + return r +} diff --git a/pkg/handlers/platform/chart/handler_test.go b/pkg/handlers/platform/chart/handler_test.go new file mode 100644 index 000000000..ea10bb51d --- /dev/null +++ b/pkg/handlers/platform/chart/handler_test.go @@ -0,0 +1,59 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package chart + +import ( + "testing" + + "github.com/stretchr/testify/require" + apiErrors "k8s.io/apimachinery/pkg/api/errors" + + "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" + "github.com/arangodb/kube-arangodb/pkg/util/tests" +) + +func Test_ObjectNotFound(t *testing.T) { + // Arrange + handler := newFakeHandler() + + i := newItem(operation.Add, "test", "test") + + actions := map[operation.Operation]bool{ + operation.Add: false, + operation.Update: false, + operation.Delete: false, + } + + // Act + for operation, shouldFail := range actions { + t.Run(string(operation), func(t *testing.T) { + err := tests.Handle(handler, i) + + // Assert + if shouldFail { + require.Error(t, err) + require.True(t, apiErrors.IsNotFound(err)) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/pkg/handlers/platform/chart/local.go b/pkg/handlers/platform/chart/local.go new file mode 100644 index 000000000..803c075c5 --- /dev/null +++ b/pkg/handlers/platform/chart/local.go @@ -0,0 +1,38 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package chart + +import ( + "github.com/arangodb/kube-arangodb/pkg/apis/platform" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" +) + +func Kind() string { + return platform.ArangoPlatformChartResourceKind +} + +func Group() string { + return platformApi.SchemeGroupVersion.Group +} + +func Version() string { + return platformApi.SchemeGroupVersion.Version +} diff --git a/pkg/handlers/platform/chart/register.go b/pkg/handlers/platform/chart/register.go new file mode 100644 index 000000000..599f5c087 --- /dev/null +++ b/pkg/handlers/platform/chart/register.go @@ -0,0 +1,55 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package chart + +import ( + "k8s.io/client-go/kubernetes" + + arangoClientSet "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned" + arangoInformer "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions" + operator "github.com/arangodb/kube-arangodb/pkg/operatorV2" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/event" +) + +// RegisterInformer into operator +func RegisterInformer(operator operator.Operator, recorder event.Recorder, client arangoClientSet.Interface, kubeClient kubernetes.Interface, informer arangoInformer.SharedInformerFactory) error { + if err := operator.RegisterInformer(informer.Platform().V1alpha1().ArangoPlatformCharts().Informer(), + Group(), + Version(), + Kind()); err != nil { + return err + } + + h := &handler{ + client: client, + kubeClient: kubeClient, + + eventRecorder: recorder.NewInstance(Group(), Version(), Kind()), + + operator: operator, + } + + if err := operator.RegisterHandler(h); err != nil { + return err + } + + return nil +} diff --git a/pkg/handlers/platform/chart/suite_test.go b/pkg/handlers/platform/chart/suite_test.go new file mode 100644 index 000000000..45f1fe57f --- /dev/null +++ b/pkg/handlers/platform/chart/suite_test.go @@ -0,0 +1,61 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package chart + +import ( + _ "embed" + + "k8s.io/client-go/kubernetes/fake" + + "github.com/arangodb/kube-arangodb/pkg/apis/apps" + appsApi "github.com/arangodb/kube-arangodb/pkg/apis/apps/v1" + fakeClientSet "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/fake" + operator "github.com/arangodb/kube-arangodb/pkg/operatorV2" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/event" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" +) + +func newFakeHandler() *handler { + f := fakeClientSet.NewSimpleClientset() + k := fake.NewSimpleClientset() + + h := &handler{ + client: f, + kubeClient: k, + eventRecorder: event.NewEventRecorder("mock", k).NewInstance(Group(), Version(), Kind()), + operator: operator.NewOperator("mock", "mock", "mock"), + } + + return h +} + +func newItem(o operation.Operation, namespace, name string) operation.Item { + return operation.Item{ + Group: appsApi.SchemeGroupVersion.Group, + Version: appsApi.SchemeGroupVersion.Version, + Kind: apps.ArangoJobResourceKind, + + Operation: o, + + Namespace: namespace, + Name: name, + } +} diff --git a/pkg/handlers/platform/shutdown/handler.go b/pkg/handlers/platform/shutdown/handler.go new file mode 100644 index 000000000..95274c131 --- /dev/null +++ b/pkg/handlers/platform/shutdown/handler.go @@ -0,0 +1,175 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package shutdown + +import ( + "context" + "fmt" + "strconv" + + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + core "k8s.io/api/core/v1" + apiErrors "k8s.io/apimachinery/pkg/api/errors" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" + + pbSharedV1 "github.com/arangodb/kube-arangodb/integrations/shared/v1/definition" + pbShutdownV1 "github.com/arangodb/kube-arangodb/integrations/shutdown/v1/definition" + "github.com/arangodb/kube-arangodb/pkg/logging" + operator "github.com/arangodb/kube-arangodb/pkg/operatorV2" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/event" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/constants" +) + +var logger = logging.Global().RegisterAndGetLogger("platform-pod-shutdown", logging.Info) + +type handler struct { + kubeClient kubernetes.Interface + + eventRecorder event.RecorderInstance + + operator operator.Operator +} + +func (h *handler) Name() string { + return Kind() +} + +func (h *handler) Handle(ctx context.Context, item operation.Item) error { + pod, err := util.WithKubernetesContextTimeoutP2A2(ctx, h.kubeClient.CoreV1().Pods(item.Namespace).Get, item.Name, meta.GetOptions{}) + if err != nil { + if apiErrors.IsNotFound(err) { + return nil + } + + return err + } + + // If not annotated, stop execution + if _, ok := pod.Annotations[constants.AnnotationShutdownManagedContainer]; !ok { + return nil + } + + for _, container := range pod.Status.ContainerStatuses { + v, ok := pod.Annotations[fmt.Sprintf("%s/%s", constants.AnnotationShutdownCoreContainer, container.Name)] + if !ok { + continue + } + + switch v { + case constants.AnnotationShutdownCoreContainerModeWait: + if container.State.Terminated == nil { + // Container is not yet stopped, skip shutdown + return nil + } + default: + if container.State.Terminated == nil { + // Container is not yet stopped, skip shutdown + return nil + } + } + } + + // All containers, which are expected to shutdown, are down + + for _, container := range pod.Status.ContainerStatuses { + v, ok := pod.Annotations[fmt.Sprintf("%s/%s", constants.AnnotationShutdownContainer, container.Name)] + if !ok { + continue + } + + // We did not reach running state, nothing to do + if container.State.Running == nil { + continue + } + + port, ok := h.getContainerPort(pod.Spec.Containers, container.Name, v) + if !ok { + // We did not find port, continue + continue + } + + if port.ContainerPort == 0 { + continue + } + + if pod.Status.PodIP == "" { + continue + } + + if err := util.WithKubernetesContextTimeoutP1A1(ctx, h.invokeShutdown, fmt.Sprintf("%s:%d", pod.Status.PodIP, port.ContainerPort)); err != nil { + logger.WrapObj(item).Err(err).Str("container", container.Name).Debug("Unable to send shutdown request") + } + + logger.WrapObj(item).Str("container", container.Name).Debug("Shutdown request sent") + } + + // Always return nil + return nil +} + +func (h *handler) CanBeHandled(item operation.Item) bool { + return item.Group == Group() && + item.Version == Version() && + item.Kind == Kind() +} + +func (h *handler) getContainerPort(containers []core.Container, container, port string) (core.ContainerPort, bool) { + if v, err := strconv.Atoi(port); err == nil { + return core.ContainerPort{ + ContainerPort: int32(v), + }, true + } + + for _, c := range containers { + if c.Name != container { + continue + } + + for _, p := range c.Ports { + if p.Name == port { + return p, true + } + } + } + + return core.ContainerPort{}, false +} + +func (h *handler) invokeShutdown(ctx context.Context, addr string) error { + conn, err := grpc.NewClient(addr, grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + return err + } + + defer conn.Close() + + client := pbShutdownV1.NewShutdownV1Client(conn) + + if _, err := client.Shutdown(ctx, &pbSharedV1.Empty{}); err != nil { + return err + } + + return nil +} diff --git a/pkg/handlers/platform/shutdown/local.go b/pkg/handlers/platform/shutdown/local.go new file mode 100644 index 000000000..7544cff02 --- /dev/null +++ b/pkg/handlers/platform/shutdown/local.go @@ -0,0 +1,33 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package shutdown + +func Kind() string { + return "Pod" +} + +func Group() string { + return "" +} + +func Version() string { + return "v1" +} diff --git a/pkg/handlers/platform/shutdown/register.go b/pkg/handlers/platform/shutdown/register.go new file mode 100644 index 000000000..6169dc0bc --- /dev/null +++ b/pkg/handlers/platform/shutdown/register.go @@ -0,0 +1,62 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package shutdown + +import ( + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/informers" + "k8s.io/client-go/kubernetes" + + operator "github.com/arangodb/kube-arangodb/pkg/operatorV2" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/event" + "github.com/arangodb/kube-arangodb/pkg/util/constants" +) + +// RegisterInformer into operator +func RegisterInformer(operator operator.Operator, recorder event.Recorder, kubeClient kubernetes.Interface, informer informers.SharedInformerFactory) error { + if err := operator.RegisterInformer(informer.Core().V1().Pods().Informer(), + Group(), + Version(), + Kind(), func(obj meta.Object) bool { + if anns := obj.GetAnnotations(); len(anns) != 0 { + if _, ok := anns[constants.AnnotationShutdownManagedContainer]; ok { + return true + } + } + return false + }); err != nil { + return err + } + + h := &handler{ + kubeClient: kubeClient, + + eventRecorder: recorder.NewInstance(Group(), Version(), Kind()), + + operator: operator, + } + + if err := operator.RegisterHandler(h); err != nil { + return err + } + + return nil +} diff --git a/pkg/handlers/platform/storage/handler.go b/pkg/handlers/platform/storage/handler.go new file mode 100644 index 000000000..b52b72c17 --- /dev/null +++ b/pkg/handlers/platform/storage/handler.go @@ -0,0 +1,120 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package storage + +import ( + "context" + + apiErrors "k8s.io/apimachinery/pkg/api/errors" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/kubernetes" + + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + arangoClientSet "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned" + "github.com/arangodb/kube-arangodb/pkg/logging" + operator "github.com/arangodb/kube-arangodb/pkg/operatorV2" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/event" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" + "github.com/arangodb/kube-arangodb/pkg/util" +) + +var logger = logging.Global().RegisterAndGetLogger("platform-storage-operator", logging.Info) + +type handler struct { + client arangoClientSet.Interface + kubeClient kubernetes.Interface + + eventRecorder event.RecorderInstance + + operator operator.Operator +} + +func (h *handler) Name() string { + return Kind() +} + +func (h *handler) Handle(ctx context.Context, item operation.Item) error { + // Get Backup object. It also covers NotFound case + object, err := util.WithKubernetesContextTimeoutP2A2(ctx, h.client.PlatformV1alpha1().ArangoPlatformStorages(item.Namespace).Get, item.Name, meta.GetOptions{}) + if err != nil { + if apiErrors.IsNotFound(err) { + return nil + } + + return err + } + + status := object.Status.DeepCopy() + + changed, reconcileErr := operator.HandleP3WithStop(ctx, item, object, status, h.handle) + if reconcileErr != nil && !operator.IsReconcile(reconcileErr) { + logger.Err(reconcileErr).Warn("Fail for %s %s/%s", + item.Kind, + item.Namespace, + item.Name) + + return reconcileErr + } + + if !changed { + return reconcileErr + } + + logger.Debug("Updating %s %s/%s", + item.Kind, + item.Namespace, + item.Name) + + if _, err := operator.WithArangoPlatformStorageUpdateStatusInterfaceRetry(context.Background(), h.client.PlatformV1alpha1().ArangoPlatformStorages(object.GetNamespace()), object, *status, meta.UpdateOptions{}); err != nil { + return err + } + + return reconcileErr +} + +func (h *handler) handle(ctx context.Context, item operation.Item, extension *platformApi.ArangoPlatformStorage, status *platformApi.ArangoPlatformStorageStatus) (bool, error) { + return operator.HandleP3WithCondition(ctx, &status.Conditions, platformApi.ReadyCondition, item, extension, status, h.HandleSpecValidity, h.HandleArangoDeployment) +} + +func (h *handler) HandleSpecValidity(ctx context.Context, item operation.Item, extension *platformApi.ArangoPlatformStorage, status *platformApi.ArangoPlatformStorageStatus) (bool, error) { + if err := extension.Spec.Validate(); err != nil { + // We have received an error in the spec! + + logger.Err(err).Warn("Invalid Spec on %s", item.String()) + + if status.Conditions.Update(platformApi.SpecValidCondition, false, "Spec is invalid", "Spec is invalid") { + return true, operator.Stop("Invalid spec") + } + return false, operator.Stop("Invalid spec") + } + + if status.Conditions.Update(platformApi.SpecValidCondition, true, "Spec is valid", "Spec is valid") { + return true, nil + } + + return false, nil +} + +func (h *handler) CanBeHandled(item operation.Item) bool { + return item.Group == Group() && + item.Version == Version() && + item.Kind == Kind() +} diff --git a/pkg/handlers/platform/storage/handler_deployment.go b/pkg/handlers/platform/storage/handler_deployment.go new file mode 100644 index 000000000..f027a13f8 --- /dev/null +++ b/pkg/handlers/platform/storage/handler_deployment.go @@ -0,0 +1,58 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package storage + +import ( + "context" + + apiErrors "k8s.io/apimachinery/pkg/api/errors" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + operator "github.com/arangodb/kube-arangodb/pkg/operatorV2" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" + "github.com/arangodb/kube-arangodb/pkg/util" +) + +func (h *handler) HandleArangoDeployment(ctx context.Context, item operation.Item, extension *platformApi.ArangoPlatformStorage, status *platformApi.ArangoPlatformStorageStatus) (bool, error) { + deployment, err := util.WithKubernetesContextTimeoutP2A2(ctx, h.client.DatabaseV1().ArangoDeployments(item.Namespace).Get, extension.GetName(), meta.GetOptions{}) + if err != nil { + if apiErrors.IsNotFound(err) { + // Condition for Found should be set to false + if util.Or( + status.Conditions.Update(platformApi.DeploymentFoundCondition, false, "ArangoDeployment not found", "ArangoDeployment not found"), + ) { + return true, operator.Reconcile("Conditions updated") + } + return false, operator.Stop("Deployment Not Found") + } + + return false, err + } + + // Condition for Found should be set to true + + if status.Conditions.UpdateWithHash(platformApi.DeploymentFoundCondition, true, "ArangoDeployment found", "ArangoDeployment found", string(deployment.GetUID())) { + return true, operator.Reconcile("Conditions updated") + } + + return false, nil +} diff --git a/pkg/handlers/platform/storage/handler_test.go b/pkg/handlers/platform/storage/handler_test.go new file mode 100644 index 000000000..45d629492 --- /dev/null +++ b/pkg/handlers/platform/storage/handler_test.go @@ -0,0 +1,59 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package storage + +import ( + "testing" + + "github.com/stretchr/testify/require" + apiErrors "k8s.io/apimachinery/pkg/api/errors" + + "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" + "github.com/arangodb/kube-arangodb/pkg/util/tests" +) + +func Test_ObjectNotFound(t *testing.T) { + // Arrange + handler := newFakeHandler() + + i := newItem(operation.Add, "test", "test") + + actions := map[operation.Operation]bool{ + operation.Add: false, + operation.Update: false, + operation.Delete: false, + } + + // Act + for operation, shouldFail := range actions { + t.Run(string(operation), func(t *testing.T) { + err := tests.Handle(handler, i) + + // Assert + if shouldFail { + require.Error(t, err) + require.True(t, apiErrors.IsNotFound(err)) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/pkg/handlers/platform/storage/local.go b/pkg/handlers/platform/storage/local.go new file mode 100644 index 000000000..d8ad5a777 --- /dev/null +++ b/pkg/handlers/platform/storage/local.go @@ -0,0 +1,38 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package storage + +import ( + "github.com/arangodb/kube-arangodb/pkg/apis/platform" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" +) + +func Kind() string { + return platform.ArangoPlatformStorageResourceKind +} + +func Group() string { + return platformApi.SchemeGroupVersion.Group +} + +func Version() string { + return platformApi.SchemeGroupVersion.Version +} diff --git a/pkg/handlers/platform/storage/register.go b/pkg/handlers/platform/storage/register.go new file mode 100644 index 000000000..1314e21cb --- /dev/null +++ b/pkg/handlers/platform/storage/register.go @@ -0,0 +1,55 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package storage + +import ( + "k8s.io/client-go/kubernetes" + + arangoClientSet "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned" + arangoInformer "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions" + operator "github.com/arangodb/kube-arangodb/pkg/operatorV2" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/event" +) + +// RegisterInformer into operator +func RegisterInformer(operator operator.Operator, recorder event.Recorder, client arangoClientSet.Interface, kubeClient kubernetes.Interface, informer arangoInformer.SharedInformerFactory) error { + if err := operator.RegisterInformer(informer.Platform().V1alpha1().ArangoPlatformStorages().Informer(), + Group(), + Version(), + Kind()); err != nil { + return err + } + + h := &handler{ + client: client, + kubeClient: kubeClient, + + eventRecorder: recorder.NewInstance(Group(), Version(), Kind()), + + operator: operator, + } + + if err := operator.RegisterHandler(h); err != nil { + return err + } + + return nil +} diff --git a/pkg/handlers/platform/storage/suite_test.go b/pkg/handlers/platform/storage/suite_test.go new file mode 100644 index 000000000..9b36fcc87 --- /dev/null +++ b/pkg/handlers/platform/storage/suite_test.go @@ -0,0 +1,59 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package storage + +import ( + "k8s.io/client-go/kubernetes/fake" + + "github.com/arangodb/kube-arangodb/pkg/apis/apps" + appsApi "github.com/arangodb/kube-arangodb/pkg/apis/apps/v1" + fakeClientSet "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/fake" + operator "github.com/arangodb/kube-arangodb/pkg/operatorV2" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/event" + "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" +) + +func newFakeHandler() *handler { + f := fakeClientSet.NewSimpleClientset() + k := fake.NewSimpleClientset() + + h := &handler{ + client: f, + kubeClient: k, + eventRecorder: event.NewEventRecorder("mock", k).NewInstance(Group(), Version(), Kind()), + operator: operator.NewOperator("mock", "mock", "mock"), + } + + return h +} + +func newItem(o operation.Operation, namespace, name string) operation.Item { + return operation.Item{ + Group: appsApi.SchemeGroupVersion.Group, + Version: appsApi.SchemeGroupVersion.Version, + Kind: apps.ArangoJobResourceKind, + + Operation: o, + + Namespace: namespace, + Name: name, + } +} diff --git a/pkg/handlers/policy/handler.go b/pkg/handlers/policy/handler.go index cc9201d50..06af36a14 100644 --- a/pkg/handlers/policy/handler.go +++ b/pkg/handlers/policy/handler.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -40,8 +40,8 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/globals" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/list" ) const ( @@ -142,9 +142,7 @@ func (h *handler) processBackupPolicy(policy *backupApi.ArangoBackupPolicy) back // Schedule new deployments listOptions := meta.ListOptions{} if policy.Spec.DeploymentSelector != nil && - (policy.Spec.DeploymentSelector.MatchLabels != nil && - len(policy.Spec.DeploymentSelector.MatchLabels) > 0 || - policy.Spec.DeploymentSelector.MatchExpressions != nil) { + (len(policy.Spec.DeploymentSelector.MatchLabels) > 0 || policy.Spec.DeploymentSelector.MatchExpressions != nil) { listOptions.LabelSelector = meta.FormatLabelSelector(policy.Spec.DeploymentSelector) } @@ -222,12 +220,10 @@ func (*handler) CanBeHandled(item operation.Item) bool { func (h *handler) listAllBackupsForPolicy(ctx context.Context, d *deployment.ArangoDeployment, policyName string) (util.List[*backupApi.ArangoBackup], error) { var r []*backupApi.ArangoBackup - if err := k8sutil.APIList[*backupApi.ArangoBackupList](ctx, h.client.BackupV1().ArangoBackups(d.Namespace), meta.ListOptions{ + r, err := list.APIList[*backupApi.ArangoBackupList, *backupApi.ArangoBackup](ctx, h.client.BackupV1().ArangoBackups(d.Namespace), meta.ListOptions{ Limit: globals.GetGlobals().Kubernetes().RequestBatchSize().Get(), - }, func(result *backupApi.ArangoBackupList, err error) error { - if err != nil { - return err - } + }, func(result *backupApi.ArangoBackupList) []*backupApi.ArangoBackup { + q := make([]*backupApi.ArangoBackup, 0, len(result.Items)) for _, b := range result.Items { if b.Spec.PolicyName == nil || *b.Spec.PolicyName != policyName { @@ -237,10 +233,14 @@ func (h *handler) listAllBackupsForPolicy(ctx context.Context, d *deployment.Ara continue } r = append(r, b.DeepCopy()) + + q = append(q, b.DeepCopy()) } - return nil - }); err != nil { + return q + }) + + if err != nil { return nil, errors.Wrap(err, "Failed to list ArangoBackups") } diff --git a/pkg/handlers/scheduler/admissions.go b/pkg/handlers/scheduler/admissions.go new file mode 100644 index 000000000..9765b67d0 --- /dev/null +++ b/pkg/handlers/scheduler/admissions.go @@ -0,0 +1,43 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package scheduler + +import ( + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/handlers/scheduler/webhooks/policies" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants" + "github.com/arangodb/kube-arangodb/pkg/util/kclient" + "github.com/arangodb/kube-arangodb/pkg/webhook" +) + +func WebhookAdmissions(client kclient.Client) webhook.Admissions { + return webhook.Admissions{ + webhook.NewAdmissionHandler[*core.Pod]( + "policies", + constants.PodGroup, + constants.PodVersionV1, + constants.PodKind, + constants.PodResource, + policies.NewPoliciesPodHandler(client), + ), + } +} diff --git a/pkg/handlers/scheduler/batchjob/handler_manage_test.go b/pkg/handlers/scheduler/batchjob/handler_manage_test.go index ccd96c49c..c23c4c685 100644 --- a/pkg/handlers/scheduler/batchjob/handler_manage_test.go +++ b/pkg/handlers/scheduler/batchjob/handler_manage_test.go @@ -25,9 +25,12 @@ import ( "github.com/stretchr/testify/require" batch "k8s.io/api/batch/v1" + core "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" + schedulerPodApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1/pod" + schedulerPodResourcesApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1/pod/resources" "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/tests" @@ -205,7 +208,20 @@ func Test_Handler_Profile(t *testing.T) { handler := newFakeHandler() // Arrange - profile := tests.NewMetaObject[*schedulerApi.ArangoProfile](t, tests.FakeNamespace, "test", tests.MarkArangoProfileAsReady) + profile := tests.NewMetaObject[*schedulerApi.ArangoProfile](t, tests.FakeNamespace, "test", func(t *testing.T, obj *schedulerApi.ArangoProfile) { + obj.Spec.Template = &schedulerApi.ProfileTemplate{ + Pod: &schedulerPodApi.Pod{ + Volumes: &schedulerPodResourcesApi.Volumes{ + Volumes: []core.Volume{ + { + Name: "test", + VolumeSource: core.VolumeSource{}, + }, + }, + }, + }, + } + }, tests.MarkArangoProfileAsReady) extension := tests.NewMetaObject[*schedulerApi.ArangoSchedulerBatchJob](t, tests.FakeNamespace, "test", func(t *testing.T, obj *schedulerApi.ArangoSchedulerBatchJob) { obj.Spec.Profiles = []string{profile.GetName()} @@ -227,4 +243,9 @@ func Test_Handler_Profile(t *testing.T) { require.Len(t, extension.Status.Profiles, 1) require.Equal(t, profile.GetName(), extension.Status.Profiles[0]) + + require.Len(t, extension.Status.Profiles, 1) + require.Equal(t, profile.GetName(), extension.Status.Profiles[0]) + require.Len(t, batchJob.Spec.Template.Spec.Volumes, 1) + require.EqualValues(t, "test", batchJob.Spec.Template.Spec.Volumes[0].Name) } diff --git a/pkg/handlers/scheduler/cronjob/handler_manage_test.go b/pkg/handlers/scheduler/cronjob/handler_manage_test.go index 811b03994..27b368183 100644 --- a/pkg/handlers/scheduler/cronjob/handler_manage_test.go +++ b/pkg/handlers/scheduler/cronjob/handler_manage_test.go @@ -29,6 +29,8 @@ import ( "k8s.io/apimachinery/pkg/types" schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" + schedulerPodApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1/pod" + schedulerPodResourcesApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1/pod/resources" "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/tests" @@ -206,7 +208,20 @@ func Test_Handler_Profile(t *testing.T) { handler := newFakeHandler() // Arrange - profile := tests.NewMetaObject[*schedulerApi.ArangoProfile](t, tests.FakeNamespace, "test", tests.MarkArangoProfileAsReady) + profile := tests.NewMetaObject[*schedulerApi.ArangoProfile](t, tests.FakeNamespace, "test", func(t *testing.T, obj *schedulerApi.ArangoProfile) { + obj.Spec.Template = &schedulerApi.ProfileTemplate{ + Pod: &schedulerPodApi.Pod{ + Volumes: &schedulerPodResourcesApi.Volumes{ + Volumes: []core.Volume{ + { + Name: "test", + VolumeSource: core.VolumeSource{}, + }, + }, + }, + }, + } + }, tests.MarkArangoProfileAsReady) extension := tests.NewMetaObject[*schedulerApi.ArangoSchedulerCronJob](t, tests.FakeNamespace, "test", func(t *testing.T, obj *schedulerApi.ArangoSchedulerCronJob) { obj.Spec.Profiles = []string{profile.GetName()} @@ -228,4 +243,9 @@ func Test_Handler_Profile(t *testing.T) { require.Len(t, extension.Status.Profiles, 1) require.Equal(t, profile.GetName(), extension.Status.Profiles[0]) + + require.Len(t, extension.Status.Profiles, 1) + require.Equal(t, profile.GetName(), extension.Status.Profiles[0]) + require.Len(t, cronJob.Spec.JobTemplate.Spec.Template.Spec.Volumes, 1) + require.EqualValues(t, "test", cronJob.Spec.JobTemplate.Spec.Template.Spec.Volumes[0].Name) } diff --git a/pkg/handlers/scheduler/deployment/handler.go b/pkg/handlers/scheduler/deployment/handler.go index 9ccd75159..6465df868 100644 --- a/pkg/handlers/scheduler/deployment/handler.go +++ b/pkg/handlers/scheduler/deployment/handler.go @@ -148,8 +148,8 @@ func (h *handler) HandleObject(ctx context.Context, item operation.Item, extensi Labels: extension.ObjectMeta.Labels, Annotations: extension.ObjectMeta.Annotations, } - extension.Spec.DeploymentSpec.DeepCopyInto(&obj.Spec) - extension.Spec.DeploymentSpec.Template.DeepCopyInto(&obj.Spec.Template) + deploymentTemplate.Spec.DeepCopyInto(&obj.Spec) + deploymentTemplate.Spec.Template.DeepCopyInto(&obj.Spec.Template) obj.OwnerReferences = append(obj.OwnerReferences, extension.AsOwner()) diff --git a/pkg/handlers/scheduler/deployment/handler_manage_test.go b/pkg/handlers/scheduler/deployment/handler_manage_test.go index e2f2b4927..07327a7d9 100644 --- a/pkg/handlers/scheduler/deployment/handler_manage_test.go +++ b/pkg/handlers/scheduler/deployment/handler_manage_test.go @@ -25,9 +25,12 @@ import ( "github.com/stretchr/testify/require" apps "k8s.io/api/apps/v1" + core "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" + schedulerPodApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1/pod" + schedulerPodResourcesApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1/pod/resources" "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/tests" @@ -202,10 +205,24 @@ func Test_Handler_Profile(t *testing.T) { handler := newFakeHandler() // Arrange - profile := tests.NewMetaObject[*schedulerApi.ArangoProfile](t, tests.FakeNamespace, "test", tests.MarkArangoProfileAsReady) + profile := tests.NewMetaObject[*schedulerApi.ArangoProfile](t, tests.FakeNamespace, "test", func(t *testing.T, obj *schedulerApi.ArangoProfile) { + obj.Spec.Template = &schedulerApi.ProfileTemplate{ + Pod: &schedulerPodApi.Pod{ + Volumes: &schedulerPodResourcesApi.Volumes{ + Volumes: []core.Volume{ + { + Name: "test", + VolumeSource: core.VolumeSource{}, + }, + }, + }, + }, + } + }, tests.MarkArangoProfileAsReady) extension := tests.NewMetaObject[*schedulerApi.ArangoSchedulerDeployment](t, tests.FakeNamespace, "test", func(t *testing.T, obj *schedulerApi.ArangoSchedulerDeployment) { obj.Spec.Profiles = []string{profile.GetName()} + obj.Spec.DeploymentSpec.Replicas = util.NewType[int32](10) }) deployment := tests.NewMetaObject[*apps.Deployment](t, tests.FakeNamespace, "test") @@ -222,6 +239,11 @@ func Test_Handler_Profile(t *testing.T) { tests.RefreshObjects(t, handler.kubeClient, handler.client, &deployment) require.NotNil(t, deployment) + require.NotNil(t, deployment.Spec.Replicas) + require.EqualValues(t, 10, *deployment.Spec.Replicas) + require.Len(t, extension.Status.Profiles, 1) require.Equal(t, profile.GetName(), extension.Status.Profiles[0]) + require.Len(t, deployment.Spec.Template.Spec.Volumes, 1) + require.EqualValues(t, "test", deployment.Spec.Template.Spec.Volumes[0].Name) } diff --git a/pkg/handlers/scheduler/pod/handler_manage_test.go b/pkg/handlers/scheduler/pod/handler_manage_test.go index 4d067f337..2810dd8ad 100644 --- a/pkg/handlers/scheduler/pod/handler_manage_test.go +++ b/pkg/handlers/scheduler/pod/handler_manage_test.go @@ -28,6 +28,8 @@ import ( "k8s.io/apimachinery/pkg/types" schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" + schedulerPodApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1/pod" + schedulerPodResourcesApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1/pod/resources" "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/tests" @@ -202,7 +204,20 @@ func Test_Handler_Profile(t *testing.T) { handler := newFakeHandler() // Arrange - profile := tests.NewMetaObject[*schedulerApi.ArangoProfile](t, tests.FakeNamespace, "test", tests.MarkArangoProfileAsReady) + profile := tests.NewMetaObject[*schedulerApi.ArangoProfile](t, tests.FakeNamespace, "test", func(t *testing.T, obj *schedulerApi.ArangoProfile) { + obj.Spec.Template = &schedulerApi.ProfileTemplate{ + Pod: &schedulerPodApi.Pod{ + Volumes: &schedulerPodResourcesApi.Volumes{ + Volumes: []core.Volume{ + { + Name: "test", + VolumeSource: core.VolumeSource{}, + }, + }, + }, + }, + } + }, tests.MarkArangoProfileAsReady) extension := tests.NewMetaObject[*schedulerApi.ArangoSchedulerPod](t, tests.FakeNamespace, "test", func(t *testing.T, obj *schedulerApi.ArangoSchedulerPod) { obj.Spec.Profiles = []string{profile.GetName()} @@ -224,4 +239,9 @@ func Test_Handler_Profile(t *testing.T) { require.Len(t, extension.Status.Profiles, 1) require.Equal(t, profile.GetName(), extension.Status.Profiles[0]) + + require.Len(t, extension.Status.Profiles, 1) + require.Equal(t, profile.GetName(), extension.Status.Profiles[0]) + require.Len(t, pod.Spec.Volumes, 1) + require.EqualValues(t, "test", pod.Spec.Volumes[0].Name) } diff --git a/pkg/handlers/scheduler/webhooks/policies/handler.go b/pkg/handlers/scheduler/webhooks/policies/handler.go new file mode 100644 index 000000000..29a187efc --- /dev/null +++ b/pkg/handlers/scheduler/webhooks/policies/handler.go @@ -0,0 +1,137 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package policies + +import ( + "context" + "strings" + + admission "k8s.io/api/admission/v1" + core "k8s.io/api/core/v1" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" + "github.com/arangodb/kube-arangodb/pkg/deployment/patch" + "github.com/arangodb/kube-arangodb/pkg/logging" + "github.com/arangodb/kube-arangodb/pkg/scheduler" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/constants" + "github.com/arangodb/kube-arangodb/pkg/util/errors" + kerrors "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" + "github.com/arangodb/kube-arangodb/pkg/util/kclient" + "github.com/arangodb/kube-arangodb/pkg/webhook" +) + +func NewPoliciesPodHandler(client kclient.Client) webhook.Handler[*core.Pod] { + return handler{ + client: client, + } +} + +var _ webhook.MutationHandler[*core.Pod] = handler{} + +type handler struct { + client kclient.Client +} + +func (h handler) CanHandle(ctx context.Context, log logging.Logger, t webhook.AdmissionRequestType, request *admission.AdmissionRequest, old, new *core.Pod) bool { + if request == nil { + return false + } + + if request.Operation != admission.Create { + return false + } + + if new == nil { + return false + } + + _, ok := new.GetLabels()[constants.ProfilesDeployment] + return ok +} + +func (h handler) Mutate(ctx context.Context, log logging.Logger, t webhook.AdmissionRequestType, request *admission.AdmissionRequest, old, new *core.Pod) (webhook.MutationResponse, error) { + if !h.CanHandle(ctx, log, t, request, old, new) { + return webhook.MutationResponse{}, errors.Errorf("Object cannot be handled") + } + + labels := new.GetLabels() + + v := labels[constants.ProfilesDeployment] + depl, err := h.client.Arango().DatabaseV1().ArangoDeployments(request.Namespace).Get(ctx, v, meta.GetOptions{}) + if err != nil { + if kerrors.IsNotFound(err) { + return webhook.MutationResponse{ + ValidationResponse: webhook.NewValidationResponse(false, "ArangoDeployment %s/%s not found", request.Namespace, v), + }, nil + } + return webhook.MutationResponse{ + ValidationResponse: webhook.NewValidationResponse(false, "Unable to get ArangoDeployment %s/%s: %s", request.Namespace, v, err.Error()), + }, nil + } + + profiles := util.FilterList(util.FormatList(strings.Split(labels[constants.ProfilesList], ","), func(s string) string { + return strings.TrimSpace(s) + }), func(s string) bool { + return s != "" + }) + + calculatedProfiles, profilesChecksum, err := scheduler.Profiles(ctx, h.client.Arango().SchedulerV1beta1().ArangoProfiles(depl.GetNamespace()), labels, profiles...) + if err != nil { + return webhook.MutationResponse{ + ValidationResponse: webhook.NewValidationResponse(false, "Unable to get ArangoProfiles: %s", err.Error()), + }, nil + } + + var template core.PodTemplateSpec + + template.Labels = new.GetLabels() + template.Annotations = new.GetAnnotations() + new.Spec.DeepCopyInto(&template.Spec) + + if template.Annotations == nil { + template.Annotations = map[string]string{} + } + + template.Annotations[constants.ProfilesAnnotationApplied] = "true" + template.Annotations[constants.ProfilesAnnotationChecksum] = profilesChecksum + template.Annotations[constants.ProfilesAnnotationProfiles] = strings.Join(util.FormatList(calculatedProfiles, func(a util.KV[string, schedulerApi.ProfileAcceptedTemplate]) string { + return a.K + }), ",") + + if err := schedulerApi.ProfileTemplates(util.FormatList(calculatedProfiles, func(a util.KV[string, schedulerApi.ProfileAcceptedTemplate]) *schedulerApi.ProfileTemplate { + return a.V.Template + })).RenderOnTemplate(&template); err != nil { + return webhook.MutationResponse{ + ValidationResponse: webhook.NewValidationResponse(false, "Unable to get apply ArangoProfiles: %s", err.Error()), + }, nil + } + + return webhook.MutationResponse{ + ValidationResponse: webhook.ValidationResponse{Allowed: true}, + Patch: []patch.Item{ + patch.ItemReplace(patch.NewPath("metadata", "labels"), template.Labels), + patch.ItemReplace(patch.NewPath("metadata", "annotations"), template.Annotations), + patch.ItemReplace(patch.NewPath("spec"), template.Spec), + }, + }, nil +} diff --git a/pkg/integrations/auth.go b/pkg/integrations/auth.go index 027f1f83b..c7ae54ad2 100644 --- a/pkg/integrations/auth.go +++ b/pkg/integrations/auth.go @@ -28,7 +28,7 @@ import ( "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" - "github.com/arangodb/kube-arangodb/pkg/util" + ugrpc "github.com/arangodb/kube-arangodb/pkg/util/grpc" ) func basicTokenAuthAuthorize(ctx context.Context, token string) error { @@ -37,7 +37,7 @@ func basicTokenAuthAuthorize(ctx context.Context, token string) error { return status.Errorf(codes.Unauthenticated, "metadata is not provided") } - values := md[util.AuthorizationGRPCHeader] + values := md[ugrpc.AuthorizationGRPCHeader] if len(values) == 0 { return status.Errorf(codes.Unauthenticated, "authorization token is not provided") } diff --git a/pkg/integrations/clients/client.go b/pkg/integrations/clients/client.go index 0b59a8016..7e78abcae 100644 --- a/pkg/integrations/clients/client.go +++ b/pkg/integrations/clients/client.go @@ -31,6 +31,7 @@ import ( "google.golang.org/grpc" "github.com/arangodb/kube-arangodb/pkg/util" + ugrpc "github.com/arangodb/kube-arangodb/pkg/util/grpc" "github.com/arangodb/kube-arangodb/pkg/util/shutdown" ) @@ -74,7 +75,7 @@ func client[T any](ctx context.Context, cfg *Config, in func(cc grpc.ClientConnI var opts []grpc.DialOption if token := cfg.Token; token != "" { - opts = append(opts, util.TokenAuthInterceptors(token)...) + opts = append(opts, ugrpc.TokenAuthInterceptors(token)...) } if cfg.TLS.Enabled { @@ -99,18 +100,18 @@ func client[T any](ctx context.Context, cfg *Config, in func(cc grpc.ClientConnI } if cfg.TLS.Fallback { - client, closer, err := util.NewOptionalTLSGRPCClient(ctx, in, cfg.Address, config, opts...) + client, closer, err := ugrpc.NewOptionalTLSGRPCClient(ctx, in, cfg.Address, config, opts...) if err != nil { return util.Default[T](), nil, err } return client, closer, nil } else { - opts = append(opts, util.ClientTLS(config)...) + opts = append(opts, ugrpc.ClientTLS(config)...) } } - client, closer, err := util.NewGRPCClient(ctx, in, cfg.Address, opts...) + client, closer, err := ugrpc.NewGRPCClient(ctx, in, cfg.Address, opts...) if err != nil { return util.Default[T](), nil, err } diff --git a/pkg/integrations/clients/pong_v1.go b/pkg/integrations/clients/pong_v1.go index 239c77a69..a2147eeaf 100644 --- a/pkg/integrations/clients/pong_v1.go +++ b/pkg/integrations/clients/pong_v1.go @@ -21,10 +21,13 @@ package clients import ( + "fmt" + "github.com/spf13/cobra" pbPongV1 "github.com/arangodb/kube-arangodb/integrations/pong/v1/definition" pbSharedV1 "github.com/arangodb/kube-arangodb/integrations/shared/v1/definition" + "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/shutdown" ) @@ -61,6 +64,15 @@ func (s *pongV1) Register(cmd *cobra.Command) error { return err } + services, err := client.Services(shutdown.Context(), &pbSharedV1.Empty{}) + if err != nil { + return err + } + + for _, svc := range services.GetServices() { + println(fmt.Sprintf("%s.%s: %s", svc.GetName(), svc.GetVersion(), util.BoolSwitch(svc.GetEnabled(), "Enabled", "Disabled"))) + } + return nil } return nil diff --git a/pkg/integrations/envoy_auth_v3.go b/pkg/integrations/envoy_auth_v3.go index 4fbdcfff6..10fcd59cc 100644 --- a/pkg/integrations/envoy_auth_v3.go +++ b/pkg/integrations/envoy_auth_v3.go @@ -27,7 +27,7 @@ import ( pbAuthenticationV1 "github.com/arangodb/kube-arangodb/integrations/authentication/v1/definition" pbImplEnvoyAuthV3 "github.com/arangodb/kube-arangodb/integrations/envoy/auth/v3" - "github.com/arangodb/kube-arangodb/pkg/util" + ugrpc "github.com/arangodb/kube-arangodb/pkg/util/grpc" "github.com/arangodb/kube-arangodb/pkg/util/svc" ) @@ -60,7 +60,7 @@ func (a *envoyAuthV3) Handler(ctx context.Context, cmd *cobra.Command) (svc.Hand return nil, err } - c, _, err := util.NewGRPCClient(ctx, pbAuthenticationV1.NewAuthenticationV1Client, v) + c, _, err := ugrpc.NewGRPCClient(ctx, pbAuthenticationV1.NewAuthenticationV1Client, v) if err != nil { return nil, err } diff --git a/pkg/integrations/flags.go b/pkg/integrations/flags.go index 1c4599c72..dcecdc467 100644 --- a/pkg/integrations/flags.go +++ b/pkg/integrations/flags.go @@ -36,12 +36,14 @@ import ( func NewFlagEnvHandler(fs *flag.FlagSet) FlagEnvHandler { return flagEnvHandler{ - fs: fs, + fs: fs, + visible: true, } } type FlagEnvHandler interface { WithPrefix(prefix string) FlagEnvHandler + WithVisibility(visible bool) FlagEnvHandler StringVar(p *string, name string, value string, usage string) error String(name string, value string, usage string) error @@ -60,8 +62,9 @@ type FlagEnvHandler interface { } type flagEnvHandler struct { - prefix string - fs *flag.FlagSet + prefix string + visible bool + fs *flag.FlagSet } func (f flagEnvHandler) StringVar(p *string, name string, value string, usage string) error { @@ -70,7 +73,15 @@ func (f flagEnvHandler) StringVar(p *string, name string, value string, usage st return err } - f.fs.StringVar(p, f.name(name), v, f.varDesc(name, usage)) + fname := f.name(name) + + f.fs.StringVar(p, fname, v, f.varDesc(name, usage)) + + if !f.visible { + if err := f.fs.MarkHidden(fname); err != nil { + return err + } + } return nil } @@ -81,7 +92,15 @@ func (f flagEnvHandler) String(name string, value string, usage string) error { return err } - f.fs.String(f.name(name), v, f.varDesc(name, usage)) + fname := f.name(name) + + f.fs.String(fname, v, f.varDesc(name, usage)) + + if !f.visible { + if err := f.fs.MarkHidden(fname); err != nil { + return err + } + } return nil } @@ -92,7 +111,15 @@ func (f flagEnvHandler) StringSliceVar(p *[]string, name string, value []string, return err } - f.fs.StringSliceVar(p, f.name(name), v, f.varDesc(name, usage)) + fname := f.name(name) + + f.fs.StringSliceVar(p, fname, v, f.varDesc(name, usage)) + + if !f.visible { + if err := f.fs.MarkHidden(fname); err != nil { + return err + } + } return nil } @@ -103,7 +130,15 @@ func (f flagEnvHandler) StringSlice(name string, value []string, usage string) e return err } - f.fs.StringSlice(f.name(name), v, f.varDesc(name, usage)) + fname := f.name(name) + + f.fs.StringSlice(fname, v, f.varDesc(name, usage)) + + if !f.visible { + if err := f.fs.MarkHidden(fname); err != nil { + return err + } + } return nil } @@ -114,7 +149,15 @@ func (f flagEnvHandler) BoolVar(p *bool, name string, value bool, usage string) return err } - f.fs.BoolVar(p, f.name(name), v, f.varDesc(name, usage)) + fname := f.name(name) + + f.fs.BoolVar(p, fname, v, f.varDesc(name, usage)) + + if !f.visible { + if err := f.fs.MarkHidden(fname); err != nil { + return err + } + } return nil } @@ -125,7 +168,15 @@ func (f flagEnvHandler) Bool(name string, value bool, usage string) error { return err } - f.fs.Bool(f.name(name), v, f.varDesc(name, usage)) + fname := f.name(name) + + f.fs.Bool(fname, v, f.varDesc(name, usage)) + + if !f.visible { + if err := f.fs.MarkHidden(fname); err != nil { + return err + } + } return nil } @@ -136,7 +187,15 @@ func (f flagEnvHandler) DurationVar(p *time.Duration, name string, value time.Du return err } - f.fs.DurationVar(p, f.name(name), v, f.varDesc(name, usage)) + fname := f.name(name) + + f.fs.DurationVar(p, fname, v, f.varDesc(name, usage)) + + if !f.visible { + if err := f.fs.MarkHidden(fname); err != nil { + return err + } + } return nil } @@ -147,7 +206,15 @@ func (f flagEnvHandler) Duration(name string, value time.Duration, usage string) return err } - f.fs.Duration(f.name(name), v, f.varDesc(name, usage)) + fname := f.name(name) + + f.fs.Duration(fname, v, f.varDesc(name, usage)) + + if !f.visible { + if err := f.fs.MarkHidden(fname); err != nil { + return err + } + } return nil } @@ -158,7 +225,15 @@ func (f flagEnvHandler) Uint16Var(p *uint16, name string, value uint16, usage st return err } - f.fs.Uint16Var(p, f.name(name), v, f.varDesc(name, usage)) + fname := f.name(name) + + f.fs.Uint16Var(p, fname, v, f.varDesc(name, usage)) + + if !f.visible { + if err := f.fs.MarkHidden(fname); err != nil { + return err + } + } return nil } @@ -169,7 +244,15 @@ func (f flagEnvHandler) Uint16(name string, value uint16, usage string) error { return err } - f.fs.Uint16(f.name(name), v, f.varDesc(name, usage)) + fname := f.name(name) + + f.fs.Uint16(fname, v, f.varDesc(name, usage)) + + if !f.visible { + if err := f.fs.MarkHidden(fname); err != nil { + return err + } + } return nil } @@ -198,8 +281,17 @@ func (f flagEnvHandler) name(n string) string { func (f flagEnvHandler) WithPrefix(prefix string) FlagEnvHandler { return flagEnvHandler{ - prefix: f.name(prefix), - fs: f.fs, + prefix: f.name(prefix), + fs: f.fs, + visible: f.visible, + } +} + +func (f flagEnvHandler) WithVisibility(visible bool) FlagEnvHandler { + return flagEnvHandler{ + prefix: f.prefix, + fs: f.fs, + visible: visible, } } diff --git a/pkg/integrations/integration.go b/pkg/integrations/integration.go index 9e756c22c..c725b02e9 100644 --- a/pkg/integrations/integration.go +++ b/pkg/integrations/integration.go @@ -32,6 +32,7 @@ type Factory func() Integration type Integration interface { Name() string + Description() string Register(cmd *cobra.Command, fs FlagEnvHandler) error @@ -39,6 +40,20 @@ type Integration interface { Handler(ctx context.Context, cmd *cobra.Command) (svc.Handler, error) } +type IntegrationVisibility interface { + Integration + + Visible() bool +} + +func GetIntegrationVisibility(in Integration) bool { + if v, ok := in.(IntegrationVisibility); ok { + return v.Visible() + } + + return true +} + type IntegrationEnablement interface { Integration diff --git a/pkg/integrations/register.go b/pkg/integrations/register.go index c5d0ae7ec..df4ee6a82 100644 --- a/pkg/integrations/register.go +++ b/pkg/integrations/register.go @@ -151,7 +151,7 @@ func (c *configuration) Register(cmd *cobra.Command) error { for _, service := range c.registered { prefix := fmt.Sprintf("integration.%s", service.Name()) - fs := f.WithPrefix(prefix) + fs := f.WithPrefix(prefix).WithVisibility(GetIntegrationVisibility(service)) internal, external := GetIntegrationEnablement(service) if err := errors.Errors( @@ -196,11 +196,7 @@ func (c *configuration) runWithContext(ctx context.Context, cancel context.Cance var internalHandlers, externalHandlers, healthHandlers []svc.Handler - pong := pbImplPongV1.New() - - internalHandlers = append(internalHandlers, pong) - externalHandlers = append(externalHandlers, pong) - healthHandlers = append(healthHandlers, pong) + var services []pbImplPongV1.Service for _, handler := range c.registered { if ok, err := cmd.Flags().GetBool(fmt.Sprintf("integration.%s", handler.Name())); err != nil { @@ -223,6 +219,17 @@ func (c *configuration) runWithContext(ctx context.Context, cancel context.Cance Bool("external", externalEnabled). Info("Service discovered") + ps := strings.Split(handler.Name(), ".") + if len(ps) < 2 { + return errors.Errorf("Expected atleast 2 elements") + } + + services = append(services, pbImplPongV1.Service{ + Name: strings.Join(ps[:len(ps)-1], "."), + Version: ps[len(ps)-1], + Enabled: ok, + }) + if ok && (internalEnabled || externalEnabled) { if svc, err := handler.Handler(ctx, cmd); err != nil { return err @@ -239,6 +246,15 @@ func (c *configuration) runWithContext(ctx context.Context, cancel context.Cance } } + pong, err := pbImplPongV1.New(services...) + if err != nil { + return err + } + + internalHandlers = append(internalHandlers, pong) + externalHandlers = append(externalHandlers, pong) + healthHandlers = append(healthHandlers, pong) + if c.health.shutdownEnabled { healthHandlers = append(healthHandlers, pbImplShutdownV1.New(cancel)) } diff --git a/pkg/integrations/scheduler_v2.go b/pkg/integrations/scheduler_v2.go new file mode 100644 index 000000000..9dd0bacb6 --- /dev/null +++ b/pkg/integrations/scheduler_v2.go @@ -0,0 +1,85 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package integrations + +import ( + "context" + + "github.com/spf13/cobra" + + pbImplSchedulerV2 "github.com/arangodb/kube-arangodb/integrations/scheduler/v2" + pbSchedulerV2 "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/constants" + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/helm" + "github.com/arangodb/kube-arangodb/pkg/util/kclient" + "github.com/arangodb/kube-arangodb/pkg/util/svc" +) + +func init() { + registerer.Register(pbSchedulerV2.Name, func() Integration { + return &schedulerV2{} + }) +} + +type schedulerV2 struct { + Configuration pbImplSchedulerV2.Configuration + Driver string +} + +func (b *schedulerV2) Name() string { + return pbSchedulerV2.Name +} + +func (b *schedulerV2) Description() string { + return "SchedulerV2 Integration" +} + +func (b *schedulerV2) Register(cmd *cobra.Command, fs FlagEnvHandler) error { + return errors.Errors( + fs.StringVar(&b.Configuration.Namespace, "namespace", constants.NamespaceWithDefault("default"), "Kubernetes Namespace"), + fs.StringVar(&b.Configuration.Deployment, "deployment", "", "ArangoDeployment Name"), + fs.StringVar(&b.Driver, "driver", string(helm.ConfigurationDriverSecret), "Helm Driver"), + ) +} + +func (b *schedulerV2) Handler(ctx context.Context, cmd *cobra.Command) (svc.Handler, error) { + client, ok := kclient.GetDefaultFactory().Client() + if !ok { + return nil, errors.Errorf("Unable to create Kubernetes Client") + } + + helm, err := helm.NewClient(helm.Configuration{ + Namespace: b.Configuration.Namespace, + Config: client.Config(), + Driver: (*helm.ConfigurationDriver)(util.NewType(b.Driver)), + }) + if err != nil { + return nil, errors.Wrapf(err, "Unable to create Helm Client") + } + + return pbImplSchedulerV2.New(client, helm, b.Configuration) +} + +func (*schedulerV2) Init(ctx context.Context, cmd *cobra.Command) error { + return nil +} diff --git a/pkg/integrations/sidecar/integration.go b/pkg/integrations/sidecar/integration.go index 731dbe0c7..c67666b8c 100644 --- a/pkg/integrations/sidecar/integration.go +++ b/pkg/integrations/sidecar/integration.go @@ -29,14 +29,6 @@ const ( ListenPortHealthName = "health" ) -type Integration interface { - Name() []string - Envs() ([]core.EnvVar, error) - GlobalEnvs() ([]core.EnvVar, error) - Volumes() ([]core.Volume, []core.VolumeMount, error) - Validate() error -} - func NewShutdownAnnotations(coreContainers []string) *schedulerApi.ProfileTemplate { pt := schedulerApi.ProfileTemplate{ Pod: &schedulerPodApi.Pod{ @@ -57,6 +49,7 @@ func NewIntegrationEnablement(integrations ...Integration) (*schedulerApi.Profil var envs, gEnvs []core.EnvVar var volumes []core.Volume var volumeMounts []core.VolumeMount + var annotations = map[string]string{} for _, integration := range integrations { name := strings.Join(integration.Name(), "/") @@ -72,6 +65,14 @@ func NewIntegrationEnablement(integrations ...Integration) (*schedulerApi.Profil volumeMounts = append(volumeMounts, lvolumeMounts...) } + if anns, err := getIntegrationAnnotations(integration); err != nil { + return nil, errors.Wrapf(err, "Failure in annotations %s", name) + } else { + for k, v := range anns { + annotations[k] = v + } + } + if lenvs, err := integration.Envs(); err != nil { return nil, errors.Wrapf(err, "Failure in envs %s", name) } else if len(lenvs) > 0 { @@ -92,6 +93,9 @@ func NewIntegrationEnablement(integrations ...Integration) (*schedulerApi.Profil return &schedulerApi.ProfileTemplate{ Priority: util.NewType(127), Pod: &schedulerPodApi.Pod{ + Metadata: &schedulerPodResourcesApi.Metadata{ + Annotations: annotations, + }, Volumes: &schedulerPodResourcesApi.Volumes{ Volumes: volumes, }, @@ -116,7 +120,7 @@ func NewIntegrationEnablement(integrations ...Integration) (*schedulerApi.Profil }, nil } -func NewIntegration(image *schedulerContainerResourcesApi.Image, integration *schedulerIntegrationApi.Sidecar) (*schedulerApi.ProfileTemplate, error) { +func NewIntegration(image *schedulerContainerResourcesApi.Image, integration *schedulerIntegrationApi.Sidecar, profiles ...*schedulerApi.ProfileTemplate) (*schedulerApi.ProfileTemplate, error) { // Arguments exePath := k8sutil.BinaryPath() @@ -205,12 +209,15 @@ func NewIntegration(image *schedulerContainerResourcesApi.Image, integration *sc }, } - pt.Pod.Metadata.Annotations[fmt.Sprintf("%s/%s", constants.AnnotationShutdownContainer, ContainerName)] = ListenPortHealthName - pt.Pod.Metadata.Annotations[constants.AnnotationShutdownManagedContainer] = "true" - pt.Container.All.Environments = &schedulerContainerResourcesApi.Environments{ Env: envs, } - return &pt, nil + res := &pt + + for _, prof := range profiles { + res = res.With(prof) + } + + return res, nil } diff --git a/pkg/integrations/sidecar/integration.scheduler.v2.go b/pkg/integrations/sidecar/integration.scheduler.v2.go new file mode 100644 index 000000000..02daa611b --- /dev/null +++ b/pkg/integrations/sidecar/integration.scheduler.v2.go @@ -0,0 +1,73 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package sidecar + +import ( + core "k8s.io/api/core/v1" + + api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" +) + +type IntegrationSchedulerV2 struct { + Core *Core + + DeploymentName string + Spec api.DeploymentSpec +} + +func (i IntegrationSchedulerV2) Name() []string { + return []string{"SCHEDULER", "V2"} +} + +func (i IntegrationSchedulerV2) Validate() error { + return nil +} + +func (i IntegrationSchedulerV2) Envs() ([]core.EnvVar, error) { + var envs = []core.EnvVar{ + { + Name: "INTEGRATION_SCHEDULER_V2", + Value: "true", + }, + { + Name: "INTEGRATION_SCHEDULER_V2_NAMESPACE", + ValueFrom: &core.EnvVarSource{ + FieldRef: &core.ObjectFieldSelector{ + FieldPath: "metadata.namespace", + }, + }, + }, + { + Name: "INTEGRATION_SCHEDULER_V2_DEPLOYMENT", + Value: i.DeploymentName, + }, + } + + return i.Core.Envs(i, envs...), nil +} + +func (i IntegrationSchedulerV2) GlobalEnvs() ([]core.EnvVar, error) { + return nil, nil +} + +func (i IntegrationSchedulerV2) Volumes() ([]core.Volume, []core.VolumeMount, error) { + return nil, nil, nil +} diff --git a/pkg/integrations/sidecar/integration.shutdown.v1.go b/pkg/integrations/sidecar/integration.shutdown.v1.go index 824579a55..ee0be1561 100644 --- a/pkg/integrations/sidecar/integration.shutdown.v1.go +++ b/pkg/integrations/sidecar/integration.shutdown.v1.go @@ -21,13 +21,24 @@ package sidecar import ( + "fmt" + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/constants" ) type IntegrationShutdownV1 struct { Core *Core } +func (i IntegrationShutdownV1) Annotations() (map[string]string, error) { + return map[string]string{ + fmt.Sprintf("%s/%s", constants.AnnotationShutdownContainer, ContainerName): ListenPortHealthName, + constants.AnnotationShutdownManagedContainer: "true", + }, nil +} + func (i IntegrationShutdownV1) Name() []string { return []string{"SHUTDOWN", "V1"} } diff --git a/pkg/integrations/sidecar/integration.storage.v1.go b/pkg/integrations/sidecar/integration.storage.v1.go new file mode 100644 index 000000000..4b0d64196 --- /dev/null +++ b/pkg/integrations/sidecar/integration.storage.v1.go @@ -0,0 +1,286 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package sidecar + +import ( + "net/url" + "path/filepath" + "strconv" + + core "k8s.io/api/core/v1" + + pbImplStorageV1 "github.com/arangodb/kube-arangodb/integrations/storage/v1" + mlApi "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/util/aws" + "github.com/arangodb/kube-arangodb/pkg/util/constants" + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" +) + +type IntegrationStorageV1 struct { + Core *Core + MLStorage *mlApi.ArangoMLStorage + PlatformStorage *platformApi.ArangoPlatformStorage +} + +func (i IntegrationStorageV1) Name() []string { + return []string{"STORAGE", "V1"} +} + +func (i IntegrationStorageV1) Validate() error { + if i.MLStorage == nil && i.PlatformStorage == nil { + return errors.Errorf("MLStorage and PlatformStorage are nil") + } + if i.MLStorage != nil && i.PlatformStorage != nil { + return errors.Errorf("Only one of MLStorage and PlatformStorage can be set") + } + + return nil +} + +func (i IntegrationStorageV1) Envs() ([]core.EnvVar, error) { + var envs = []core.EnvVar{ + { + Name: "INTEGRATION_STORAGE_V1", + Value: "true", + }, + } + + if storage := i.MLStorage; storage != nil { + if s3 := storage.Spec.GetBackend().GetS3(); s3 != nil { + + endpointURL, _ := url.Parse(s3.GetEndpoint()) + disableSSL := endpointURL.Scheme == "http" + + envs = append(envs, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_TYPE", + Value: string(pbImplStorageV1.ConfigurationTypeS3), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_ENDPOINT", + Value: s3.GetEndpoint(), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_ALLOW_INSECURE", + Value: strconv.FormatBool(s3.GetAllowInsecure()), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_DISABLE_SSL", + Value: strconv.FormatBool(disableSSL), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_REGION", + Value: s3.GetRegion(), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_BUCKET", + Value: storage.Spec.GetBucketName(), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_PROVIDER_TYPE", + Value: string(aws.ProviderTypeFile), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_SECRET_KEY", + Value: filepath.Join(mountPathStorageCredentials, constants.SecretCredentialsSecretKey), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_ACCESS_KEY", + Value: filepath.Join(mountPathStorageCredentials, constants.SecretCredentialsAccessKey), + }, + ) + + if !s3.GetCASecret().IsEmpty() { + + envs = append(envs, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_CA_CRT", + Value: filepath.Join(mountPathStorageCA, constants.SecretCACertificate), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_CA_KEY", + Value: filepath.Join(mountPathStorageCA, constants.SecretCAKey), + }, + ) + } + } + } + + if storage := i.PlatformStorage; storage != nil { + if s3 := storage.Spec.GetBackend().GetS3(); s3 != nil { + + endpointURL, _ := url.Parse(s3.GetEndpoint()) + disableSSL := endpointURL.Scheme == "http" + + envs = append(envs, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_TYPE", + Value: string(pbImplStorageV1.ConfigurationTypeS3), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_ENDPOINT", + Value: s3.GetEndpoint(), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_ALLOW_INSECURE", + Value: strconv.FormatBool(s3.GetAllowInsecure()), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_DISABLE_SSL", + Value: strconv.FormatBool(disableSSL), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_REGION", + Value: s3.GetRegion(), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_BUCKET", + Value: s3.GetBucketName(), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_PROVIDER_TYPE", + Value: string(aws.ProviderTypeFile), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_SECRET_KEY", + Value: filepath.Join(mountPathStorageCredentials, constants.SecretCredentialsSecretKey), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_ACCESS_KEY", + Value: filepath.Join(mountPathStorageCredentials, constants.SecretCredentialsAccessKey), + }, + ) + + if !s3.GetCASecret().IsEmpty() { + + envs = append(envs, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_CA_CRT", + Value: filepath.Join(mountPathStorageCA, constants.SecretCACertificate), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V1_S3_CA_KEY", + Value: filepath.Join(mountPathStorageCA, constants.SecretCAKey), + }, + ) + } + } + } + + return i.Core.Envs(i, envs...), nil +} + +func (i IntegrationStorageV1) Volumes() ([]core.Volume, []core.VolumeMount, error) { + var volumeMounts []core.VolumeMount + var volumes []core.Volume + + if storage := i.MLStorage; storage != nil { + if s := storage.Spec.GetBackend().GetS3(); s != nil { + secretObj := s.GetCredentialsSecret() + if secretObj.GetNamespace(storage) != storage.GetNamespace() { + return nil, nil, errors.New("secrets from different namespace are not supported yet") + } + volumes = append(volumes, k8sutil.CreateVolumeWithSecret(mountNameStorageCredentials, secretObj.GetName())) + volumeMounts = append(volumeMounts, core.VolumeMount{ + Name: mountNameStorageCredentials, + MountPath: mountPathStorageCredentials, + }) + + if caSecret := s.GetCASecret(); !caSecret.IsEmpty() { + if caSecret.GetNamespace(storage) != storage.GetNamespace() { + return nil, nil, errors.New("secrets from different namespace are not supported yet") + } + volumes = append(volumes, k8sutil.CreateVolumeWithSecret(mountNameStorageCA, caSecret.GetName())) + volumeMounts = append(volumeMounts, core.VolumeMount{ + Name: mountNameStorageCA, + MountPath: mountPathStorageCA, + }) + } + } + } + + if storage := i.PlatformStorage; storage != nil { + if s := storage.Spec.GetBackend().GetS3(); s != nil { + secretObj := s.GetCredentialsSecret() + if secretObj.GetNamespace(storage) != storage.GetNamespace() { + return nil, nil, errors.New("secrets from different namespace are not supported yet") + } + volumes = append(volumes, k8sutil.CreateVolumeWithSecret(mountNameStorageCredentials, secretObj.GetName())) + volumeMounts = append(volumeMounts, core.VolumeMount{ + Name: mountNameStorageCredentials, + MountPath: mountPathStorageCredentials, + }) + + if caSecret := s.GetCASecret(); !caSecret.IsEmpty() { + if caSecret.GetNamespace(storage) != storage.GetNamespace() { + return nil, nil, errors.New("secrets from different namespace are not supported yet") + } + volumes = append(volumes, k8sutil.CreateVolumeWithSecret(mountNameStorageCA, caSecret.GetName())) + volumeMounts = append(volumeMounts, core.VolumeMount{ + Name: mountNameStorageCA, + MountPath: mountPathStorageCA, + }) + } + } + } + + return volumes, volumeMounts, nil +} + +func (i IntegrationStorageV1) GlobalEnvs() ([]core.EnvVar, error) { + if storage := i.MLStorage; storage != nil { + return []core.EnvVar{ + { + Name: "BUCKET_STORAGE_MODE", + Value: "bucket", + }, + { + Name: "BLOB_STORE_CONTAINER", + Value: storage.Spec.GetBucketName(), + }, + { + Name: "BLOB_STORE_PATH", + Value: storage.Spec.GetBucketPath(), + }, + }, nil + } + + if storage := i.PlatformStorage; storage != nil { + return []core.EnvVar{ + { + Name: "BUCKET_STORAGE_MODE", + Value: "bucket", + }, + { + Name: "BLOB_STORE_CONTAINER", + Value: storage.Spec.GetBackend().GetS3().GetBucketName(), + }, + { + Name: "BLOB_STORE_PATH", + Value: storage.Spec.GetBackend().GetS3().GetBucketPrefix(), + }, + }, nil + } + + return nil, nil +} diff --git a/pkg/integrations/sidecar/integration.storage.v2.go b/pkg/integrations/sidecar/integration.storage.v2.go new file mode 100644 index 000000000..f0f513fde --- /dev/null +++ b/pkg/integrations/sidecar/integration.storage.v2.go @@ -0,0 +1,173 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package sidecar + +import ( + "net/url" + "path/filepath" + "strconv" + + core "k8s.io/api/core/v1" + + pbImplStorageV2 "github.com/arangodb/kube-arangodb/integrations/storage/v2" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/util/aws" + "github.com/arangodb/kube-arangodb/pkg/util/constants" + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" +) + +const ( + mountNameStorageCredentials = "integration-credentials" + mountNameStorageCA = "integration-ca" + + mountPathStorageCredentials = "/secrets/credentials" + mountPathStorageCA = "/secrets/ca" +) + +type IntegrationStorageV2 struct { + Core *Core + Storage *platformApi.ArangoPlatformStorage +} + +func (i IntegrationStorageV2) Name() []string { + return []string{"STORAGE", "V2"} +} + +func (i IntegrationStorageV2) Validate() error { + if i.Storage == nil { + return errors.Errorf("Storage is nil") + } + + if err := i.Storage.Spec.Validate(); err != nil { + return errors.Wrap(err, "Storage failed") + } + + if !i.Storage.Status.Conditions.IsTrue(platformApi.ReadyCondition) { + return errors.Errorf("Storage is not Ready") + } + + return nil +} + +func (i IntegrationStorageV2) Envs() ([]core.EnvVar, error) { + var envs = []core.EnvVar{ + { + Name: "INTEGRATION_STORAGE_V2", + Value: "true", + }, + } + + if s3 := i.Storage.Spec.GetBackend().GetS3(); s3 != nil { + + endpointURL, _ := url.Parse(s3.GetEndpoint()) + disableSSL := endpointURL.Scheme == "http" + + envs = append(envs, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V2_TYPE", + Value: string(pbImplStorageV2.ConfigurationTypeS3), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V2_S3_ENDPOINT", + Value: s3.GetEndpoint(), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V2_S3_ALLOW_INSECURE", + Value: strconv.FormatBool(s3.GetAllowInsecure()), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V2_S3_DISABLE_SSL", + Value: strconv.FormatBool(disableSSL), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V2_S3_REGION", + Value: s3.GetRegion(), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V2_S3_BUCKET_NAME", + Value: s3.GetBucketName(), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V2_S3_BUCKET_PREFIX", + Value: s3.GetBucketPrefix(), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V2_S3_PROVIDER_TYPE", + Value: string(aws.ProviderTypeFile), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V2_S3_PROVIDER_FILE_SECRET_KEY", + Value: filepath.Join(mountPathStorageCredentials, constants.SecretCredentialsSecretKey), + }, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V2_S3_PROVIDER_FILE_ACCESS_KEY", + Value: filepath.Join(mountPathStorageCredentials, constants.SecretCredentialsAccessKey), + }, + ) + + if !s3.GetCASecret().IsEmpty() { + + envs = append(envs, + core.EnvVar{ + Name: "INTEGRATION_STORAGE_V2_S3_CA", + Value: filepath.Join(mountPathStorageCA, constants.SecretCACertificate), + }, + ) + } + } + + return i.Core.Envs(i, envs...), nil +} + +func (i IntegrationStorageV2) GlobalEnvs() ([]core.EnvVar, error) { + return nil, nil +} + +func (i IntegrationStorageV2) Volumes() ([]core.Volume, []core.VolumeMount, error) { + var volumeMounts []core.VolumeMount + var volumes []core.Volume + + if s := i.Storage.Spec.GetBackend().GetS3(); s != nil { + secretObj := s.GetCredentialsSecret() + if secretObj.GetNamespace(i.Storage) != i.Storage.GetNamespace() { + return nil, nil, errors.New("secrets from different namespace are not supported yet") + } + volumes = append(volumes, k8sutil.CreateVolumeWithSecret(mountNameStorageCredentials, secretObj.GetName())) + volumeMounts = append(volumeMounts, core.VolumeMount{ + Name: mountNameStorageCredentials, + MountPath: mountPathStorageCredentials, + }) + + if caSecret := s.GetCASecret(); !caSecret.IsEmpty() { + if caSecret.GetNamespace(i.Storage) != i.Storage.GetNamespace() { + return nil, nil, errors.New("secrets from different namespace are not supported yet") + } + volumes = append(volumes, k8sutil.CreateVolumeWithSecret(mountNameStorageCA, caSecret.GetName())) + volumeMounts = append(volumeMounts, core.VolumeMount{ + Name: mountNameStorageCA, + MountPath: mountPathStorageCA, + }) + } + } + + return volumes, volumeMounts, nil +} diff --git a/pkg/integrations/sidecar/integration_interface.go b/pkg/integrations/sidecar/integration_interface.go new file mode 100644 index 000000000..3a341fa47 --- /dev/null +++ b/pkg/integrations/sidecar/integration_interface.go @@ -0,0 +1,45 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package sidecar + +import core "k8s.io/api/core/v1" + +type Integration interface { + Name() []string + Envs() ([]core.EnvVar, error) + GlobalEnvs() ([]core.EnvVar, error) + Volumes() ([]core.Volume, []core.VolumeMount, error) + Validate() error +} + +type IntegrationAnnotations interface { + Integration + + Annotations() (map[string]string, error) +} + +func getIntegrationAnnotations(int Integration) (map[string]string, error) { + if v, ok := int.(IntegrationAnnotations); ok { + return v.Annotations() + } + + return nil, nil +} diff --git a/pkg/integrations/storage_v1.go b/pkg/integrations/storage_v1.go index 5e78cc66c..00fc34f40 100644 --- a/pkg/integrations/storage_v1.go +++ b/pkg/integrations/storage_v1.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -25,23 +25,25 @@ import ( "github.com/spf13/cobra" - "github.com/arangodb/kube-arangodb/pkg/ml/storage" + pbImplStorageV1 "github.com/arangodb/kube-arangodb/integrations/storage/v1" + pbStorageV1 "github.com/arangodb/kube-arangodb/integrations/storage/v1/definition" + awsHelper "github.com/arangodb/kube-arangodb/pkg/util/aws" "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/svc" ) func init() { - registerer.Register(storage.Name, func() Integration { + registerer.Register(pbStorageV1.Name, func() Integration { return &storageV1{} }) } type storageV1 struct { - Configuration storage.Configuration + Configuration pbImplStorageV1.Configuration } func (b *storageV1) Name() string { - return storage.Name + return pbStorageV1.Name } func (b *storageV1) Description() string { @@ -50,23 +52,27 @@ func (b *storageV1) Description() string { func (b *storageV1) Register(cmd *cobra.Command, fs FlagEnvHandler) error { return errors.Errors( - fs.StringVar((*string)(&b.Configuration.Type), "type", string(storage.S3), "Type of the Storage Integration"), - fs.StringVar(&b.Configuration.S3.Endpoint, "s3.endpoint", "", "Endpoint of S3 API implementation"), - fs.StringVar(&b.Configuration.S3.CACrtFile, "s3.ca-crt", "", "Path to file containing CA certificate to validate endpoint connection"), - fs.StringVar(&b.Configuration.S3.CAKeyFile, "s3.ca-key", "", "Path to file containing keyfile to validate endpoint connection"), - fs.BoolVar(&b.Configuration.S3.AllowInsecure, "s3.allow-insecure", false, "If set to true, the Endpoint certificates won't be checked"), - fs.BoolVar(&b.Configuration.S3.DisableSSL, "s3.disable-ssl", false, "If set to true, the SSL won't be used when connecting to Endpoint"), - fs.StringVar(&b.Configuration.S3.Region, "s3.region", "", "Region"), + fs.StringVar((*string)(&b.Configuration.Type), "type", string(pbImplStorageV1.ConfigurationTypeS3), "Type of the Storage Integration"), + fs.StringVar(&b.Configuration.S3.Client.Endpoint, "s3.endpoint", "", "Endpoint of S3 API implementation"), + fs.StringSliceVar(&b.Configuration.S3.Client.TLS.CAFiles, "s3.ca-crt", nil, "Path to file containing CA certificate to validate endpoint connection"), + fs.BoolVar(&b.Configuration.S3.Client.TLS.Insecure, "s3.allow-insecure", false, "If set to true, the Endpoint certificates won't be checked"), + fs.BoolVar(&b.Configuration.S3.Client.DisableSSL, "s3.disable-ssl", false, "If set to true, the SSL won't be used when connecting to Endpoint"), + fs.StringVar(&b.Configuration.S3.Client.Region, "s3.region", "", "Region"), fs.StringVar(&b.Configuration.S3.BucketName, "s3.bucket", "", "Bucket name"), - fs.StringVar(&b.Configuration.S3.AccessKeyFile, "s3.access-key", "", "Path to file containing S3 AccessKey"), - fs.StringVar(&b.Configuration.S3.SecretKeyFile, "s3.secret-key", "", "Path to file containing S3 SecretKey"), + fs.StringVar((*string)(&b.Configuration.S3.Client.Provider.Type), "s3.provider.type", string(awsHelper.ProviderTypeFile), "S3 Credentials Provider type"), + fs.StringVar(&b.Configuration.S3.Client.Provider.File.AccessKeyIDFile, "s3.access-key", "", "Path to file containing S3 AccessKey"), + fs.StringVar(&b.Configuration.S3.Client.Provider.File.SecretAccessKeyFile, "s3.secret-key", "", "Path to file containing S3 SecretKey"), ) } func (b *storageV1) Handler(ctx context.Context, cmd *cobra.Command) (svc.Handler, error) { - return storage.NewService(ctx, b.Configuration) + return pbImplStorageV1.New(b.Configuration) } func (*storageV1) Init(ctx context.Context, cmd *cobra.Command) error { return nil } + +func (*storageV1) Visible() bool { + return false +} diff --git a/pkg/integrations/storage_v2.go b/pkg/integrations/storage_v2.go new file mode 100644 index 000000000..61523a257 --- /dev/null +++ b/pkg/integrations/storage_v2.go @@ -0,0 +1,75 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package integrations + +import ( + "context" + + "github.com/spf13/cobra" + + pbImplStorageV2 "github.com/arangodb/kube-arangodb/integrations/storage/v2" + pbStorageV2 "github.com/arangodb/kube-arangodb/integrations/storage/v2/definition" + awsHelper "github.com/arangodb/kube-arangodb/pkg/util/aws" + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/svc" +) + +func init() { + registerer.Register(pbStorageV2.Name, func() Integration { + return &storageV2{} + }) +} + +type storageV2 struct { + Configuration pbImplStorageV2.Configuration +} + +func (b *storageV2) Name() string { + return pbStorageV2.Name +} + +func (b *storageV2) Description() string { + return "StorageBucket V2 Integration" +} + +func (b *storageV2) Register(cmd *cobra.Command, fs FlagEnvHandler) error { + return errors.Errors( + fs.StringVar((*string)(&b.Configuration.Type), "type", string(pbImplStorageV2.ConfigurationTypeS3), "Type of the Storage Integration"), + fs.StringVar(&b.Configuration.S3.Client.Endpoint, "s3.endpoint", "", "Endpoint of S3 API implementation"), + fs.StringSliceVar(&b.Configuration.S3.Client.TLS.CAFiles, "s3.ca", nil, "Path to file containing CA certificate to validate endpoint connection"), + fs.BoolVar(&b.Configuration.S3.Client.TLS.Insecure, "s3.allow-insecure", false, "If set to true, the Endpoint certificates won't be checked"), + fs.BoolVar(&b.Configuration.S3.Client.DisableSSL, "s3.disable-ssl", false, "If set to true, the SSL won't be used when connecting to Endpoint"), + fs.StringVar(&b.Configuration.S3.Client.Region, "s3.region", "", "Region"), + fs.StringVar(&b.Configuration.S3.BucketName, "s3.bucket.name", "", "Bucket name"), + fs.StringVar(&b.Configuration.S3.BucketPrefix, "s3.bucket.prefix", "", "Bucket Prefix"), + fs.StringVar((*string)(&b.Configuration.S3.Client.Provider.Type), "s3.provider.type", string(awsHelper.ProviderTypeFile), "S3 Credentials Provider type"), + fs.StringVar(&b.Configuration.S3.Client.Provider.File.AccessKeyIDFile, "s3.provider.file.access-key", "", "Path to file containing S3 AccessKey"), + fs.StringVar(&b.Configuration.S3.Client.Provider.File.SecretAccessKeyFile, "s3.provider.file.secret-key", "", "Path to file containing S3 SecretKey"), + ) +} + +func (b *storageV2) Handler(ctx context.Context, cmd *cobra.Command) (svc.Handler, error) { + return pbImplStorageV2.New(b.Configuration) +} + +func (*storageV2) Init(ctx context.Context, cmd *cobra.Command) error { + return nil +} diff --git a/pkg/util/k8sutil/inspector/pod/v1/filters.go b/pkg/logging/http.go similarity index 66% rename from pkg/util/k8sutil/inspector/pod/v1/filters.go rename to pkg/logging/http.go index 201242799..16aa894ee 100644 --- a/pkg/util/k8sutil/inspector/pod/v1/filters.go +++ b/pkg/logging/http.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,25 +18,23 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package logging import ( - core "k8s.io/api/core/v1" -) + "net/http" -func FilterPodsByLabels(labels map[string]string) Filter { - return func(pod *core.Pod) bool { - for key, value := range labels { - v, ok := pod.Labels[key] - if !ok { - return false - } + "github.com/rs/zerolog" +) - if v != value { - return false - } +func HTTPRequestWrap(request *http.Request) Wrap { + return func(in *zerolog.Event) *zerolog.Event { + if request == nil { + return in } - return true + in = in.Str("method", request.Method) + in = in.Str("url", request.RequestURI) + + return in } } diff --git a/pkg/logging/logger.go b/pkg/logging/logger.go index 92bf22c30..437e8c824 100644 --- a/pkg/logging/logger.go +++ b/pkg/logging/logger.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -268,6 +268,7 @@ type Logger interface { Interface(key string, i interface{}) Logger Dur(key string, dur time.Duration) Logger Time(key string, time time.Time) Logger + Stack() Logger Trace(msg string, args ...interface{}) Debug(msg string, args ...interface{}) @@ -298,6 +299,12 @@ type chain struct { wrap Wrap } +func (c *chain) Stack() Logger { + return c.Wrap(func(in *zerolog.Event) *zerolog.Event { + return in.Stack() + }) +} + func (c *chain) TraceIO() LoggerIO { return loggerIO{ parent: c, diff --git a/pkg/operator/operator.go b/pkg/operator/operator.go index 659509e4b..5c2ed7677 100644 --- a/pkg/operator/operator.go +++ b/pkg/operator/operator.go @@ -38,6 +38,7 @@ import ( depldef "github.com/arangodb/kube-arangodb/pkg/apis/deployment" deplapi "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" "github.com/arangodb/kube-arangodb/pkg/apis/networking" + "github.com/arangodb/kube-arangodb/pkg/apis/platform" repldef "github.com/arangodb/kube-arangodb/pkg/apis/replication" replapi "github.com/arangodb/kube-arangodb/pkg/apis/replication/v1" "github.com/arangodb/kube-arangodb/pkg/apis/scheduler" @@ -48,6 +49,9 @@ import ( "github.com/arangodb/kube-arangodb/pkg/handlers/backup" "github.com/arangodb/kube-arangodb/pkg/handlers/job" "github.com/arangodb/kube-arangodb/pkg/handlers/networking/route" + platformChart "github.com/arangodb/kube-arangodb/pkg/handlers/platform/chart" + platformShutdown "github.com/arangodb/kube-arangodb/pkg/handlers/platform/shutdown" + platformStorage "github.com/arangodb/kube-arangodb/pkg/handlers/platform/storage" "github.com/arangodb/kube-arangodb/pkg/handlers/policy" schedulerBatchJobHandler "github.com/arangodb/kube-arangodb/pkg/handlers/scheduler/batchjob" schedulerCronJobHandler "github.com/arangodb/kube-arangodb/pkg/handlers/scheduler/cronjob" @@ -80,6 +84,7 @@ const ( mlOperator operatorV2type = "ml" analyticsOperator operatorV2type = "analytics" networkingOperator operatorV2type = "networking" + platformOperator operatorV2type = "platform" schedulerOperator operatorV2type = "scheduler" appsOperator operatorV2type = "apps" ) @@ -113,6 +118,7 @@ type Config struct { EnableML bool EnableAnalytics bool EnableNetworking bool + EnablePlatform bool EnableScheduler bool EnableBackup bool EnableApps bool @@ -137,6 +143,7 @@ type Dependencies struct { MlProbe *probe.ReadyProbe AnalyticsProbe *probe.ReadyProbe NetworkingProbe *probe.ReadyProbe + PlatformProbe *probe.ReadyProbe SchedulerProbe *probe.ReadyProbe AppsProbe *probe.ReadyProbe K2KClusterSyncProbe *probe.ReadyProbe @@ -213,6 +220,13 @@ func (o *Operator) Run() { go o.runWithoutLeaderElection("arango-networking-operator", constants.NetworkingLabelRole, o.onStartNetworking, o.Dependencies.NetworkingProbe) } } + if o.Config.EnablePlatform { + if !o.Config.SingleMode { + go o.runLeaderElection("arango-platform-operator", constants.PlatformLabelRole, o.onStartPlatform, o.Dependencies.PlatformProbe) + } else { + go o.runWithoutLeaderElection("arango-platform-operator", constants.PlatformLabelRole, o.onStartPlatform, o.Dependencies.PlatformProbe) + } + } if o.Config.EnableScheduler { if !o.Config.SingleMode { go o.runLeaderElection("arango-scheduler-operator", constants.SchedulerLabelRole, o.onStartScheduler, o.Dependencies.SchedulerProbe) @@ -295,6 +309,11 @@ func (o *Operator) onStartNetworking(stop <-chan struct{}) { o.onStartOperatorV2(networkingOperator, stop) } +// onStartPlatform starts the operator and run till given channel is closed. +func (o *Operator) onStartPlatform(stop <-chan struct{}) { + o.onStartOperatorV2(platformOperator, stop) +} + // onStartNetworking starts the operator and run till given channel is closed. func (o *Operator) onStartScheduler(stop <-chan struct{}) { o.onStartOperatorV2(schedulerOperator, stop) @@ -331,6 +350,9 @@ func (o *Operator) onStartOperatorV2(operatorType operatorV2type, stop <-chan st case networkingOperator: o.onStartOperatorV2Networking(operator, eventRecorder, o.Client.Arango(), o.Client.Kubernetes(), arangoInformer, kubeInformer) o.Dependencies.NetworkingProbe.SetReady() + case platformOperator: + o.onStartOperatorV2Platform(operator, eventRecorder, o.Client.Arango(), o.Client.Kubernetes(), arangoInformer, kubeInformer) + o.Dependencies.PlatformProbe.SetReady() case schedulerOperator: o.onStartOperatorV2Scheduler(operator, eventRecorder, o.Client.Arango(), o.Client.Kubernetes(), arangoInformer, kubeInformer) o.Dependencies.SchedulerProbe.SetReady() @@ -377,6 +399,26 @@ func (o *Operator) onStartOperatorV2Networking(operator operatorV2.Operator, rec } } +func (o *Operator) onStartOperatorV2Platform(operator operatorV2.Operator, recorder event.Recorder, client arangoClientSet.Interface, kubeClient kubernetes.Interface, informer arangoInformer.SharedInformerFactory, kubeInformer informers.SharedInformerFactory) { + checkFn := func() error { + _, err := o.Client.Arango().PlatformV1alpha1().ArangoPlatformStorages(o.Namespace).List(context.Background(), meta.ListOptions{}) + return err + } + o.waitForCRD(platform.ArangoPlatformStorageCRDName, checkFn) + + if err := platformStorage.RegisterInformer(operator, recorder, client, kubeClient, informer); err != nil { + panic(err) + } + + if err := platformChart.RegisterInformer(operator, recorder, client, kubeClient, informer); err != nil { + panic(err) + } + + if err := platformShutdown.RegisterInformer(operator, recorder, kubeClient, kubeInformer); err != nil { + panic(err) + } +} + func (o *Operator) onStartOperatorV2Scheduler(operator operatorV2.Operator, recorder event.Recorder, client arangoClientSet.Interface, kubeClient kubernetes.Interface, informer arangoInformer.SharedInformerFactory, kubeInformer informers.SharedInformerFactory) { checkFn := func() error { _, err := o.Client.Arango().SchedulerV1beta1().ArangoProfiles(o.Namespace).List(context.Background(), meta.ListOptions{}) diff --git a/pkg/operatorV2/errors_reconcile.go b/pkg/operatorV2/errors_reconcile.go index 966c5ef64..2888415e6 100644 --- a/pkg/operatorV2/errors_reconcile.go +++ b/pkg/operatorV2/errors_reconcile.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2023-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,7 +20,11 @@ package operator -import "fmt" +import ( + "fmt" + + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) func Reconcile(msg string, args ...interface{}) error { return reconcile{ @@ -37,11 +41,7 @@ func (r reconcile) Error() string { } func IsReconcile(err error) bool { - if err == nil { - return false - } - - if _, ok := err.(reconcile); ok { + if _, ok := errors.ExtractCause[reconcile](err); ok { return true } diff --git a/pkg/operatorV2/errors_stop.go b/pkg/operatorV2/errors_stop.go index 35da7d698..d71f90bb7 100644 --- a/pkg/operatorV2/errors_stop.go +++ b/pkg/operatorV2/errors_stop.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2023-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,7 +20,11 @@ package operator -import "fmt" +import ( + "fmt" + + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) func Stop(msg string, args ...interface{}) error { return stop{ @@ -37,11 +41,7 @@ func (r stop) Error() string { } func IsStop(err error) bool { - if err == nil { - return false - } - - if _, ok := err.(stop); ok { + if _, ok := errors.ExtractCause[stop](err); ok { return true } diff --git a/pkg/operatorV2/errors_temporary.go b/pkg/operatorV2/errors_temporary.go new file mode 100644 index 000000000..67614d2c5 --- /dev/null +++ b/pkg/operatorV2/errors_temporary.go @@ -0,0 +1,61 @@ +// +// DISCLAIMER +// +// Copyright 2023-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package operator + +import ( + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +func Temporary(cause error, msg string, args ...interface{}) error { + if cause == nil { + return temporary{ + cause: errors.Errorf(msg, args...), + } + } + + return temporary{ + cause: errors.Wrapf(cause, msg, args...), + } +} + +type temporary struct { + cause error +} + +func (t temporary) Error() string { + return t.cause.Error() +} + +func (t temporary) Temporary() bool { + return true +} + +func (t temporary) Cause() error { + return t.cause +} + +func IsTemporary(err error) bool { + if _, ok := errors.ExtractCause[temporary](err); ok { + return true + } + + return false +} diff --git a/pkg/operatorV2/handler_p0.generated.go b/pkg/operatorV2/handler_p0.generated.go index 492a0e785..e91c58db9 100644 --- a/pkg/operatorV2/handler_p0.generated.go +++ b/pkg/operatorV2/handler_p0.generated.go @@ -1,3 +1,23 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + package operator import ( diff --git a/pkg/operatorV2/handler_p1.generated.go b/pkg/operatorV2/handler_p1.generated.go index 9e455e237..fbaf3b77a 100644 --- a/pkg/operatorV2/handler_p1.generated.go +++ b/pkg/operatorV2/handler_p1.generated.go @@ -1,3 +1,23 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + package operator import ( diff --git a/pkg/operatorV2/handler_p2.generated.go b/pkg/operatorV2/handler_p2.generated.go index 7db3e05e4..065132334 100644 --- a/pkg/operatorV2/handler_p2.generated.go +++ b/pkg/operatorV2/handler_p2.generated.go @@ -1,3 +1,23 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + package operator import ( diff --git a/pkg/operatorV2/handler_p3.generated.go b/pkg/operatorV2/handler_p3.generated.go index 5bccf5f32..f51cd529f 100644 --- a/pkg/operatorV2/handler_p3.generated.go +++ b/pkg/operatorV2/handler_p3.generated.go @@ -1,3 +1,23 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + package operator import ( diff --git a/pkg/operatorV2/handler_p4.generated.go b/pkg/operatorV2/handler_p4.generated.go index 765207e7c..5be593055 100644 --- a/pkg/operatorV2/handler_p4.generated.go +++ b/pkg/operatorV2/handler_p4.generated.go @@ -1,3 +1,23 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + package operator import ( diff --git a/pkg/operatorV2/handler_p5.generated.go b/pkg/operatorV2/handler_p5.generated.go index 3fe2255e3..a1d1c1562 100644 --- a/pkg/operatorV2/handler_p5.generated.go +++ b/pkg/operatorV2/handler_p5.generated.go @@ -1,3 +1,23 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + package operator import ( diff --git a/pkg/operatorV2/handler_p6.generated.go b/pkg/operatorV2/handler_p6.generated.go index 6b156beef..a8d31b938 100644 --- a/pkg/operatorV2/handler_p6.generated.go +++ b/pkg/operatorV2/handler_p6.generated.go @@ -1,3 +1,23 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + package operator import ( diff --git a/pkg/operatorV2/handler_p7.generated.go b/pkg/operatorV2/handler_p7.generated.go index 8e8242bde..17b2691f4 100644 --- a/pkg/operatorV2/handler_p7.generated.go +++ b/pkg/operatorV2/handler_p7.generated.go @@ -1,3 +1,23 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + package operator import ( diff --git a/pkg/operatorV2/handler_p8.generated.go b/pkg/operatorV2/handler_p8.generated.go index da316e688..60dd2ee55 100644 --- a/pkg/operatorV2/handler_p8.generated.go +++ b/pkg/operatorV2/handler_p8.generated.go @@ -1,3 +1,23 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + package operator import ( diff --git a/pkg/operatorV2/handler_p9.generated.go b/pkg/operatorV2/handler_p9.generated.go index a2d30073e..b85aeb016 100644 --- a/pkg/operatorV2/handler_p9.generated.go +++ b/pkg/operatorV2/handler_p9.generated.go @@ -1,3 +1,23 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + package operator import ( diff --git a/pkg/operatorV2/operator.go b/pkg/operatorV2/operator.go index a192a69f9..6d3ce483c 100644 --- a/pkg/operatorV2/operator.go +++ b/pkg/operatorV2/operator.go @@ -63,7 +63,9 @@ func NewOperator(name, namespace, image string) Operator { name: name, namespace: namespace, image: image, - workqueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), name), + workqueue: workqueue.NewTypedRateLimitingQueueWithConfig(workqueue.DefaultTypedControllerRateLimiter[operation.Item](), workqueue.TypedRateLimitingQueueConfig[operation.Item]{ + Name: name, + }), } // Declaration of prometheus interface @@ -85,7 +87,7 @@ type operator struct { starters []Starter handlers []Handler - workqueue workqueue.RateLimitingInterface + workqueue workqueue.TypedRateLimitingInterface[operation.Item] // Implement prometheus collector *prometheusMetrics @@ -155,7 +157,7 @@ func (o *operator) RegisterStarter(starter Starter) error { } func (o *operator) EnqueueItem(item operation.Item) { - o.workqueue.Add(item.String()) + o.workqueue.Add(item) } func (o *operator) RegisterInformer(informer cache.SharedIndexInformer, group, version, kind string, filters ...InformerFilter) error { diff --git a/pkg/operatorV2/operator_worker.go b/pkg/operatorV2/operator_worker.go index 620004bb7..b7b17fcc1 100644 --- a/pkg/operatorV2/operator_worker.go +++ b/pkg/operatorV2/operator_worker.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -71,34 +71,21 @@ func (o *operator) processNextItem() bool { err := o.processObject(obj) if err != nil { - loggerWorker.Interface("object", obj).Error("Error during object handling: %v", err) + loggerWorker.Stack().Err(err).Interface("object", obj).Error("Error during object handling: %v", err) return true } return true } -func (o *operator) processObject(obj interface{}) error { - defer o.workqueue.Done(obj) - var item operation.Item - var key string - var ok bool +func (o *operator) processObject(item operation.Item) error { + defer o.workqueue.Done(item) var err error - if key, ok = obj.(string); !ok { - o.workqueue.Forget(obj) - return nil - } - - if item, err = operation.NewItemFromString(key); err != nil { - o.workqueue.Forget(obj) - return nil - } - if item.Operation != operation.Update { + o.workqueue.Forget(item) item.Operation = operation.Update - o.workqueue.Forget(obj) - o.workqueue.Add(item.String()) + o.workqueue.Add(item) return nil } @@ -113,10 +100,10 @@ func (o *operator) processObject(obj interface{}) error { item.Name) if err = o.processItem(item); err != nil { - o.workqueue.AddRateLimited(key) + o.workqueue.AddRateLimited(item) if !IsReconcile(err) { - message := fmt.Sprintf("error syncing '%s': %s, re-queuing", key, err.Error()) + message := fmt.Sprintf("error syncing '%s': %s, re-queuing", item.String(), err.Error()) loggerWorker.Debug(message) return errors.Errorf(message) } @@ -132,7 +119,7 @@ func (o *operator) processObject(obj interface{}) error { item.Namespace, item.Name) - o.workqueue.Forget(obj) + o.workqueue.Forget(item) return nil } diff --git a/pkg/operatorV2/update_wraps.go b/pkg/operatorV2/update_wraps.go index f2f3c53e1..4551a54ed 100644 --- a/pkg/operatorV2/update_wraps.go +++ b/pkg/operatorV2/update_wraps.go @@ -30,6 +30,7 @@ import ( mlApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" mlApi "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" ) @@ -80,3 +81,11 @@ func WithSchedulerCronJobUpdateStatusInterfaceRetry(ctx context.Context, client func WithArangoStorageUpdateStatusInterfaceRetry(ctx context.Context, client UpdateStatusInterface[mlApi.ArangoMLStorageStatus, *mlApi.ArangoMLStorage], obj *mlApi.ArangoMLStorage, status mlApi.ArangoMLStorageStatus, opts meta.UpdateOptions) (*mlApi.ArangoMLStorage, error) { return WithUpdateStatusInterfaceRetry[mlApi.ArangoMLStorageStatus, *mlApi.ArangoMLStorage](ctx, client, obj, status, opts) } + +func WithArangoPlatformStorageUpdateStatusInterfaceRetry(ctx context.Context, client UpdateStatusInterface[platformApi.ArangoPlatformStorageStatus, *platformApi.ArangoPlatformStorage], obj *platformApi.ArangoPlatformStorage, status platformApi.ArangoPlatformStorageStatus, opts meta.UpdateOptions) (*platformApi.ArangoPlatformStorage, error) { + return WithUpdateStatusInterfaceRetry[platformApi.ArangoPlatformStorageStatus, *platformApi.ArangoPlatformStorage](ctx, client, obj, status, opts) +} + +func WithArangoPlatformChartUpdateStatusInterfaceRetry(ctx context.Context, client UpdateStatusInterface[platformApi.ArangoPlatformChartStatus, *platformApi.ArangoPlatformChart], obj *platformApi.ArangoPlatformChart, status platformApi.ArangoPlatformChartStatus, opts meta.UpdateOptions) (*platformApi.ArangoPlatformChart, error) { + return WithUpdateStatusInterfaceRetry[platformApi.ArangoPlatformChartStatus, *platformApi.ArangoPlatformChart](ctx, client, obj, status, opts) +} diff --git a/pkg/platform/state.go b/pkg/platform/state.go new file mode 100644 index 000000000..57417f28c --- /dev/null +++ b/pkg/platform/state.go @@ -0,0 +1,29 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package platform + +type State struct { + Configuration StateConfiguration `json:"configuration,omitempty"` +} + +type StateConfiguration struct { + Hash string `json:"hash,omitempty"` +} diff --git a/pkg/scheduler/profiles.go b/pkg/scheduler/profiles.go index 25cb34af2..68230f2e1 100644 --- a/pkg/scheduler/profiles.go +++ b/pkg/scheduler/profiles.go @@ -23,16 +23,18 @@ package scheduler import ( "context" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" - "github.com/arangodb/kube-arangodb/pkg/debug_package/generators/kubernetes" "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/list" "github.com/arangodb/kube-arangodb/pkg/util/strings" ) func Profiles(ctx context.Context, client generic.ListInterface[*schedulerApi.ArangoProfileList], labels map[string]string, profiles ...string) ([]util.KV[string, schedulerApi.ProfileAcceptedTemplate], string, error) { - profileMap, err := kubernetes.MapObjects[*schedulerApi.ArangoProfileList, *schedulerApi.ArangoProfile](ctx, client, func(result *schedulerApi.ArangoProfileList) []*schedulerApi.ArangoProfile { + profileList, err := list.APIList[*schedulerApi.ArangoProfileList, *schedulerApi.ArangoProfile](ctx, client, meta.ListOptions{}, func(result *schedulerApi.ArangoProfileList) []*schedulerApi.ArangoProfile { q := make([]*schedulerApi.ArangoProfile, len(result.Items)) for id, e := range result.Items { @@ -41,12 +43,15 @@ func Profiles(ctx context.Context, client generic.ListInterface[*schedulerApi.Ar return q }) - if err != nil { return nil, "", err } - extractedProfiles := profileMap.AsList().Filter(func(a *schedulerApi.ArangoProfile) bool { + profileMap := util.ListAsMap(profileList, func(in *schedulerApi.ArangoProfile) string { + return in.GetName() + }) + + extractedProfiles := util.List[*schedulerApi.ArangoProfile](profileList).Filter(func(a *schedulerApi.ArangoProfile) bool { return a != nil && a.Spec.Template != nil }).Filter(func(a *schedulerApi.ArangoProfile) bool { if a.Spec.Selectors == nil { @@ -61,7 +66,7 @@ func Profiles(ctx context.Context, client generic.ListInterface[*schedulerApi.Ar }) for _, name := range profiles { - p, ok := profileMap.ByName(name) + p, ok := profileMap[name] if !ok { return nil, "", errors.Errorf("Profile with name `%s` is missing", name) } @@ -76,7 +81,15 @@ func Profiles(ctx context.Context, client generic.ListInterface[*schedulerApi.Ar }) extractedProfiles = extractedProfiles.Sort(func(a, b *schedulerApi.ArangoProfile) bool { - return a.Spec.Template.GetPriority() > b.Spec.Template.GetPriority() + if ca, cb := a.Spec.Template.GetPriority(), b.Spec.Template.GetPriority(); ca != cb { + return ca > cb + } + + if ca, cb := a.GetName(), b.GetName(); ca != cb { + return ca > cb + } + + return a.GetCreationTimestamp().After(b.GetCreationTimestamp().Time) }) // Check if everything is valid diff --git a/pkg/server/server.go b/pkg/server/server.go index 61f67bd0b..bac1dfac5 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -29,13 +29,10 @@ import ( "github.com/gin-gonic/gin" "github.com/jessevdk/go-assets" - core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" typedCore "k8s.io/client-go/kubernetes/typed/core/v1" - "github.com/arangodb-helper/go-certificates" - "github.com/arangodb/kube-arangodb/dashboard" + "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/errors" operatorHTTP "github.com/arangodb/kube-arangodb/pkg/util/http" "github.com/arangodb/kube-arangodb/pkg/util/metrics" @@ -71,6 +68,7 @@ type Dependencies struct { ML OperatorDependency Analytics OperatorDependency Networking OperatorDependency + Platform OperatorDependency Scheduler OperatorDependency ClusterSync OperatorDependency Operators Operators @@ -107,40 +105,16 @@ func NewServer(cli typedCore.CoreV1Interface, cfg Config, deps Dependencies) (*S TLSNextProto: make(map[string]func(*http.Server, *tls.Conn, http.Handler)), } - var cert, key string + var fetcher util.TLSConfigFetcher if cfg.TLSSecretName != "" && cfg.TLSSecretNamespace != "" { - // Load TLS certificate from secret - s, err := cli.Secrets(cfg.TLSSecretNamespace).Get(context.Background(), cfg.TLSSecretName, meta.GetOptions{}) - if err != nil { - return nil, errors.WithStack(err) - } - certBytes, found := s.Data[core.TLSCertKey] - if !found { - return nil, errors.WithStack(errors.Errorf("No %s found in secret %s", core.TLSCertKey, cfg.TLSSecretName)) - } - keyBytes, found := s.Data[core.TLSPrivateKeyKey] - if !found { - return nil, errors.WithStack(errors.Errorf("No %s found in secret %s", core.TLSPrivateKeyKey, cfg.TLSSecretName)) - } - cert = string(certBytes) - key = string(keyBytes) + serverLogger.Str("addr", cfg.Address).Str("secret", cfg.TLSSecretName).Str("secret-namespace", cfg.TLSSecretNamespace).Info("Using existing TLS Certificate") + fetcher = util.NewSecretTLSConfig(cli.Secrets(cfg.TLSSecretNamespace), cfg.TLSSecretName) } else { - // Secret not specified, create our own TLS certificate - options := certificates.CreateCertificateOptions{ - CommonName: cfg.PodName, - Hosts: []string{cfg.PodName, cfg.PodIP}, - ValidFrom: time.Now(), - ValidFor: time.Hour * 24 * 365 * 10, - IsCA: false, - ECDSACurve: "P256", - } - var err error - cert, key, err = certificates.CreateCertificate(options, nil) - if err != nil { - return nil, errors.WithStack(err) - } + serverLogger.Str("addr", cfg.Address).Info("Using SelfSigned TLS Certificate") + fetcher = util.NewSelfSignedTLSConfig(cfg.PodName, cfg.PodIP) } - tlsConfig, err := createTLSConfig(cert, key) + + tlsConfig, err := fetcher.Eval(context.Background()) if err != nil { return nil, errors.WithStack(err) } @@ -200,6 +174,10 @@ func NewServer(cli typedCore.CoreV1Interface, cfg Config, deps Dependencies) (*S r.GET("/ready/networking", gin.WrapF(deps.Networking.Probe.ReadyHandler)) readyProbes = append(readyProbes, deps.Networking.Probe) } + if deps.Platform.Enabled { + r.GET("/ready/platform", gin.WrapF(deps.Platform.Probe.ReadyHandler)) + readyProbes = append(readyProbes, deps.Platform.Probe) + } if deps.Scheduler.Enabled { r.GET("/ready/scheduler", gin.WrapF(deps.Scheduler.Probe.ReadyHandler)) readyProbes = append(readyProbes, deps.Scheduler.Probe) @@ -251,19 +229,6 @@ func (s *Server) Run() error { return nil } -// createTLSConfig creates a TLS config based on given config -func createTLSConfig(cert, key string) (*tls.Config, error) { - var result *tls.Config - c, err := tls.X509KeyPair([]byte(cert), []byte(key)) - if err != nil { - return nil, errors.WithStack(err) - } - result = &tls.Config{ - Certificates: []tls.Certificate{c}, - } - return result, nil -} - func ready(probes ...*probe.ReadyProbe) func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) { for _, probe := range probes { diff --git a/pkg/storage/pv_inspector.go b/pkg/storage/pv_inspector.go index 5d42d1a17..3dfc42de7 100644 --- a/pkg/storage/pv_inspector.go +++ b/pkg/storage/pv_inspector.go @@ -32,7 +32,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/deployment/features" "github.com/arangodb/kube-arangodb/pkg/deployment/patch" "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/list" ) // inspectPVs queries all PersistentVolume's and triggers a cleanup for @@ -41,13 +41,16 @@ import ( func (ls *LocalStorage) inspectPVs() (int, error) { var volumes []*core.PersistentVolume - if err := k8sutil.APIList[*core.PersistentVolumeList](context.Background(), ls.deps.Client.Kubernetes().CoreV1().PersistentVolumes(), meta.ListOptions{}, func(result *core.PersistentVolumeList, err error) error { - for _, r := range result.Items { - volumes = append(volumes, r.DeepCopy()) + volumes, err := list.APIList[*core.PersistentVolumeList](context.Background(), ls.deps.Client.Kubernetes().CoreV1().PersistentVolumes(), meta.ListOptions{}, func(result *core.PersistentVolumeList) []*core.PersistentVolume { + q := make([]*core.PersistentVolume, len(result.Items)) + + for id, e := range result.Items { + q[id] = e.DeepCopy() } - return nil - }); err != nil { + return q + }) + if err != nil { if err != nil { return 0, errors.WithStack(err) } diff --git a/pkg/util/aws/config.go b/pkg/util/aws/config.go new file mode 100644 index 000000000..4edb2bd6d --- /dev/null +++ b/pkg/util/aws/config.go @@ -0,0 +1,89 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package aws + +import ( + "net/http" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/client" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +type Config struct { + Endpoint string + Region string + + DisableSSL bool + + HTTP HTTP + Provider Provider + TLS TLS +} + +func (c Config) GetRegion() string { + if c.Region == "" { + return "us-east-1" + } + + return c.Region +} + +func (c Config) GetProvider() (credentials.Provider, error) { + return c.Provider.Provider() +} + +func (c Config) GetHttpClient() (*http.Client, error) { + tls, err := c.TLS.configuration() + if err != nil { + return nil, errors.Wrapf(err, "Unable to create TLS") + } + + return &http.Client{ + Transport: c.HTTP.configuration(tls), + }, nil +} + +func (c Config) GetAWSSession() (client.ConfigProvider, error) { + prov, err := c.GetProvider() + if err != nil { + return nil, errors.Wrapf(err, "Unable to create Provider") + } + + cl, err := c.GetHttpClient() + if err != nil { + return nil, errors.Wrapf(err, "Unable to create HTTP Client") + } + + return session.NewSessionWithOptions(session.Options{ + Config: aws.Config{ + Credentials: credentials.NewCredentials(prov), + Endpoint: util.NewType(c.Endpoint), + S3ForcePathStyle: util.NewType(true), + DisableSSL: util.NewType(c.DisableSSL), + HTTPClient: cl, + }, + }) +} diff --git a/pkg/util/aws/file.go b/pkg/util/aws/file.go new file mode 100644 index 000000000..de71d70fb --- /dev/null +++ b/pkg/util/aws/file.go @@ -0,0 +1,86 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package aws + +import ( + "os" + "sync" + "time" + + "github.com/aws/aws-sdk-go/aws/credentials" + + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +type fileProvider struct { + lock sync.Mutex + + accessKeyIDFile string + secretAccessKeyFile string + sessionTokenFile string + + recent time.Time +} + +func (f *fileProvider) Retrieve() (credentials.Value, error) { + if f == nil { + return credentials.Value{}, errors.Errorf("Object is nil") + } + + f.lock.Lock() + defer f.lock.Unlock() + + var v credentials.Value + + v.ProviderName = "dynamic-file-provider" + + if data, err := os.ReadFile(f.accessKeyIDFile); err != nil { + return credentials.Value{}, errors.Wrapf(err, "Unable to open AccessKeyID File") + } else { + v.AccessKeyID = string(data) + } + + if data, err := os.ReadFile(f.secretAccessKeyFile); err != nil { + return credentials.Value{}, errors.Wrapf(err, "Unable to open SecretAccessKey File") + } else { + v.SecretAccessKey = string(data) + } + + if f.sessionTokenFile != "" { + if data, err := os.ReadFile(f.sessionTokenFile); err != nil { + return credentials.Value{}, errors.Wrapf(err, "Unable to open SessionToken File") + } else { + v.SessionToken = string(data) + } + } + + f.recent = util.RecentFileModTime(f.accessKeyIDFile, f.secretAccessKeyFile, f.sessionTokenFile) + + return v, nil +} + +func (f *fileProvider) IsExpired() bool { + f.lock.Lock() + defer f.lock.Unlock() + + return util.RecentFileModTime(f.accessKeyIDFile, f.secretAccessKeyFile, f.sessionTokenFile).After(f.recent) +} diff --git a/pkg/util/aws/http.go b/pkg/util/aws/http.go new file mode 100644 index 000000000..5b46114ed --- /dev/null +++ b/pkg/util/aws/http.go @@ -0,0 +1,44 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package aws + +import ( + "crypto/tls" + "net/http" + "time" +) + +type HTTP struct { +} + +func (s HTTP) configuration(t *tls.Config) http.RoundTripper { + var c = http.Transport{ + Proxy: http.ProxyFromEnvironment, + ForceAttemptHTTP2: true, + MaxIdleConns: 100, + IdleConnTimeout: 90 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + TLSClientConfig: t, + } + + return &c +} diff --git a/pkg/util/aws/impersonate.go b/pkg/util/aws/impersonate.go new file mode 100644 index 000000000..4a207ca76 --- /dev/null +++ b/pkg/util/aws/impersonate.go @@ -0,0 +1,89 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package aws + +import ( + "context" + "sync" + "time" + + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/credentials" + "github.com/aws/aws-sdk-go/aws/session" + "github.com/aws/aws-sdk-go/service/sts" + + "github.com/arangodb/kube-arangodb/pkg/util" +) + +type impersonate struct { + lock sync.Mutex + + credentials credentials.Value + expires time.Time + + config ProviderImpersonate + + creds credentials.Provider +} + +func (i *impersonate) Retrieve() (credentials.Value, error) { + i.lock.Lock() + defer i.lock.Unlock() + + awsSession, err := session.NewSessionWithOptions(session.Options{ + Config: aws.Config{ + Credentials: credentials.NewCredentials(i.creds), + S3ForcePathStyle: util.NewType(true), + }, + }) + if err != nil { + return credentials.Value{}, err + } + + s := sts.New(awsSession) + + resp, err := s.AssumeRoleWithContext(context.Background(), &sts.AssumeRoleInput{ + RoleArn: util.NewType(i.config.Role), + RoleSessionName: util.NewType(i.config.Name), + }) + if err != nil { + return credentials.Value{}, err + } + + if e := resp.Credentials.Expiration; e != nil { + i.expires = *e + } + + i.credentials = credentials.Value{ + AccessKeyID: util.WithDefault(resp.Credentials.AccessKeyId), + SecretAccessKey: util.WithDefault(resp.Credentials.SecretAccessKey), + SessionToken: util.WithDefault(resp.Credentials.SessionToken), + } + + return i.credentials, nil +} + +func (i *impersonate) IsExpired() bool { + i.lock.Lock() + defer i.lock.Unlock() + + return time.Now().After(i.expires) +} diff --git a/pkg/util/aws/provider.go b/pkg/util/aws/provider.go new file mode 100644 index 000000000..6dadabb06 --- /dev/null +++ b/pkg/util/aws/provider.go @@ -0,0 +1,127 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package aws + +import ( + "github.com/aws/aws-sdk-go/aws/credentials" + + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +type ProviderType string + +const ( + ProviderTypeConfig ProviderType = "config" + ProviderTypeStatic ProviderType = "static" + ProviderTypeFile ProviderType = "file" +) + +type Provider struct { + Type ProviderType + + Config ProviderConfig + Static ProviderConfigStatic + File ProviderConfigFile + + Impersonate ProviderImpersonate +} + +func (p Provider) provider() (credentials.Provider, error) { + switch p.Type { + case ProviderTypeConfig: + return p.Config.provider() + case ProviderTypeStatic: + return p.Static.provider() + case ProviderTypeFile: + return p.File.provider() + default: + return nil, errors.Errorf("Unknown provider: %s", p.Type) + } +} + +func (p Provider) Provider() (credentials.Provider, error) { + prov, err := p.provider() + if err != nil { + return nil, err + } + + return p.Impersonate.provider(prov) +} + +type ProviderImpersonate struct { + Impersonate bool + + Role string + Name string +} + +func (p ProviderImpersonate) provider(in credentials.Provider) (credentials.Provider, error) { + if !p.Impersonate { + return in, nil + } + + return &impersonate{ + config: p, + creds: in, + }, nil +} + +type ProviderConfigStatic struct { + AccessKeyID string + SecretAccessKey string + SessionToken string +} + +func (p ProviderConfigStatic) provider() (credentials.Provider, error) { + return &credentials.StaticProvider{ + Value: credentials.Value{ + AccessKeyID: p.AccessKeyID, + SecretAccessKey: p.SecretAccessKey, + SessionToken: p.SessionToken, + }, + }, nil +} + +type ProviderConfig struct { + Filename string + Profile string +} + +func (p ProviderConfig) provider() (credentials.Provider, error) { + return &credentials.SharedCredentialsProvider{ + Filename: p.Filename, + Profile: p.Profile, + }, nil +} + +type ProviderConfigFile struct { + AccessKeyIDFile string + SecretAccessKeyFile string + SessionTokenFile string +} + +func (p *ProviderConfigFile) provider() (credentials.Provider, error) { + return &fileProvider{ + accessKeyIDFile: p.AccessKeyIDFile, + secretAccessKeyFile: p.SecretAccessKeyFile, + sessionTokenFile: p.SessionTokenFile, + }, nil +} diff --git a/pkg/util/aws/tls.go b/pkg/util/aws/tls.go new file mode 100644 index 000000000..e2c6b7193 --- /dev/null +++ b/pkg/util/aws/tls.go @@ -0,0 +1,58 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package aws + +import ( + "crypto/tls" + "crypto/x509" + "os" + + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +type TLS struct { + Insecure bool + CAFiles []string +} + +func (s TLS) configuration() (*tls.Config, error) { + var r tls.Config + + if s.Insecure { + r.InsecureSkipVerify = true + } + + if len(s.CAFiles) > 0 { + caCertPool := x509.NewCertPool() + + for _, file := range s.CAFiles { + caCert, err := os.ReadFile(file) + if err != nil { + return nil, errors.Wrapf(err, "Unable to load CA from %s", file) + } + caCertPool.AppendCertsFromPEM(caCert) + } + + r.RootCAs = caCertPool + } + + return &r, nil +} diff --git a/pkg/util/constants/constants.go b/pkg/util/constants/constants.go index 831bec24d..42eedb375 100644 --- a/pkg/util/constants/constants.go +++ b/pkg/util/constants/constants.go @@ -74,6 +74,7 @@ const ( MLLabelRole = "ml/role" AnalyticsLabelRole = "analytics/role" NetworkingLabelRole = "networking/role" + PlatformLabelRole = "platform/role" SchedulerLabelRole = "scheduler/role" AppsLabelRole = "apps/role" ClusterSyncLabelRole = "clustersync/role" diff --git a/pkg/util/constants/envoy.go b/pkg/util/constants/envoy.go new file mode 100644 index 000000000..b25e9b0c0 --- /dev/null +++ b/pkg/util/constants/envoy.go @@ -0,0 +1,33 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package constants + +import "time" + +const ( + EnvoyRouteHeader = "arangodb-platform-route" + + EnvoyInventoryConfigDestination = "/_inventory" + + EnvoyIntegrationSidecarFilterName = "envoy.filters.http.ext_authz" + + DefaultEnvoyUpstreamTimeout = time.Minute +) diff --git a/pkg/util/constants/gateway.go b/pkg/util/constants/gateway.go new file mode 100644 index 000000000..2b4408030 --- /dev/null +++ b/pkg/util/constants/gateway.go @@ -0,0 +1,47 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package constants + +import "time" + +const ( + MaxGatewayTimeout = 15 * time.Minute + MinGatewayTimeout = 15 * time.Second + + ConfigMapChecksumKey = "CHECKSUM" + + ArangoGatewayExecutor = "/usr/local/bin/envoy" + + GatewayConfigFileName = "gateway.yaml" + GatewayConfigChecksumENV = "GATEWAY_CONFIG_CHECKSUM" + + GatewayVolumeMountDir = "/etc/gateway/core/" + GatewayVolumeName = "gateway" + + GatewayLDSVolumeMountDir = "/etc/gateway/lds/" + GatewayLDSVolumeName = "gateway-lds" + + GatewayCDSVolumeMountDir = "/etc/gateway/cds/" + GatewayCDSVolumeName = "gateway-cds" + + MemberConfigVolumeMountDir = "/etc/gateway/member/" + MemberConfigVolumeName = "member-config" +) diff --git a/pkg/util/constants/profiles.go b/pkg/util/constants/profiles.go index bc4778a0c..63b7bb185 100644 --- a/pkg/util/constants/profiles.go +++ b/pkg/util/constants/profiles.go @@ -26,16 +26,26 @@ const ProfileGroup = "profiles.arangodb.com" const ProfilesDeployment = ProfileGroup + "/deployment" const ProfilesIntegrationPrefix = "integration." + ProfileGroup +const ProfilesList = ProfileGroup + "/profiles" + +const ProfilesAnnotationApplied = ProfileGroup + "/applied" +const ProfilesAnnotationChecksum = ProfileGroup + "/checksum" +const ProfilesAnnotationProfiles = ProfileGroup + "/profiles" const ( - ProfilesIntegrationAuthn = "authn" - ProfilesIntegrationAuthz = "authz" - ProfilesIntegrationSched = "sched" + ProfilesIntegrationAuthn = "authn" + ProfilesIntegrationAuthz = "authz" + ProfilesIntegrationSched = "sched" + ProfilesIntegrationEnvoy = "envoy" + ProfilesIntegrationStorage = "storage" + ProfilesIntegrationShutdown = "shutdown" ) const ( ProfilesIntegrationV0 = "v0" ProfilesIntegrationV1 = "v1" + ProfilesIntegrationV2 = "v2" + ProfilesIntegrationV3 = "v3" ) func NewProfileIntegration(name, version string) (string, string) { diff --git a/pkg/util/errors/defined.go b/pkg/util/errors/defined.go new file mode 100644 index 000000000..2761c01b5 --- /dev/null +++ b/pkg/util/errors/defined.go @@ -0,0 +1,37 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package errors + +import "github.com/pkg/errors" + +var notImplementedError = Errorf("NotImplemented") + +func NotImplementedError() error { + return errors.WithStack(notImplementedError) +} + +func IsNotImplementedError(err error) bool { + if err == nil { + return false + } + + return Is(err, notImplementedError) +} diff --git a/pkg/util/errors/errors.go b/pkg/util/errors/errors.go index 221b8948a..a8dc28dca 100644 --- a/pkg/util/errors/errors.go +++ b/pkg/util/errors/errors.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -51,6 +51,25 @@ func CauseWithNil(err error) error { } } +func ExtractCause[T error](err error) (T, bool) { + var d T + + if err == nil { + return d, false + } + + var v T + if errors.As(err, &v) { + return v, true + } + + if err := CauseWithNil(err); err != nil { + return ExtractCause[T](err) + } + + return d, false +} + func New(message string) error { return errors.New(message) } diff --git a/pkg/util/k8sutil/inspector/persistentvolume/v1/reader.go b/pkg/util/errors/errors_test.go similarity index 51% rename from pkg/util/k8sutil/inspector/persistentvolume/v1/reader.go rename to pkg/util/errors/errors_test.go index fa8348d90..c6e01b87b 100644 --- a/pkg/util/k8sutil/inspector/persistentvolume/v1/reader.go +++ b/pkg/util/errors/errors_test.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,21 +18,35 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package errors import ( - "context" + "testing" - core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" + "github.com/stretchr/testify/require" ) -// Interface has methods to work with PersistentVolume resources. -type Interface interface { - ReadInterface +type testCauseError string + +func (t testCauseError) Error() string { + return string(t) + } -// ReadInterface has methods to work with PersistentVolume resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*core.PersistentVolume, error) +func Test_Causer(t *testing.T) { + var err error = testCauseError("tete") + + v, ok := ExtractCause[testCauseError](err) + require.True(t, ok) + require.EqualValues(t, "tete", v) + + err = WithMessage(err, "msg") + + v, ok = ExtractCause[testCauseError](err) + require.True(t, ok) + require.EqualValues(t, "tete", v) + + v, ok = ExtractCause[testCauseError](Errorf("TEST")) + require.False(t, ok) + require.EqualValues(t, "", v) } diff --git a/pkg/util/errors/grpc.go b/pkg/util/errors/grpc.go new file mode 100644 index 000000000..942ba608a --- /dev/null +++ b/pkg/util/errors/grpc.go @@ -0,0 +1,65 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package errors + +import ( + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +type grpcError interface { + error + GRPCStatus() *status.Status +} + +func GRPCStatus(err error) (*status.Status, bool) { + v, ok := ExtractCause[grpcError](err) + + if !ok { + return status.New(codes.Unknown, err.Error()), false + } + + return v.GRPCStatus(), true +} + +func GRPCCode(err error) codes.Code { + if err == nil { + return codes.OK + } + + if v, ok := GRPCStatus(err); ok { + return v.Code() + } + + return codes.Unknown +} + +func IsGRPCCode(err error, codes ...codes.Code) bool { + vc := GRPCCode(err) + + for _, code := range codes { + if vc == code { + return true + } + } + + return false +} diff --git a/pkg/util/errors/grpc_test.go b/pkg/util/errors/grpc_test.go new file mode 100644 index 000000000..9cbdc5fba --- /dev/null +++ b/pkg/util/errors/grpc_test.go @@ -0,0 +1,41 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package errors + +import ( + "testing" + + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func Test_GRPC(t *testing.T) { + v, ok := ExtractCause[grpcError](status.Error(codes.InvalidArgument, "path missing")) + require.True(t, ok) + require.EqualValues(t, codes.InvalidArgument, v.GRPCStatus().Code()) + + v, ok = ExtractCause[grpcError](WithStack(status.Error(codes.InvalidArgument, "path missing"))) + require.True(t, ok) + require.EqualValues(t, codes.InvalidArgument, v.GRPCStatus().Code()) + + require.EqualValues(t, codes.InvalidArgument, GRPCCode(status.Error(codes.InvalidArgument, "path missing"))) +} diff --git a/pkg/util/file.go b/pkg/util/file.go index 154914f43..52eb0ac9e 100644 --- a/pkg/util/file.go +++ b/pkg/util/file.go @@ -23,6 +23,7 @@ package util import ( "io" "os" + "time" "github.com/pkg/errors" ) @@ -61,3 +62,28 @@ func Read(in io.Reader, buff []byte) (int, error) { } } } + +func RecentFileModTime(files ...string) time.Time { + var t time.Time + + for _, file := range files { + if z := FileModTime(file); !z.IsZero() && z.After(t) { + t = z + } + } + + return t +} + +func FileModTime(file string) time.Time { + if file == "" { + return time.Time{} + } + + stat, err := os.Stat(file) + if err != nil { + return time.Time{} + } + + return stat.ModTime() +} diff --git a/pkg/util/grpc.go b/pkg/util/grpc/grpc.go similarity index 83% rename from pkg/util/grpc.go rename to pkg/util/grpc/grpc.go index 2ed559baf..ba7128b82 100644 --- a/pkg/util/grpc.go +++ b/pkg/util/grpc/grpc.go @@ -18,7 +18,7 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package util +package grpc import ( "context" @@ -30,18 +30,21 @@ import ( "google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/metadata" + proto "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/anypb" pbPongV1 "github.com/arangodb/kube-arangodb/integrations/pong/v1/definition" pbSharedV1 "github.com/arangodb/kube-arangodb/integrations/shared/v1/definition" + "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/svc" ) const AuthorizationGRPCHeader = "adb-authorization" func NewGRPCClient[T any](ctx context.Context, in func(cc grpc.ClientConnInterface) T, addr string, opts ...grpc.DialOption) (T, io.Closer, error) { - con, err := NewGRPCConn(ctx, addr, opts...) + con, err := NewGRPCConn(addr, opts...) if err != nil { - return Default[T](), nil, err + return util.Default[T](), nil, err } return in(con), con, nil @@ -50,7 +53,7 @@ func NewGRPCClient[T any](ctx context.Context, in func(cc grpc.ClientConnInterfa func NewOptionalTLSGRPCClient[T any](ctx context.Context, in func(cc grpc.ClientConnInterface) T, addr string, tls *tls.Config, opts ...grpc.DialOption) (T, io.Closer, error) { con, err := NewOptionalTLSGRPCConn(ctx, addr, tls, opts...) if err != nil { - return Default[T](), nil, err + return util.Default[T](), nil, err } return in(con), con, nil @@ -65,7 +68,7 @@ func NewOptionalTLSGRPCConn(ctx context.Context, addr string, tls *tls.Config, o copy(newOpts[len(opts):], tlsOpts) // Create conn - conn, err := newGRPCConn(ctx, addr, tlsOpts...) + conn, err := newGRPCConn(addr, tlsOpts...) if err != nil { return nil, err } @@ -91,17 +94,17 @@ func NewOptionalTLSGRPCConn(ctx context.Context, addr string, tls *tls.Config, o } } - return newGRPCConn(ctx, addr, opts...) + return newGRPCConn(addr, opts...) } -func newGRPCConn(ctx context.Context, addr string, opts ...grpc.DialOption) (*grpc.ClientConn, error) { +func newGRPCConn(addr string, opts ...grpc.DialOption) (*grpc.ClientConn, error) { var z []grpc.DialOption z = append(z, grpc.WithTransportCredentials(insecure.NewCredentials())) z = append(z, opts...) - conn, err := grpc.DialContext(ctx, addr, z...) + conn, err := grpc.NewClient(addr, z...) if err != nil { return nil, err } @@ -109,8 +112,8 @@ func newGRPCConn(ctx context.Context, addr string, opts ...grpc.DialOption) (*gr return conn, nil } -func NewGRPCConn(ctx context.Context, addr string, opts ...grpc.DialOption) (*grpc.ClientConn, error) { - return newGRPCConn(ctx, addr, opts...) +func NewGRPCConn(addr string, opts ...grpc.DialOption) (*grpc.ClientConn, error) { + return newGRPCConn(addr, opts...) } func ClientTLS(config *tls.Config) []grpc.DialOption { @@ -133,3 +136,11 @@ func TokenAuthInterceptors(token string) []grpc.DialOption { func attachTokenAuthToInterceptors(ctx context.Context, token string) context.Context { return metadata.AppendToOutgoingContext(ctx, AuthorizationGRPCHeader, token) } + +func GRPCAnyCastAs[T proto.Message](in *anypb.Any, v T) error { + if err := in.UnmarshalTo(v); err != nil { + return err + } + + return nil +} diff --git a/pkg/util/grpc/stream.go b/pkg/util/grpc/stream.go new file mode 100644 index 000000000..4441546f9 --- /dev/null +++ b/pkg/util/grpc/stream.go @@ -0,0 +1,87 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package grpc + +import ( + "io" + + "google.golang.org/grpc" + + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +type RecvInterface[T any] interface { + Recv() (T, error) + grpc.ClientStream +} + +func Recv[T any](recv RecvInterface[T], parser func(T) error) error { + for { + resp, err := recv.Recv() + if err != nil { + if errors.Is(err, io.EOF) { + return nil + } + + if cerr := recv.CloseSend(); cerr != nil { + return errors.Errors(err, cerr) + } + + return err + } + + if err := parser(resp); err != nil { + return err + } + } +} + +type SendInterface[T, O any] interface { + Send(T) error + CloseAndRecv() (O, error) + grpc.ClientStream +} + +func Send[T, O any](send SendInterface[T, O], batch func() (T, error)) (O, error) { + for { + v, err := batch() + if err != nil { + if errors.Is(err, io.EOF) { + return send.CloseAndRecv() + } + + if cerr := send.CloseSend(); cerr != nil { + return util.Default[O](), errors.Errors(err, cerr) + } + + return util.Default[O](), err + } + + if err := send.Send(v); err != nil { + if cerr := send.CloseSend(); cerr != nil { + return util.Default[O](), errors.Errors(err, cerr) + } + + return util.Default[O](), err + } + } +} diff --git a/pkg/util/http/downloader.go b/pkg/util/http/downloader.go new file mode 100644 index 000000000..4a5f1f869 --- /dev/null +++ b/pkg/util/http/downloader.go @@ -0,0 +1,67 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package http + +import ( + "context" + "fmt" + "io" + "net/http" + + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +func Download(ctx context.Context, client *http.Client, format string, args ...interface{}) ([]byte, error) { + if client == nil { + client = http.DefaultClient + } + + url := fmt.Sprintf(format, args...) + + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) + if err != nil { + return nil, err + } + + resp, err := client.Do(req) + if err != nil { + return nil, err + } + + data, err := io.ReadAll(resp.Body) + if err != nil { + if err := resp.Body.Close(); err != nil { + return nil, err + } + + return nil, err + } + + if err := resp.Body.Close(); err != nil { + return nil, err + } + + if resp.StatusCode != 200 { + return nil, errors.Errorf("Unexpected code: %d for `%s`", resp.StatusCode, url) + } + + return data, nil +} diff --git a/pkg/util/http/error.go b/pkg/util/http/error.go new file mode 100644 index 000000000..170042a54 --- /dev/null +++ b/pkg/util/http/error.go @@ -0,0 +1,76 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package http + +import ( + "encoding/json" + "errors" + "fmt" +) + +func WrapError(code int, err error) error { + if err == nil { + return nil + } + + return NewError(code, err.Error()) +} + +func NewError(code int, format string, args ...any) error { + return Error{ + Code: code, + Message: fmt.Sprintf(format, args...), + } +} + +func IsError(err error) (Error, bool) { + if err == nil { + return Error{}, false + } + + var v Error + if errors.As(err, &v) { + return v, true + } + + return Error{}, false +} + +type Error struct { + Code int + Message string +} + +func (e Error) Error() string { + return fmt.Sprintf("HTTP Error (%d): %s", e.Code, e.Message) +} + +func (e Error) JSON() []byte { + data, err := json.Marshal(map[string]any{ + "Code": e.Code, + "Message": e.Message, + }) + if err != nil { + return nil + } + + return data +} diff --git a/pkg/util/http/server.go b/pkg/util/http/server.go index 1842f4659..1405c472f 100644 --- a/pkg/util/http/server.go +++ b/pkg/util/http/server.go @@ -21,140 +21,147 @@ package http import ( + "context" "crypto/tls" + "net" "net/http" - "sync" - - "github.com/arangodb-helper/go-certificates" + "time" + "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/errors" ) -func NewServer(server *http.Server) PlainServer { - return &plainServer{server: server} -} +func DefaultHTTPServerSettings(in *http.Server, _ context.Context) error { + in.ReadTimeout = time.Second * 30 + in.ReadHeaderTimeout = time.Second * 15 + in.WriteTimeout = time.Second * 30 + in.TLSNextProto = make(map[string]func(*http.Server, *tls.Conn, http.Handler)) -type ServerRunner interface { - Stop() - Wait() error + return nil } -type PlainServer interface { - Server - WithSSL(key, cert string) (Server, error) - WithKeyfile(keyfile string) (Server, error) +func WithTLSConfigFetcherGen(gen func() util.TLSConfigFetcher) util.ModEP1[http.Server, context.Context] { + return WithTLSConfigFetcher(gen()) } -type Server interface { - Start() (ServerRunner, error) -} +func WithTLSConfigFetcher(fetcher util.TLSConfigFetcher) util.ModEP1[http.Server, context.Context] { + return func(in *http.Server, p1 context.Context) error { + v, err := fetcher.Eval(p1) + if err != nil { + return err + } -var _ Server = &tlsServer{} + in.TLSConfig = v -type tlsServer struct { - server *http.Server -} - -func (t *tlsServer) Start() (ServerRunner, error) { - i := serverRunner{ - stopCh: make(chan struct{}), - doneCh: make(chan struct{}), + return nil } +} - go i.run(t.server, func(s *http.Server) error { - return s.ListenAndServeTLS("", "") - }) +func WithServeMux(mods ...util.Mod[http.ServeMux]) util.ModEP1[http.Server, context.Context] { + return func(in *http.Server, p1 context.Context) error { + mux := http.NewServeMux() - return &i, nil -} + util.ApplyMods(mux, mods...) -var _ PlainServer = &plainServer{} + in.Handler = mux -type plainServer struct { - server *http.Server + return nil + } } -func (p *plainServer) WithKeyfile(keyfile string) (Server, error) { - certificate, err := certificates.LoadKeyFile(keyfile) - if err != nil { - return nil, err - } +func NewServer(ctx context.Context, mods ...util.ModEP1[http.Server, context.Context]) (Server, error) { + var sv http.Server - s := p.server - s.TLSConfig = &tls.Config{ - Certificates: []tls.Certificate{certificate}, + if err := util.ApplyModsEP1(&sv, ctx, mods...); err != nil { + return nil, err } - return &tlsServer{server: s}, nil + return &server{ + server: &sv, + }, nil } -func (p *plainServer) Start() (ServerRunner, error) { - i := serverRunner{ - stopCh: make(chan struct{}), - doneCh: make(chan struct{}), - } +type Server interface { + AsyncAddr(ctx context.Context, addr string) func() error + Async(ctx context.Context, ln net.Listener) func() error - go i.run(p.server, func(s *http.Server) error { - return s.ListenAndServe() - }) + StartAddr(ctx context.Context, addr string) error + Start(ctx context.Context, ln net.Listener) error +} - return &i, nil +type server struct { + server *http.Server } -func (p *plainServer) WithSSL(key, cert string) (Server, error) { - certificate, err := tls.LoadX509KeyPair(cert, key) - if err != nil { - return nil, err - } +func (s *server) AsyncAddr(ctx context.Context, addr string) func() error { + var err error - s := p.server - s.TLSConfig = &tls.Config{ - Certificates: []tls.Certificate{certificate}, - } + done := make(chan any) - return &tlsServer{server: s}, nil -} + go func() { + defer close(done) -var _ ServerRunner = &serverRunner{} + err = s.StartAddr(ctx, addr) + }() -type serverRunner struct { - lock sync.Mutex + return func() error { + <-done - stopCh chan struct{} - doneCh chan struct{} - err error + return err + } } -func (s *serverRunner) run(server *http.Server, f func(s *http.Server) error) { +func (s *server) Async(ctx context.Context, ln net.Listener) func() error { + var err error + + done := make(chan any) + go func() { - defer close(s.doneCh) - if err := f(server); err != nil { - if !errors.Is(err, http.ErrServerClosed) { - s.err = err - } - } - }() + defer close(done) - <-s.stopCh + err = s.Start(ctx, ln) + }() - server.Close() + return func() error { + <-done - <-s.doneCh + return err + } } -func (s *serverRunner) Stop() { - s.lock.Lock() - defer s.lock.Unlock() - select { - case <-s.stopCh: - return - default: - close(s.stopCh) +func (s *server) StartAddr(ctx context.Context, addr string) error { + ln, err := net.Listen("tcp", addr) + if err != nil { + return err } + + return s.Start(ctx, ln) } -func (s *serverRunner) Wait() error { - <-s.doneCh +func (s *server) Start(ctx context.Context, ln net.Listener) error { + go func() { + <-ctx.Done() + + if err := s.server.Close(); err != nil { + if !errors.Is(err, http.ErrServerClosed) { + logger.Err(err).Warn("Unable to close server") + } + } + }() + + if s.server.TLSConfig == nil { + if err := s.server.Serve(ln); err != nil { + if !errors.Is(err, http.ErrServerClosed) { + return err + } + } + } else { + if err := s.server.ServeTLS(ln, "", ""); err != nil { + if !errors.Is(err, http.ErrServerClosed) { + return err + } + } + } - return s.err + return nil } diff --git a/pkg/util/json.go b/pkg/util/json.go new file mode 100644 index 000000000..ae2e462d9 --- /dev/null +++ b/pkg/util/json.go @@ -0,0 +1,60 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package util + +import ( + "encoding/json" + + "sigs.k8s.io/yaml" +) + +func JSONRemarshal[A, B any](in A) (B, error) { + d, err := json.Marshal(in) + if err != nil { + return Default[B](), err + } + + var o B + + if err := json.Unmarshal(d, &o); err != nil { + return Default[B](), err + } + + return o, nil +} + +func JsonOrYamlUnmarshal[T any](b []byte) (T, error) { + var z T + + if json.Valid(b) { + if err := json.Unmarshal(b, &z); err != nil { + return Default[T](), err + } + + return z, nil + } + + if err := yaml.UnmarshalStrict(b, &z); err != nil { + return Default[T](), err + } + + return z, nil +} diff --git a/pkg/util/k8sutil/inspector/configmap/v1/loader.go b/pkg/util/k8sutil/base/base.go similarity index 71% rename from pkg/util/k8sutil/inspector/configmap/v1/loader.go rename to pkg/util/k8sutil/base/base.go index 72902ce96..1ba69aa1b 100644 --- a/pkg/util/k8sutil/inspector/configmap/v1/loader.go +++ b/pkg/util/k8sutil/base/base.go @@ -18,23 +18,20 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package base import ( - core "k8s.io/api/core/v1" - + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) -// Inspector for configmaps type Inspector interface { - gvk.GVK + refresh.Inspector - ListSimple() []*core.ConfigMap - GetSimple(name string) (*core.ConfigMap, bool) - Iterate(action Action, filters ...Filter) error - Read() ReadInterface -} + gvk.GK + anonymous.Impl -type Filter func(pod *core.ConfigMap) bool -type Action func(pod *core.ConfigMap) error + Version() version.Version +} diff --git a/pkg/util/k8sutil/configmaps.go b/pkg/util/k8sutil/configmaps.go index 1741c89e9..44c1d29c4 100644 --- a/pkg/util/k8sutil/configmaps.go +++ b/pkg/util/k8sutil/configmaps.go @@ -26,11 +26,11 @@ import ( core "k8s.io/api/core/v1" meta "k8s.io/apimachinery/pkg/apis/meta/v1" - configMapsV1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/configmap/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" ) -func CreateConfigMap(ctx context.Context, configMaps configMapsV1.ModInterface, cm *core.ConfigMap, ownerRef *meta.OwnerReference) error { +func CreateConfigMap(ctx context.Context, configMaps generic.ModClient[*core.ConfigMap], cm *core.ConfigMap, ownerRef *meta.OwnerReference) error { AddOwnerRefToObject(cm, ownerRef) if _, err := configMaps.Create(ctx, cm, meta.CreateOptions{}); err != nil { diff --git a/pkg/util/k8sutil/helm/chart.go b/pkg/util/k8sutil/helm/chart.go new file mode 100644 index 000000000..e590706bb --- /dev/null +++ b/pkg/util/k8sutil/helm/chart.go @@ -0,0 +1,52 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + "bytes" + "io" + + "helm.sh/helm/v3/pkg/chart" + "helm.sh/helm/v3/pkg/chart/loader" +) + +type Chart []byte + +func (c Chart) Get() (ChartData, error) { + return newChartFromData(c) +} + +func (c Chart) Raw() []byte { + return c +} + +func newChartReaderFromBytes(in []byte) (*chart.Chart, error) { + return newChartReader(bytes.NewBuffer(in)) +} + +func newChartReader(in io.Reader) (*chart.Chart, error) { + files, err := loader.LoadArchiveFiles(in) + if err != nil { + return nil, err + } + + return loader.LoadFiles(files) +} diff --git a/pkg/util/k8sutil/helm/chart_data.go b/pkg/util/k8sutil/helm/chart_data.go new file mode 100644 index 000000000..1b8ab8b57 --- /dev/null +++ b/pkg/util/k8sutil/helm/chart_data.go @@ -0,0 +1,58 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + "helm.sh/helm/v3/pkg/chart" + + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +type ChartData interface { + Chart() *chart.Chart + + Platform() (*Platform, error) +} + +type chartData struct { + chart *chart.Chart +} + +func (c chartData) Platform() (*Platform, error) { + return extractPlatform(c.chart) +} + +func (c chartData) Chart() *chart.Chart { + return c.chart +} + +func newChartFromData(data []byte) (ChartData, error) { + var c chartData + + v, err := newChartReaderFromBytes(data) + if err != nil { + return nil, errors.Errorf("Unable to load chart") + } + + c.chart = v + + return c, nil +} diff --git a/pkg/util/k8sutil/helm/chart_manager.go b/pkg/util/k8sutil/helm/chart_manager.go new file mode 100644 index 000000000..4f9695b76 --- /dev/null +++ b/pkg/util/k8sutil/helm/chart_manager.go @@ -0,0 +1,118 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + "context" + "fmt" + "net/http" + "sort" + "sync" + + "helm.sh/helm/v3/pkg/repo" + + "github.com/arangodb/kube-arangodb/pkg/util" + operatorHTTP "github.com/arangodb/kube-arangodb/pkg/util/http" +) + +func NewChartManager(ctx context.Context, client *http.Client, format string, args ...interface{}) (ChartManager, error) { + if client == nil { + client = http.DefaultClient + } + + m := manager{ + client: client, + url: fmt.Sprintf(format, args...), + } + + if err := m.Reload(ctx); err != nil { + return nil, err + } + + return &m, nil +} + +type ChartManager interface { + Reload(ctx context.Context) error + + Repositories() []string + + Get(name string) (ChartManagerRepo, bool) +} + +type manager struct { + lock sync.Mutex + + client *http.Client + + url string + + index *repo.IndexFile +} + +func (m *manager) Get(name string) (ChartManagerRepo, bool) { + for entry := range m.index.Entries { + if entry == name { + return chartManagerRepo{ + manager: m, + name: name, + }, true + } + } + + return nil, false +} + +func (m *manager) Repositories() []string { + m.lock.Lock() + defer m.lock.Unlock() + + var s = make([]string, 0, len(m.index.Entries)) + + for v := range m.index.Entries { + s = append(s, v) + } + + sort.Strings(s) + + return s +} + +func (m *manager) Reload(ctx context.Context) error { + m.lock.Lock() + defer m.lock.Unlock() + + data, err := operatorHTTP.Download(ctx, m.client, fmt.Sprintf("%s/index.yaml", m.url)) + if err != nil { + return err + } + + idx, err := util.JsonOrYamlUnmarshal[repo.IndexFile](data) + if err != nil { + return err + } + + idx.SortEntries() + + m.index = &idx + + return nil +} diff --git a/pkg/util/k8sutil/helm/chart_manager_repo.go b/pkg/util/k8sutil/helm/chart_manager_repo.go new file mode 100644 index 000000000..68c1f63bb --- /dev/null +++ b/pkg/util/k8sutil/helm/chart_manager_repo.go @@ -0,0 +1,128 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + "slices" + "sort" + + "helm.sh/helm/v3/pkg/repo" +) + +type ChartManagerRepo interface { + Versions() []string + + Get(version string) (ChartManagerRepoVersion, bool) + Latest() (ChartManagerRepoVersion, bool) +} + +type chartManagerRepo struct { + manager *manager + name string +} + +func (c chartManagerRepo) Versions() []string { + c.manager.lock.Lock() + defer c.manager.lock.Unlock() + + r, ok := c.manager.index.Entries[c.name] + if !ok { + return nil + } + + if len(r) == 0 { + return []string{} + } + + s := make([]string, 0, len(r)) + + for _, v := range r { + s = append(s, v.Version) + } + + sort.Strings(s) + + return s +} + +func (c chartManagerRepo) Get(version string) (ChartManagerRepoVersion, bool) { + if version == "latest" { + return c.Latest() + } + + r, ok := c.manager.index.Entries[c.name] + if !ok { + return nil, false + } + + for _, z := range r { + if z.Version == version { + return chartManagerRepoVersion{ + manager: c.manager, + chart: z, + }, true + } + } + + return nil, false +} + +func (c chartManagerRepo) Latest() (ChartManagerRepoVersion, bool) { + c.manager.lock.Lock() + defer c.manager.lock.Unlock() + + if v := c.find(func(a, b *repo.ChartVersion) int { + return a.Created.Compare(b.Created) * -1 + }); v == nil { + return nil, false + } else { + return chartManagerRepoVersion{ + manager: c.manager, + chart: v, + }, true + } +} + +func (c chartManagerRepo) find(predicate func(a, b *repo.ChartVersion) int) *repo.ChartVersion { + r, ok := c.manager.index.Entries[c.name] + if !ok { + return nil + } + + if len(r) == 0 { + return nil + } + + if len(r) == 1 { + return r[0] + } + + if predicate == nil { + return r[0] + } + + z := make(repo.ChartVersions, len(r)) + copy(z, r) + + slices.SortStableFunc(z, predicate) + + return z[0] +} diff --git a/pkg/util/k8sutil/helm/chart_manager_repo_version.go b/pkg/util/k8sutil/helm/chart_manager_repo_version.go new file mode 100644 index 000000000..cfea20c6c --- /dev/null +++ b/pkg/util/k8sutil/helm/chart_manager_repo_version.go @@ -0,0 +1,65 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + "context" + + "helm.sh/helm/v3/pkg/repo" + + "github.com/arangodb/kube-arangodb/pkg/util/errors" + operatorHTTP "github.com/arangodb/kube-arangodb/pkg/util/http" +) + +type chartManagerRepoVersion struct { + manager *manager + chart *repo.ChartVersion +} + +func (m chartManagerRepoVersion) Chart() *repo.ChartVersion { + return m.chart +} + +type ChartManagerRepoVersion interface { + Get(ctx context.Context) (Chart, error) + + Chart() *repo.ChartVersion +} + +func (m chartManagerRepoVersion) Get(ctx context.Context) (Chart, error) { + if len(m.chart.URLs) == 0 { + return nil, errors.Errorf("Chart `%s-%s` does not have any urls defined", m.chart.Name, m.chart.Version) + } + + var errs = make([]error, len(m.chart.URLs)) + + for id, url := range m.chart.URLs { + data, err := operatorHTTP.Download(ctx, m.manager.client, url) + if err != nil { + errs[id] = err + continue + } + + return data, nil + } + + return nil, errors.Errors(errs...) +} diff --git a/pkg/util/k8sutil/helm/chart_manager_test.go b/pkg/util/k8sutil/helm/chart_manager_test.go new file mode 100644 index 000000000..ef83d3f39 --- /dev/null +++ b/pkg/util/k8sutil/helm/chart_manager_test.go @@ -0,0 +1,94 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" +) + +func limitArray[T any](in []T, max int) []T { + if len(in) <= max { + return in + } + + return in[:max] +} + +func Test_Manager(t *testing.T) { + mgr, err := NewChartManager(context.Background(), nil, "https://arangodb-platform-dev-chart-registry.s3.amazonaws.com") + require.NoError(t, err) + + for _, repo := range limitArray(mgr.Repositories(), 5) { + t.Run(repo, func(t *testing.T) { + r, ok := mgr.Get(repo) + require.True(t, ok) + + t.Run("Latest", func(t *testing.T) { + v, ok := r.Latest() + require.True(t, ok) + + vdata, err := v.Get(context.Background()) + require.NoError(t, err) + + t.Logf("Chart %s, Version %s, Release %s", repo, v.Chart().Version, v.Chart().Created.String()) + + vchart, err := vdata.Get() + require.NoError(t, err) + require.NotNil(t, vchart.Chart().Metadata) + + vl, ok := r.Get("latest") + require.True(t, ok) + + vldata, err := vl.Get(context.Background()) + require.NoError(t, err) + + chart, err := vldata.Get() + require.NoError(t, err) + require.NotNil(t, chart.Chart().Metadata) + + require.EqualValues(t, v.Chart().Version, vchart.Chart().Metadata.Version) + require.EqualValues(t, v.Chart().Version, chart.Chart().Metadata.Version) + }) + t.Run("ByVersion", func(t *testing.T) { + for _, version := range limitArray(r.Versions(), 5) { + t.Run(version, func(t *testing.T) { + v, ok := r.Get(version) + require.True(t, ok) + + data, err := v.Get(context.Background()) + require.NoError(t, err) + + c, err := data.Get() + require.NoError(t, err) + + require.NotNil(t, c.Chart().Metadata) + require.EqualValues(t, version, c.Chart().Metadata.Version) + }) + } + }) + }) + } + + require.NoError(t, mgr.Reload(context.Background())) +} diff --git a/pkg/util/k8sutil/helm/client.go b/pkg/util/k8sutil/helm/client.go new file mode 100644 index 000000000..053071635 --- /dev/null +++ b/pkg/util/k8sutil/helm/client.go @@ -0,0 +1,425 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + "context" + "errors" + "fmt" + "net/http" + "sync" + + "helm.sh/helm/v3/pkg/action" + apiErrors "k8s.io/apimachinery/pkg/api/errors" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/client-go/discovery" + "k8s.io/client-go/discovery/cached/memory" + "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" + "k8s.io/client-go/util/flowcontrol" + + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/kconfig" +) + +func NewClient(cfg Configuration) (Client, error) { + if err := cfg.Validate(); err != nil { + return nil, err + } + + var helm action.Configuration + + if err := helm.Init(kconfig.NewRESTClientGetter(cfg.Namespace, nil, cfg.Config), cfg.Namespace, string(cfg.Driver.Get()), func(format string, v ...interface{}) { + logger.Debug(format, v...) + }); err != nil { + return nil, err + } + + dClient, err := discovery.NewDiscoveryClientForConfig(cfg.Config) + if err != nil { + return nil, err + } + + return &client{ + cfg: cfg, + helm: &helm, + discovery: memory.NewMemCacheClient(dClient), + restClients: map[schema.GroupVersion]rest.Interface{}, + }, nil +} + +type Client interface { + Namespace() string + + Alive(ctx context.Context) error + + Invalidate() + DiscoverKubernetesApiVersions(gv schema.GroupVersion) (ApiVersions, error) + DiscoverKubernetesApiVersionKind(gvk schema.GroupVersionKind) (*meta.APIResource, error) + NativeGet(ctx context.Context, reqs ...Resource) ([]ResourceObject, error) + + StatusObjects(ctx context.Context, name string, mods ...util.Mod[action.Status]) (*Release, []ResourceObject, error) + + Status(ctx context.Context, name string, mods ...util.Mod[action.Status]) (*Release, error) + List(ctx context.Context, mods ...util.Mod[action.List]) ([]Release, error) + Install(ctx context.Context, chart Chart, values Values, mods ...util.Mod[action.Install]) (*Release, error) + Upgrade(ctx context.Context, name string, chart Chart, values Values, mods ...util.Mod[action.Upgrade]) (*UpgradeResponse, error) + Uninstall(ctx context.Context, name string, mods ...util.Mod[action.Uninstall]) (*UninstallRelease, error) + Test(ctx context.Context, name string, mods ...util.Mod[action.ReleaseTesting]) (*Release, error) +} + +type client struct { + lock sync.Mutex + + cfg Configuration + helm *action.Configuration + + restClients map[schema.GroupVersion]rest.Interface + + discovery discovery.CachedDiscoveryInterface +} + +func (c *client) Namespace() string { + return c.cfg.Namespace +} + +func (c *client) Status(ctx context.Context, name string, mods ...util.Mod[action.Status]) (*Release, error) { + act := action.NewStatus(c.helm) + + act.ShowResources = true + + util.ApplyMods(act, mods...) + + result, err := act.Run(name) + if err != nil { + if err.Error() == "release: not found" { + return nil, nil + } + return nil, err + } + + if r, err := fromHelmRelease(result); err != nil { + return nil, err + } else { + return &r, nil + } +} + +func (c *client) Uninstall(ctx context.Context, name string, mods ...util.Mod[action.Uninstall]) (*UninstallRelease, error) { + act := action.NewUninstall(c.helm) + + util.ApplyMods(act, mods...) + + result, err := act.Run(name) + if err != nil { + return nil, err + } + + var res UninstallRelease + + res.Info = result.Info + + if r, err := fromHelmRelease(result.Release); err != nil { + return nil, err + } else { + res.Release = r + } + + return &res, nil +} + +func (c *client) Test(ctx context.Context, name string, mods ...util.Mod[action.ReleaseTesting]) (*Release, error) { + act := action.NewReleaseTesting(c.helm) + + util.ApplyMods(act, mods...) + + result, err := act.Run(name) + if err != nil { + return nil, err + } + + if r, err := fromHelmRelease(result); err != nil { + return nil, err + } else { + return &r, nil + } +} + +func (c *client) Install(ctx context.Context, chart Chart, values Values, mods ...util.Mod[action.Install]) (*Release, error) { + act := action.NewInstall(c.helm) + + util.ApplyMods(act, mods...) + + chartData, err := chart.Get() + if err != nil { + return nil, err + } + + valuesData, err := values.Marshal() + if err != nil { + return nil, err + } + + result, err := act.RunWithContext(ctx, chartData.Chart(), valuesData) + if err != nil { + return nil, err + } + + if r, err := fromHelmRelease(result); err != nil { + return nil, err + } else { + return &r, nil + } +} + +func (c *client) Upgrade(ctx context.Context, name string, chart Chart, values Values, mods ...util.Mod[action.Upgrade]) (*UpgradeResponse, error) { + act := action.NewUpgrade(c.helm) + + util.ApplyMods(act, mods...) + + release, err := c.Status(ctx, name) + if err != nil { + return nil, err + } + + chartData, err := chart.Get() + if err != nil { + return nil, err + } + + valuesData, err := values.Marshal() + if err != nil { + return nil, err + } + + if release != nil { + if meta := chartData.Chart().Metadata; meta != nil { + if release.GetChart().GetMetadata().GetVersion() == meta.Version { + // We are on the same version + if release.Values.Equals(values) { + // We provide same values + return &UpgradeResponse{ + Before: release, + }, nil + } + } + } + } + + result, err := act.RunWithContext(ctx, name, chartData.Chart(), valuesData) + if err != nil { + return nil, err + } + + if r, err := fromHelmRelease(result); err != nil { + return nil, err + } else { + if release == nil { + return &UpgradeResponse{ + After: &r, + }, nil + } + return &UpgradeResponse{ + Before: release, + After: &r, + }, nil + } +} + +func (c *client) Alive(ctx context.Context) error { + act := action.NewList(c.helm) + + _, err := act.Run() + if err != nil { + return err + } + + return nil +} + +func (c *client) List(ctx context.Context, mods ...util.Mod[action.List]) ([]Release, error) { + act := action.NewList(c.helm) + + util.ApplyMods(act, mods...) + + result, err := act.Run() + if err != nil { + return nil, err + } + + releases := make([]Release, len(result)) + + for id := range result { + + if r, err := fromHelmRelease(result[id]); err != nil { + return nil, err + } else { + releases[id] = r + } + } + + return releases, nil +} + +func (c *client) Invalidate() { + c.discovery.Invalidate() +} + +func (c *client) DiscoverKubernetesApiVersions(gv schema.GroupVersion) (ApiVersions, error) { + resp, err := c.discovery.ServerResourcesForGroupVersion(gv.String()) + if err != nil { + return nil, err + } + + r := make(ApiVersions, len(resp.APIResources)) + + for _, v := range resp.APIResources { + v.Group = gv.Group + v.Version = gv.Version + r[schema.GroupVersionKind{ + Group: v.Group, + Version: v.Version, + Kind: v.Kind, + }] = v + } + + return r, nil +} + +func (c *client) DiscoverKubernetesApiVersionKind(gvk schema.GroupVersionKind) (*meta.APIResource, error) { + v, err := c.DiscoverKubernetesApiVersions(schema.GroupVersion{ + Group: gvk.Group, + Version: gvk.Version, + }) + if err != nil { + return nil, err + } + + if z, ok := v[gvk]; ok { + return &z, nil + } + + return nil, nil +} + +func (c *client) restClientForApiVersion(gv schema.GroupVersion) (rest.Interface, error) { + c.lock.Lock() + defer c.lock.Unlock() + + if v, ok := c.restClients[gv]; ok { + return v, nil + } + + configShallowCopy := *c.cfg.Config + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + + configShallowCopy.GroupVersion = &schema.GroupVersion{ + Group: gv.Group, + Version: gv.Version, + } + configShallowCopy.APIPath = "/api" + configShallowCopy.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + + rc, err := rest.RESTClientFor(&configShallowCopy) + if err != nil { + return nil, err + } + + c.restClients[gv] = rc + + return rc, nil +} + +func (c *client) NativeGet(ctx context.Context, reqs ...Resource) ([]ResourceObject, error) { + if len(reqs) == 0 { + return nil, nil + } + + res := make([]ResourceObject, len(reqs)) + for id := range reqs { + res[id].Resource = reqs[id] + + gvk, err := c.DiscoverKubernetesApiVersionKind(reqs[id].GroupVersionKind) + if err != nil { + return nil, err + } + + if gvk == nil { + // NotFound + continue + } + + client, err := c.restClientForApiVersion(schema.GroupVersion{ + Group: gvk.Group, + Version: gvk.Version, + }) + if err != nil { + return nil, err + } + + resp, err := client.Get().Resource(gvk.Name). + NamespaceIfScoped(reqs[id].Namespace, gvk.Namespaced). + Name(reqs[id].Name).DoRaw(ctx) + if err != nil { + var e *apiErrors.StatusError + if errors.As(err, &e) { + if e.Status().Code == http.StatusNotFound { + continue + } + } + + return nil, err + } + + res[id].Object = &ResourceObjectData{ + Data: resp, + } + } + + return res, nil +} + +func (c *client) StatusObjects(ctx context.Context, name string, mods ...util.Mod[action.Status]) (*Release, []ResourceObject, error) { + s, err := c.Status(ctx, name, mods...) + if err != nil { + return nil, nil, err + } + if s == nil { + return nil, nil, nil + } + + manifests, err := c.NativeGet(ctx, s.Info.Resources...) + if err != nil { + return s, nil, err + } + + return s, manifests, nil +} diff --git a/pkg/util/k8sutil/helm/client_test.go b/pkg/util/k8sutil/helm/client_test.go new file mode 100644 index 000000000..b22d3a358 --- /dev/null +++ b/pkg/util/k8sutil/helm/client_test.go @@ -0,0 +1,271 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + "helm.sh/helm/v3/pkg/action" + core "k8s.io/api/core/v1" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/tests" + "github.com/arangodb/kube-arangodb/pkg/util/tests/suite" +) + +func cleanup(t *testing.T, c Client) func() { + t.Run("Cleanup Pre", func(t *testing.T) { + items, err := c.List(context.Background(), func(in *action.List) { + in.All = true + in.StateMask = action.ListDeployed | action.ListUninstalled | action.ListUninstalling | action.ListPendingInstall | action.ListPendingUpgrade | action.ListPendingRollback | action.ListSuperseded | action.ListFailed | action.ListUnknown + }) + require.NoError(t, err) + + for _, item := range items { + t.Run(item.Name, func(t *testing.T) { + _, err := c.Uninstall(context.Background(), item.Name) + require.NoError(t, err) + }) + } + }) + + return func() { + t.Run("Cleanup Post", func(t *testing.T) { + items, err := c.List(context.Background(), func(in *action.List) { + in.All = true + in.StateMask = action.ListDeployed | action.ListUninstalled | action.ListUninstalling | action.ListPendingInstall | action.ListPendingUpgrade | action.ListPendingRollback | action.ListSuperseded | action.ListFailed | action.ListUnknown + }) + require.NoError(t, err) + + for _, item := range items { + t.Run(item.Name, func(t *testing.T) { + _, err := c.Uninstall(context.Background(), item.Name) + require.NoError(t, err) + }) + } + }) + } +} + +func Test_Connection(t *testing.T) { + client, c := newClient(t, tests.FakeNamespace) + + require.NoError(t, c.Alive(context.Background())) + + defer cleanup(t, c)() + + t.Run("NonExisting", func(t *testing.T) { + resp, err := c.Status(context.Background(), "test-missing") + require.NoError(t, err) + + require.Nil(t, resp) + }) + + t.Run("Install", func(t *testing.T) { + resp, err := c.Install(context.Background(), suite.GetChart(t, "example", "1.0.0"), nil, func(in *action.Install) { + in.ReleaseName = "test" + }) + require.NoError(t, err) + + require.NotNil(t, resp) + }) + + t.Run("Upgrade With No change", func(t *testing.T) { + resp, err := c.Upgrade(context.Background(), "test", suite.GetChart(t, "example", "1.0.0"), nil) + require.NoError(t, err) + + require.NotNil(t, resp) + require.NotNil(t, resp.Before) + require.Nil(t, resp.After) + }) + + t.Run("Upgrade With change", func(t *testing.T) { + resp, err := c.Upgrade(context.Background(), "test", suite.GetChart(t, "example", "1.0.0"), Values(`{"A":"X"}`)) + require.NoError(t, err) + + require.NotNil(t, resp) + require.NotNil(t, resp.Before) + require.NotNil(t, resp.After) + }) + + t.Run("Get all manifests", func(t *testing.T) { + resp, mans, err := c.StatusObjects(context.Background(), "test") + require.NoError(t, err) + + require.NotNil(t, resp) + require.NotNil(t, mans) + require.Len(t, mans, 1) + + var d core.ConfigMap + + require.NoError(t, mans[0].Object.Unmarshal(&d)) + + t.Log(string(d.GetUID())) + }) + + t.Run("Test", func(t *testing.T) { + resp, err := c.Test(context.Background(), "test") + require.NoError(t, err) + + require.NotNil(t, resp) + }) + + t.Run("Uninstall", func(t *testing.T) { + _, err := c.Uninstall(context.Background(), "test") + require.NoError(t, err) + }) + + t.Run("Reinstall", func(t *testing.T) { + resp, err := c.Install(context.Background(), suite.GetChart(t, "example", "1.0.0"), nil, func(in *action.Install) { + in.ReleaseName = "test" + in.Labels = map[string]string{ + "X1": "X1", + } + }) + require.NoError(t, err) + + require.Len(t, resp.Labels, 1) + }) + + t.Run("List", func(t *testing.T) { + defer cleanup(t, c)() + + t.Run("Install", func(t *testing.T) { + resp, err := c.Install(context.Background(), suite.GetChart(t, "example", "1.0.0"), nil, func(in *action.Install) { + in.ReleaseName = "test-1" + in.Labels = map[string]string{ + "X1": "X1", + } + }) + require.NoError(t, err) + + require.Len(t, resp.Labels, 1) + + resp, err = c.Install(context.Background(), suite.GetChart(t, "example", "1.0.0"), nil, func(in *action.Install) { + in.ReleaseName = "test-2" + in.Labels = map[string]string{ + "X1": "X2", + } + }) + require.NoError(t, err) + + require.Len(t, resp.Labels, 1) + + resp, err = c.Install(context.Background(), suite.GetChart(t, "example", "1.0.0"), nil, func(in *action.Install) { + in.ReleaseName = "test-3" + in.Labels = map[string]string{ + "X1": "X1", + "X2": "X2", + } + }) + require.NoError(t, err) + + require.Len(t, resp.Labels, 2) + + resp, err = c.Install(context.Background(), suite.GetChart(t, "example", "1.0.0"), nil, func(in *action.Install) { + in.ReleaseName = "test-4" + }) + require.NoError(t, err) + + require.Len(t, resp.Labels, 0) + + elems, err := c.List(context.Background()) + require.NoError(t, err) + require.Len(t, elems, 4) + }) + + t.Run("List", func(t *testing.T) { + t.Run("All", func(t *testing.T) { + l, err := c.List(context.Background(), func(in *action.List) { + in.Selector = "" + }) + require.NoError(t, err) + require.Len(t, l, 4) + }) + t.Run("Specified", func(t *testing.T) { + l, err := c.List(context.Background(), func(in *action.List) { + in.Selector = "X1==X1" + }) + require.NoError(t, err) + require.Len(t, l, 2) + }) + t.Run("Specified", func(t *testing.T) { + l, err := c.List(context.Background(), func(in *action.List) { + in.Selector = "X2==X2" + }) + require.NoError(t, err) + require.Len(t, l, 1) + }) + t.Run("Specified", func(t *testing.T) { + l, err := c.List(context.Background(), func(in *action.List) { + in.Selector = "X1==X2" + }) + require.NoError(t, err) + require.Len(t, l, 1) + }) + t.Run("Specified", func(t *testing.T) { + l, err := c.List(context.Background(), func(in *action.List) { + in.Selector = "X3==X3" + }) + require.NoError(t, err) + require.Len(t, l, 0) + }) + }) + }) + + t.Run("Update", func(t *testing.T) { + defer cleanup(t, c)() + + t.Run("Install", func(t *testing.T) { + resp, err := c.Install(context.Background(), suite.GetChart(t, "example", "1.0.0"), nil, func(in *action.Install) { + in.ReleaseName = "test" + }) + require.NoError(t, err) + require.NotNil(t, resp) + }) + + t.Run("Verify", func(t *testing.T) { + cm, err := client.Kubernetes().CoreV1().ConfigMaps(tests.FakeNamespace).Get(context.Background(), "test", meta.GetOptions{}) + require.NoError(t, err) + require.Len(t, cm.Data, 0) + }) + + t.Run("Update", func(t *testing.T) { + resp, err := c.Upgrade(context.Background(), "test", suite.GetChart(t, "example", "1.0.0"), newValues(t, map[string]any{ + "data": map[string]string{ + "test": "test", + }, + })) + require.NoError(t, err) + require.NotNil(t, resp) + }) + + t.Run("Verify", func(t *testing.T) { + cm, err := client.Kubernetes().CoreV1().ConfigMaps(tests.FakeNamespace).Get(context.Background(), "test", meta.GetOptions{}) + require.NoError(t, err) + require.Len(t, cm.Data, 1) + require.Contains(t, cm.Data, "test") + require.EqualValues(t, cm.Data["test"], "test") + }) + }) +} diff --git a/pkg/util/k8sutil/helm/configuration.go b/pkg/util/k8sutil/helm/configuration.go new file mode 100644 index 000000000..9fc13ddb1 --- /dev/null +++ b/pkg/util/k8sutil/helm/configuration.go @@ -0,0 +1,55 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + "k8s.io/client-go/rest" + + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +type Configuration struct { + Namespace string + + Config *rest.Config + + Driver *ConfigurationDriver +} + +func (c *Configuration) Validate() error { + if c == nil { + return errors.Errorf("Configuration cannot be nil") + } + + if c.Namespace == "" { + return errors.Errorf("Namespace cannot be empty") + } + + if c.Config == nil { + return errors.Errorf("Config needs to be defined") + } + + if err := c.Driver.Validate(); err != nil { + return err + } + + return nil +} diff --git a/pkg/util/k8sutil/helm/configuration_driver.go b/pkg/util/k8sutil/helm/configuration_driver.go new file mode 100644 index 000000000..87db1645b --- /dev/null +++ b/pkg/util/k8sutil/helm/configuration_driver.go @@ -0,0 +1,48 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import "github.com/arangodb/kube-arangodb/pkg/util/errors" + +type ConfigurationDriver string + +const ( + ConfigurationDriverDefault = ConfigurationDriverSecret + ConfigurationDriverConfigMap ConfigurationDriver = "configmap" + ConfigurationDriverSecret ConfigurationDriver = "secret" +) + +func (c *ConfigurationDriver) Validate() error { + switch v := c.Get(); v { + case ConfigurationDriverConfigMap, ConfigurationDriverSecret: + return nil + default: + return errors.Errorf("Unknown option: %s", v) + } +} + +func (c *ConfigurationDriver) Get() ConfigurationDriver { + if c == nil { + return ConfigurationDriverDefault + } + + return *c +} diff --git a/pkg/util/k8sutil/helm/logger.go b/pkg/util/k8sutil/helm/logger.go new file mode 100644 index 000000000..33755327a --- /dev/null +++ b/pkg/util/k8sutil/helm/logger.go @@ -0,0 +1,25 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import "github.com/arangodb/kube-arangodb/pkg/logging" + +var logger = logging.Global().RegisterAndGetLogger("helm", logging.Info) diff --git a/pkg/util/k8sutil/helm/platform.go b/pkg/util/k8sutil/helm/platform.go new file mode 100644 index 000000000..bb4d2a470 --- /dev/null +++ b/pkg/util/k8sutil/helm/platform.go @@ -0,0 +1,54 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + "helm.sh/helm/v3/pkg/chart" + + "github.com/arangodb/kube-arangodb/pkg/util" +) + +const ( + PlatformFileName = "platform.yml" +) + +func extractPlatform(chart *chart.Chart) (*Platform, error) { + if chart == nil { + return nil, nil + } + + for _, file := range chart.Files { + if file == nil { + return nil, nil + } + + if file.Name == PlatformFileName { + obj, err := util.JsonOrYamlUnmarshal[Platform](file.Data) + if err != nil { + return nil, err + } + + return &obj, nil + } + } + + return nil, nil +} diff --git a/pkg/util/k8sutil/helm/platform_object.go b/pkg/util/k8sutil/helm/platform_object.go new file mode 100644 index 000000000..08944b31a --- /dev/null +++ b/pkg/util/k8sutil/helm/platform_object.go @@ -0,0 +1,29 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +type Platform struct { + Requirements PlatformRequirements `json:"requirements,omitempty"` +} + +type PlatformRequirements map[string]PlatformVersionDefinition + +type PlatformVersionDefinition string diff --git a/pkg/util/k8sutil/helm/platform_test.go b/pkg/util/k8sutil/helm/platform_test.go new file mode 100644 index 000000000..db8a23330 --- /dev/null +++ b/pkg/util/k8sutil/helm/platform_test.go @@ -0,0 +1,46 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/arangodb/kube-arangodb/pkg/util/tests/suite" +) + +func Test_Platform(t *testing.T) { + c1, err := Chart(suite.GetChart(t, "example", "1.0.0")).Get() + require.NoError(t, err) + + p1, err := c1.Platform() + require.NoError(t, err) + + c2, err := Chart(suite.GetChart(t, "example", "1.0.1")).Get() + require.NoError(t, err) + + p2, err := c2.Platform() + require.NoError(t, err) + + require.Nil(t, p1) + require.NotNil(t, p2) +} diff --git a/pkg/util/k8sutil/helm/suite_test.go b/pkg/util/k8sutil/helm/suite_test.go new file mode 100644 index 000000000..5029ff2e9 --- /dev/null +++ b/pkg/util/k8sutil/helm/suite_test.go @@ -0,0 +1,65 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + _ "embed" + "os" + "testing" + + "github.com/stretchr/testify/require" + "k8s.io/client-go/tools/clientcmd" + + "github.com/arangodb/kube-arangodb/pkg/logging" + "github.com/arangodb/kube-arangodb/pkg/util/kclient" +) + +func init() { + logging.Global().ApplyLogLevels(map[string]logging.Level{ + logging.TopicAll: logging.Debug, + }) +} + +func newValues(t *testing.T, in any) Values { + v, err := NewValues(in) + require.NoError(t, err) + return v +} + +func newClient(t *testing.T, namespace string) (kclient.Client, Client) { + z, ok := os.LookupEnv("TEST_KUBECONFIG") + if !ok { + t.Skipf("TEST_KUBECONFIG is not set") + } + + kcfg, err := clientcmd.BuildConfigFromFlags("", z) + require.NoError(t, err) + + client, err := kclient.NewClient("test", kcfg) + require.NoError(t, err) + + c, err := NewClient(Configuration{ + Namespace: namespace, + Config: client.Config(), + }) + require.NoError(t, err) + return client, c +} diff --git a/pkg/util/k8sutil/helm/types.go b/pkg/util/k8sutil/helm/types.go new file mode 100644 index 000000000..887096da7 --- /dev/null +++ b/pkg/util/k8sutil/helm/types.go @@ -0,0 +1,232 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + "encoding/json" + "time" + + "github.com/pkg/errors" + "helm.sh/helm/v3/pkg/chart" + "helm.sh/helm/v3/pkg/release" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + + "github.com/arangodb/kube-arangodb/pkg/util" +) + +func fromHelmRelease(in *release.Release) (Release, error) { + var r Release + + if in == nil { + return Release{}, errors.Errorf("Nil release not allowed") + } + + r.Name = in.Name + r.Version = in.Version + r.Namespace = in.Namespace + r.Labels = in.Labels + + r.Chart = fromHelmReleaseChart(in.Chart) + + if d, err := NewValues(in.Config); err != nil { + return Release{}, nil + } else { + r.Values = d + } + + if i, err := fromHelmReleaseInfo(in.Info); err != nil { + return Release{}, err + } else { + r.Info = i + } + + return r, nil +} + +func fromHelmReleaseChart(in *chart.Chart) *ReleaseChart { + if in == nil { + return nil + } + + var r ReleaseChart + + r.Metadata = fromHelmReleaseChartMetadata(in.Metadata) + + return &r +} + +func fromHelmReleaseChartMetadata(in *chart.Metadata) *ReleaseChartMetadata { + if in == nil { + return nil + } + + var r ReleaseChartMetadata + + r.Version = in.Version + + return &r +} + +func fromHelmReleaseInfo(in *release.Info) (ReleaseInfo, error) { + var r ReleaseInfo + + if in == nil { + return ReleaseInfo{}, errors.Errorf("Nil release info not allowed") + } + + r.FirstDeployed = in.FirstDeployed.Time + r.LastDeployed = in.LastDeployed.Time + r.Deleted = in.Deleted.Time + r.Description = in.Description + r.Status = in.Status + r.Notes = in.Notes + + if m, err := fromHelmReleaseInfoResources(in.Resources); err != nil { + return ReleaseInfo{}, err + } else { + r.Resources = m + } + + return r, nil +} + +func fromHelmReleaseInfoResources(in map[string][]runtime.Object) (Resources, error) { + if len(in) == 0 { + return nil, nil + } + + var r Resources + + for _, v := range in { + for _, obj := range v { + d, err := util.JSONRemarshal[runtime.Object, internalResourceObject](obj) + if err != nil { + return nil, err + } + + r = append(r, Resource{ + GroupVersionKind: schema.FromAPIVersionAndKind(d.APIVersion, d.Kind), + Name: d.GetName(), + Namespace: d.GetNamespace(), + }) + } + } + + return r, nil +} + +type Release struct { + Name string + + Info ReleaseInfo + Chart *ReleaseChart + + Values Values + + Version int + Namespace string + Labels map[string]string +} + +func (r *Release) GetChart() *ReleaseChart { + if r == nil { + return nil + } + + return r.Chart +} + +type ReleaseChart struct { + Metadata *ReleaseChartMetadata +} + +func (r *ReleaseChart) GetMetadata() *ReleaseChartMetadata { + if r == nil { + return nil + } + + return r.Metadata +} + +type ReleaseChartMetadata struct { + Version string +} + +func (r *ReleaseChartMetadata) GetVersion() string { + if r == nil { + return "" + } + + return r.Version +} + +type ReleaseInfo struct { + FirstDeployed time.Time + LastDeployed time.Time + Deleted time.Time + Description string + Status release.Status + Notes string + Resources Resources +} + +type Resources []Resource + +type internalResourceObject struct { + meta.TypeMeta `json:",inline"` + meta.ObjectMeta `json:"metadata,omitempty"` +} + +type Resource struct { + schema.GroupVersionKind + Name, Namespace string +} + +type ResourceObject struct { + Resource + + Object *ResourceObjectData +} + +func (r *ResourceObjectData) Unmarshal(obj any) error { + if r == nil { + return errors.Errorf("Object not returned") + } + + return json.Unmarshal(r.Data, &obj) +} + +type ResourceObjectData struct { + Data []byte +} + +type UninstallRelease struct { + Release Release + Info string +} + +type UpgradeResponse struct { + Before, After *Release +} + +type ApiVersions map[schema.GroupVersionKind]meta.APIResource diff --git a/pkg/util/k8sutil/helm/values.go b/pkg/util/k8sutil/helm/values.go new file mode 100644 index 000000000..44f67631a --- /dev/null +++ b/pkg/util/k8sutil/helm/values.go @@ -0,0 +1,105 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + "encoding/json" + + "github.com/arangodb/kube-arangodb/pkg/util" +) + +func NewMergeValues(opts ValuesMergeMethod, vs ...any) (Values, error) { + if len(vs) == 0 { + return nil, nil + } + + o, err := NewValues(vs[0]) + if err != nil { + return nil, err + } + + if len(vs) == 1 { + return o, nil + } + + for _, el := range vs[1:] { + a, err := NewValues(el) + if err != nil { + return nil, err + } + + no, err := opts.Merge(o, a) + if err != nil { + return nil, err + } + + o = no + } + + return o, nil +} + +func NewValues(in any) (Values, error) { + data, err := json.Marshal(in) + if err != nil { + return nil, err + } + + return data, nil +} + +type Values []byte + +func (v Values) Equals(other Values) bool { + a, err := v.MarshalJSON() + if err != nil { + return false + } + + b, err := other.MarshalJSON() + if err != nil { + return false + } + + return util.SHA256(a) == util.SHA256(b) +} + +func (v Values) MarshalJSON() ([]byte, error) { + return v, nil +} + +func (v Values) String() string { + return string(v) +} + +func (v Values) Marshal() (map[string]interface{}, error) { + if len(v) == 0 { + return map[string]interface{}{}, nil + } + + var q map[string]interface{} + + if err := json.Unmarshal(v, &q); err != nil { + return nil, err + } + + return q, nil +} diff --git a/pkg/util/k8sutil/helm/values_merge_method.go b/pkg/util/k8sutil/helm/values_merge_method.go new file mode 100644 index 000000000..3ed2b333a --- /dev/null +++ b/pkg/util/k8sutil/helm/values_merge_method.go @@ -0,0 +1,105 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import "github.com/arangodb/kube-arangodb/pkg/util/errors" + +type ValuesMergeMethod int + +const ( + MergeMaps ValuesMergeMethod = 1 << iota +) + +func (v ValuesMergeMethod) Has(o ValuesMergeMethod) bool { + return v&o == o +} + +func (v ValuesMergeMethod) Merge(a, b Values) (Values, error) { + av, err := a.Marshal() + if err != nil { + return nil, err + } + + bv, err := b.Marshal() + if err != nil { + return nil, err + } + + z, err := v.mergeMaps(av, bv) + if err != nil { + return nil, err + } + + return NewValues(z) +} + +func (v ValuesMergeMethod) mergeMaps(a, b map[string]interface{}) (map[string]interface{}, error) { + if len(a) == 0 && len(b) == 0 { + return map[string]interface{}{}, nil + } + if len(a) == 0 { + return b, nil + } + + if len(b) == 0 { + return a, nil + } + + ret := make(map[string]interface{}) + + for k, v := range a { + ret[k] = v + } + + for k, o := range b { + z, ok := ret[k] + if !ok { + ret[k] = o + continue + } + + if v.Has(MergeMaps) { + if z != nil && o != nil { + av, aok := z.(map[string]interface{}) + bv, bok := o.(map[string]interface{}) + + if aok || bok { + if !aok || !bok { + return nil, errors.Errorf("Invalid types during Map merge") + } + + rv, err := v.mergeMaps(av, bv) + if err != nil { + return nil, err + } + + ret[k] = rv + continue + } + } + } + + // Override at the end + ret[k] = o + } + + return ret, nil +} diff --git a/pkg/util/k8sutil/helm/values_merge_method_test.go b/pkg/util/k8sutil/helm/values_merge_method_test.go new file mode 100644 index 000000000..b91379cf9 --- /dev/null +++ b/pkg/util/k8sutil/helm/values_merge_method_test.go @@ -0,0 +1,145 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package helm + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func testValuesMergeMethodMerge(t *testing.T, name string, a, b any, m ValuesMergeMethod, check func(t *testing.T, v Values, err error)) { + t.Run(name, func(t *testing.T) { + av, err := NewValues(a) + require.NoError(t, err) + + bv, err := NewValues(b) + require.NoError(t, err) + + v, err := m.Merge(av, bv) + if check != nil { + check(t, v, err) + } else { + require.NoError(t, err) + } + }) +} + +func Test_ValuesMergeMethod_Merge(t *testing.T) { + testValuesMergeMethodMerge(t, "Nils", nil, nil, 0, func(t *testing.T, v Values, err error) { + require.NoError(t, err) + require.EqualValues(t, "{}", v.String()) + }) + testValuesMergeMethodMerge(t, "Second Nil", map[string]interface{}{ + "A": 1, + }, nil, 0, func(t *testing.T, v Values, err error) { + require.NoError(t, err) + require.EqualValues(t, `{"A":1}`, v.String()) + }) + testValuesMergeMethodMerge(t, "First Nil", nil, map[string]interface{}{ + "B": 1, + }, 0, func(t *testing.T, v Values, err error) { + require.NoError(t, err) + require.EqualValues(t, `{"B":1}`, v.String()) + }) + testValuesMergeMethodMerge(t, "Merge", map[string]interface{}{ + "A": 1, + }, map[string]interface{}{ + "B": 1, + }, 0, func(t *testing.T, v Values, err error) { + require.NoError(t, err) + require.EqualValues(t, `{"A":1,"B":1}`, v.String()) + }) + testValuesMergeMethodMerge(t, "Override", map[string]interface{}{ + "A": 1, + "S": 0, + }, map[string]interface{}{ + "B": 1, + "S": 2, + }, 0, func(t *testing.T, v Values, err error) { + require.NoError(t, err) + require.EqualValues(t, `{"A":1,"B":1,"S":2}`, v.String()) + }) + testValuesMergeMethodMerge(t, "Map - Default", map[string]interface{}{ + "M": map[string]interface{}{ + "A": 1, + "S": 0, + }, + }, map[string]interface{}{ + "M": map[string]interface{}{ + "B": 1, + "S": 2, + }, + }, 0, func(t *testing.T, v Values, err error) { + require.NoError(t, err) + require.EqualValues(t, `{"M":{"B":1,"S":2}}`, v.String()) + }) + testValuesMergeMethodMerge(t, "Map - Merge", map[string]interface{}{ + "M": map[string]interface{}{ + "A": 1, + "S": 0, + }, + }, map[string]interface{}{ + "M": map[string]interface{}{ + "B": 1, + "S": 2, + }, + }, MergeMaps, func(t *testing.T, v Values, err error) { + require.NoError(t, err) + require.EqualValues(t, `{"M":{"A":1,"B":1,"S":2}}`, v.String()) + }) + testValuesMergeMethodMerge(t, "SubMap - Default", map[string]interface{}{ + "M": map[string]interface{}{ + "M": map[string]interface{}{ + "A": 1, + "S": 0, + }, + }, + }, map[string]interface{}{ + "M": map[string]interface{}{ + "M": map[string]interface{}{ + "B": 1, + "S": 2, + }, + }, + }, 0, func(t *testing.T, v Values, err error) { + require.NoError(t, err) + require.EqualValues(t, `{"M":{"M":{"B":1,"S":2}}}`, v.String()) + }) + testValuesMergeMethodMerge(t, "SubMap - Merge", map[string]interface{}{ + "M": map[string]interface{}{ + "M": map[string]interface{}{ + "A": 1, + "S": 0, + }, + }, + }, map[string]interface{}{ + "M": map[string]interface{}{ + "M": map[string]interface{}{ + "B": 1, + "S": 2, + }, + }, + }, MergeMaps, func(t *testing.T, v Values, err error) { + require.NoError(t, err) + require.EqualValues(t, `{"M":{"M":{"A":1,"B":1,"S":2}}}`, v.String()) + }) +} diff --git a/pkg/util/k8sutil/informer.go b/pkg/util/k8sutil/informer.go index d73291cf4..65956ee3d 100644 --- a/pkg/util/k8sutil/informer.go +++ b/pkg/util/k8sutil/informer.go @@ -50,38 +50,44 @@ func NewResourceWatcher(getter cache.Getter, resource, namespace string, namespace, fields.Everything()) - _, informer := cache.NewIndexerInformer(source, objType, 0, cache.ResourceEventHandlerFuncs{ - AddFunc: func(obj interface{}) { - defer func() { - if err := recover(); err != nil { - informerLogger.Interface("error", err).Error("Recovered from panic. Stack trace:", string(debug.Stack())) + _, informer := cache.NewInformerWithOptions(cache.InformerOptions{ + ListerWatcher: source, + ObjectType: objType, + Handler: cache.ResourceEventHandlerFuncs{ + AddFunc: func(obj interface{}) { + defer func() { + if err := recover(); err != nil { + informerLogger.Interface("error", err).Error("Recovered from panic. Stack trace:", string(debug.Stack())) + } + }() + if h.AddFunc != nil { + h.AddFunc(obj) } - }() - if h.AddFunc != nil { - h.AddFunc(obj) - } - }, - UpdateFunc: func(oldObj, newObj interface{}) { - defer func() { - if err := recover(); err != nil { - informerLogger.Interface("error", err).Error("Recovered from panic. Stack trace:", string(debug.Stack())) + }, + UpdateFunc: func(oldObj, newObj interface{}) { + defer func() { + if err := recover(); err != nil { + informerLogger.Interface("error", err).Error("Recovered from panic. Stack trace:", string(debug.Stack())) + } + }() + if h.UpdateFunc != nil { + h.UpdateFunc(oldObj, newObj) } - }() - if h.UpdateFunc != nil { - h.UpdateFunc(oldObj, newObj) - } - }, - DeleteFunc: func(obj interface{}) { - defer func() { - if err := recover(); err != nil { - informerLogger.Interface("error", err).Error("Recovered from panic. Stack trace:", string(debug.Stack())) + }, + DeleteFunc: func(obj interface{}) { + defer func() { + if err := recover(); err != nil { + informerLogger.Interface("error", err).Error("Recovered from panic. Stack trace:", string(debug.Stack())) + } + }() + if h.DeleteFunc != nil { + h.DeleteFunc(obj) } - }() - if h.DeleteFunc != nil { - h.DeleteFunc(obj) - } + }, }, - }, cache.Indexers{}) + ResyncPeriod: 0, + Indexers: cache.Indexers{}, + }) return &ResourceWatcher{ informer: informer, diff --git a/pkg/util/k8sutil/inspector/arangoclustersynchronization/definition.go b/pkg/util/k8sutil/inspector/arangoclustersynchronization/definition.go index 100f4b130..b1d93d6ba 100644 --- a/pkg/util/k8sutil/inspector/arangoclustersynchronization/definition.go +++ b/pkg/util/k8sutil/inspector/arangoclustersynchronization/definition.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,11 +21,9 @@ package arangoclustersynchronization import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoclustersynchronization/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +31,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector + base.Inspector - gvk.GK - anonymous.Impl - - Version() version.Version - - V1() (v1.Inspector, error) + V1() (generic.Inspector[*api.ArangoClusterSynchronization], error) } diff --git a/pkg/util/k8sutil/inspector/arangotask/v1/loader.go b/pkg/util/k8sutil/inspector/arangoclustersynchronization/generic.go similarity index 57% rename from pkg/util/k8sutil/inspector/arangotask/v1/loader.go rename to pkg/util/k8sutil/inspector/arangoclustersynchronization/generic.go index 05f83ddf3..92274a760 100644 --- a/pkg/util/k8sutil/inspector/arangotask/v1/loader.go +++ b/pkg/util/k8sutil/inspector/arangoclustersynchronization/generic.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,36 +18,26 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package arangoclustersynchronization import ( api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) -type Inspector interface { - gvk.GVK +func List(filter ...generic.Filter[*api.ArangoClusterSynchronization]) generic.ExtractorList[*api.ArangoClusterSynchronizationList, *api.ArangoClusterSynchronization] { + return func(in *api.ArangoClusterSynchronizationList) []*api.ArangoClusterSynchronization { + ret := make([]*api.ArangoClusterSynchronization, 0, len(in.Items)) - ListSimple() []*api.ArangoTask - GetSimple(name string) (*api.ArangoTask, bool) - Filter(filters ...Filter) []*api.ArangoTask - Iterate(action Action, filters ...Filter) error - Read() ReadInterface -} - -type Filter func(at *api.ArangoTask) bool -type Action func(at *api.ArangoTask) error + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } -func FilterObject(at *api.ArangoTask, filters ...Filter) bool { - for _, f := range filters { - if f == nil { - continue + ret = append(ret, z) } - if !f(at) { - return false - } + return ret } - - return true } diff --git a/pkg/util/k8sutil/inspector/arangoclustersynchronization/v1/reader.go b/pkg/util/k8sutil/inspector/arangoclustersynchronization/v1/reader.go deleted file mode 100644 index e70982ba7..000000000 --- a/pkg/util/k8sutil/inspector/arangoclustersynchronization/v1/reader.go +++ /dev/null @@ -1,50 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - "context" - - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - - api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" -) - -// ModInterface has methods to work with GetSimple resources only for creation -type ModInterface interface { - Create(ctx context.Context, acs *api.ArangoClusterSynchronization, opts meta.CreateOptions) (*api.ArangoClusterSynchronization, error) - Update(ctx context.Context, acs *api.ArangoClusterSynchronization, opts meta.UpdateOptions) (*api.ArangoClusterSynchronization, error) - UpdateStatus(ctx context.Context, acs *api.ArangoClusterSynchronization, opts meta.UpdateOptions) (*api.ArangoClusterSynchronization, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *api.ArangoClusterSynchronization, err error) - Delete(ctx context.Context, name string, opts meta.DeleteOptions) error -} - -// Interface has methods to work with GetSimple resources. -type Interface interface { - ModInterface - ReadInterface -} - -// ReadInterface has methods to work with GetSimple resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*api.ArangoClusterSynchronization, error) -} diff --git a/pkg/util/k8sutil/inspector/arangomember/definition.go b/pkg/util/k8sutil/inspector/arangomember/definition.go index 6569f63a4..5e8df90f8 100644 --- a/pkg/util/k8sutil/inspector/arangomember/definition.go +++ b/pkg/util/k8sutil/inspector/arangomember/definition.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,11 +21,9 @@ package arangomember import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangomember/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +31,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector + base.Inspector - gvk.GK - anonymous.Impl - - Version() version.Version - - V1() v1.Inspector + V1() generic.Inspector[*api.ArangoMember] } diff --git a/pkg/util/k8sutil/inspector/arangomember/v1/reader.go b/pkg/util/k8sutil/inspector/arangomember/generic.go similarity index 61% rename from pkg/util/k8sutil/inspector/arangomember/v1/reader.go rename to pkg/util/k8sutil/inspector/arangomember/generic.go index 92a63a174..0e857de9d 100644 --- a/pkg/util/k8sutil/inspector/arangomember/v1/reader.go +++ b/pkg/util/k8sutil/inspector/arangomember/generic.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,25 +18,26 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package arangomember import ( api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) -// ModInterface has methods to work with ArangoMember resources only for creation -type ModInterface interface { - generic.ModStatusClient[*api.ArangoMember] -} +func List(filter ...generic.Filter[*api.ArangoMember]) generic.ExtractorList[*api.ArangoMemberList, *api.ArangoMember] { + return func(in *api.ArangoMemberList) []*api.ArangoMember { + ret := make([]*api.ArangoMember, 0, len(in.Items)) -// Interface has methods to work with ArangoMember resources. -type Interface interface { - ModInterface - ReadInterface -} + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } + + ret = append(ret, z) + } -// ReadInterface has methods to work with ArangoMember resources with ReadOnly mode. -type ReadInterface interface { - generic.ReadClient[*api.ArangoMember] + return ret + } } diff --git a/pkg/util/k8sutil/inspector/endpoints/v1/loader.go b/pkg/util/k8sutil/inspector/arangoplatformstorage/definition.go similarity index 53% rename from pkg/util/k8sutil/inspector/endpoints/v1/loader.go rename to pkg/util/k8sutil/inspector/arangoplatformstorage/definition.go index 6d6067124..b6d8a8364 100644 --- a/pkg/util/k8sutil/inspector/endpoints/v1/loader.go +++ b/pkg/util/k8sutil/inspector/arangoplatformstorage/definition.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,37 +18,28 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package arangoplatformstorage import ( - core "k8s.io/api/core/v1" - + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" ) type Inspector interface { - gvk.GVK - - ListSimple() []*core.Endpoints - GetSimple(name string) (*core.Endpoints, bool) - Filter(filters ...Filter) []*core.Endpoints - Iterate(action Action, filters ...Filter) error - Read() ReadInterface + ArangoPlatformStorage() Definition } -type Filter func(at *core.Endpoints) bool -type Action func(at *core.Endpoints) error +type Definition interface { + refresh.Inspector -func FilterObject(at *core.Endpoints, filters ...Filter) bool { - for _, f := range filters { - if f == nil { - continue - } + gvk.GK + anonymous.Impl - if !f(at) { - return false - } - } + Version() version.Version - return true + V1Alpha1() (generic.Inspector[*platformApi.ArangoPlatformStorage], error) } diff --git a/pkg/util/k8sutil/list.go b/pkg/util/k8sutil/inspector/arangoplatformstorage/generic.go similarity index 53% rename from pkg/util/k8sutil/list.go rename to pkg/util/k8sutil/inspector/arangoplatformstorage/generic.go index 8202f5d1a..4eb46f852 100644 --- a/pkg/util/k8sutil/list.go +++ b/pkg/util/k8sutil/inspector/arangoplatformstorage/generic.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,29 +18,26 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package k8sutil +package arangoplatformstorage import ( - "context" - - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) -func APIList[T generic.ListContinue](ctx context.Context, api generic.ListInterface[T], opts meta.ListOptions, parser func(result T, err error) error) error { - result, err := api.List(ctx, opts) - for { - if err := parser(result, err); err != nil { - return err - } +func List(filter ...generic.Filter[*platformApi.ArangoPlatformStorage]) generic.ExtractorList[*platformApi.ArangoPlatformStorageList, *platformApi.ArangoPlatformStorage] { + return func(in *platformApi.ArangoPlatformStorageList) []*platformApi.ArangoPlatformStorage { + ret := make([]*platformApi.ArangoPlatformStorage, 0, len(in.Items)) - if c := result.GetContinue(); c == "" { - return nil - } else { - result, err = api.List(ctx, meta.ListOptions{ - Continue: result.GetContinue(), - }) + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } + + ret = append(ret, z) } + + return ret } } diff --git a/pkg/util/k8sutil/inspector/arangoprofile/definition.go b/pkg/util/k8sutil/inspector/arangoprofile/definition.go index cf6e79851..4172f3cb8 100644 --- a/pkg/util/k8sutil/inspector/arangoprofile/definition.go +++ b/pkg/util/k8sutil/inspector/arangoprofile/definition.go @@ -21,11 +21,9 @@ package arangoprofile import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - v1beta1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoprofile/v1beta1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +31,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector + base.Inspector - gvk.GK - anonymous.Impl - - Version() version.Version - - V1Beta1() (v1beta1.Inspector, error) + V1Beta1() (generic.Inspector[*schedulerApi.ArangoProfile], error) } diff --git a/pkg/util/k8sutil/inspector/arangoprofile/v1beta1/loader.go b/pkg/util/k8sutil/inspector/arangoprofile/generic.go similarity index 55% rename from pkg/util/k8sutil/inspector/arangoprofile/v1beta1/loader.go rename to pkg/util/k8sutil/inspector/arangoprofile/generic.go index 64844795f..e8d275358 100644 --- a/pkg/util/k8sutil/inspector/arangoprofile/v1beta1/loader.go +++ b/pkg/util/k8sutil/inspector/arangoprofile/generic.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,36 +18,26 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1beta1 +package arangoprofile import ( schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) -type Inspector interface { - gvk.GVK +func List(filter ...generic.Filter[*schedulerApi.ArangoProfile]) generic.ExtractorList[*schedulerApi.ArangoProfileList, *schedulerApi.ArangoProfile] { + return func(in *schedulerApi.ArangoProfileList) []*schedulerApi.ArangoProfile { + ret := make([]*schedulerApi.ArangoProfile, 0, len(in.Items)) - ListSimple() []*schedulerApi.ArangoProfile - GetSimple(name string) (*schedulerApi.ArangoProfile, bool) - Filter(filters ...Filter) []*schedulerApi.ArangoProfile - Iterate(action Action, filters ...Filter) error - Read() ReadInterface -} - -type Filter func(at *schedulerApi.ArangoProfile) bool -type Action func(at *schedulerApi.ArangoProfile) error + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } -func FilterObject(at *schedulerApi.ArangoProfile, filters ...Filter) bool { - for _, f := range filters { - if f == nil { - continue + ret = append(ret, z) } - if !f(at) { - return false - } + return ret } - - return true } diff --git a/pkg/util/k8sutil/inspector/arangoprofile/v1beta1/reader.go b/pkg/util/k8sutil/inspector/arangoprofile/v1beta1/reader.go deleted file mode 100644 index d0328fe5b..000000000 --- a/pkg/util/k8sutil/inspector/arangoprofile/v1beta1/reader.go +++ /dev/null @@ -1,50 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1beta1 - -import ( - "context" - - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - - schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" -) - -// ModInterface has methods to work with ArangoTask resources only for creation -type ModInterface interface { - Create(ctx context.Context, arangoProfile *schedulerApi.ArangoProfile, opts meta.CreateOptions) (*schedulerApi.ArangoProfile, error) - Update(ctx context.Context, arangoProfile *schedulerApi.ArangoProfile, opts meta.UpdateOptions) (*schedulerApi.ArangoProfile, error) - UpdateStatus(ctx context.Context, arangoProfile *schedulerApi.ArangoProfile, opts meta.UpdateOptions) (*schedulerApi.ArangoProfile, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *schedulerApi.ArangoProfile, err error) - Delete(ctx context.Context, name string, opts meta.DeleteOptions) error -} - -// Interface has methods to work with ArangoTask resources. -type Interface interface { - ModInterface - ReadInterface -} - -// ReadInterface has methods to work with ArangoTask resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*schedulerApi.ArangoProfile, error) -} diff --git a/pkg/util/k8sutil/inspector/arangoroute/definition.go b/pkg/util/k8sutil/inspector/arangoroute/definition.go index e78513740..5cb2abd6b 100644 --- a/pkg/util/k8sutil/inspector/arangoroute/definition.go +++ b/pkg/util/k8sutil/inspector/arangoroute/definition.go @@ -21,11 +21,9 @@ package arangoroute import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - v1alpha1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoroute/v1alpha1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +31,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector + base.Inspector - gvk.GK - anonymous.Impl - - Version() version.Version - - V1Alpha1() (v1alpha1.Inspector, error) + V1Alpha1() (generic.Inspector[*networkingApi.ArangoRoute], error) } diff --git a/pkg/util/k8sutil/inspector/arangoroute/v1alpha1/loader.go b/pkg/util/k8sutil/inspector/arangoroute/generic.go similarity index 56% rename from pkg/util/k8sutil/inspector/arangoroute/v1alpha1/loader.go rename to pkg/util/k8sutil/inspector/arangoroute/generic.go index 8fc237eed..b06ae6b74 100644 --- a/pkg/util/k8sutil/inspector/arangoroute/v1alpha1/loader.go +++ b/pkg/util/k8sutil/inspector/arangoroute/generic.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,36 +18,26 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1alpha1 +package arangoroute import ( networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) -type Inspector interface { - gvk.GVK +func List(filter ...generic.Filter[*networkingApi.ArangoRoute]) generic.ExtractorList[*networkingApi.ArangoRouteList, *networkingApi.ArangoRoute] { + return func(in *networkingApi.ArangoRouteList) []*networkingApi.ArangoRoute { + ret := make([]*networkingApi.ArangoRoute, 0, len(in.Items)) - ListSimple() []*networkingApi.ArangoRoute - GetSimple(name string) (*networkingApi.ArangoRoute, bool) - Filter(filters ...Filter) []*networkingApi.ArangoRoute - Iterate(action Action, filters ...Filter) error - Read() ReadInterface -} - -type Filter func(at *networkingApi.ArangoRoute) bool -type Action func(at *networkingApi.ArangoRoute) error + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } -func FilterObject(at *networkingApi.ArangoRoute, filters ...Filter) bool { - for _, f := range filters { - if f == nil { - continue + ret = append(ret, z) } - if !f(at) { - return false - } + return ret } - - return true } diff --git a/pkg/util/k8sutil/inspector/arangoroute/v1alpha1/reader.go b/pkg/util/k8sutil/inspector/arangoroute/v1alpha1/reader.go deleted file mode 100644 index bd51d3ef6..000000000 --- a/pkg/util/k8sutil/inspector/arangoroute/v1alpha1/reader.go +++ /dev/null @@ -1,50 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1alpha1 - -import ( - "context" - - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - - networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" -) - -// ModInterface has methods to work with ArangoTask resources only for creation -type ModInterface interface { - Create(ctx context.Context, arangotask *networkingApi.ArangoRoute, opts meta.CreateOptions) (*networkingApi.ArangoRoute, error) - Update(ctx context.Context, arangotask *networkingApi.ArangoRoute, opts meta.UpdateOptions) (*networkingApi.ArangoRoute, error) - UpdateStatus(ctx context.Context, arangotask *networkingApi.ArangoRoute, opts meta.UpdateOptions) (*networkingApi.ArangoRoute, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *networkingApi.ArangoRoute, err error) - Delete(ctx context.Context, name string, opts meta.DeleteOptions) error -} - -// Interface has methods to work with ArangoTask resources. -type Interface interface { - ModInterface - ReadInterface -} - -// ReadInterface has methods to work with ArangoTask resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*networkingApi.ArangoRoute, error) -} diff --git a/pkg/util/k8sutil/inspector/arangotask/definition.go b/pkg/util/k8sutil/inspector/arangotask/definition.go index 5b7b277a4..7f9e9f538 100644 --- a/pkg/util/k8sutil/inspector/arangotask/definition.go +++ b/pkg/util/k8sutil/inspector/arangotask/definition.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,11 +21,9 @@ package arangotask import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangotask/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +31,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector + base.Inspector - gvk.GK - anonymous.Impl - - Version() version.Version - - V1() (v1.Inspector, error) + V1() (generic.Inspector[*api.ArangoTask], error) } diff --git a/pkg/util/k8sutil/inspector/arangomember/v1/loader.go b/pkg/util/k8sutil/inspector/arangotask/generic.go similarity index 62% rename from pkg/util/k8sutil/inspector/arangomember/v1/loader.go rename to pkg/util/k8sutil/inspector/arangotask/generic.go index 21157129c..a69729275 100644 --- a/pkg/util/k8sutil/inspector/arangomember/v1/loader.go +++ b/pkg/util/k8sutil/inspector/arangotask/generic.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,21 +18,26 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package arangotask import ( api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) -type Inspector interface { - gvk.GVK +func List(filter ...generic.Filter[*api.ArangoTask]) generic.ExtractorList[*api.ArangoTaskList, *api.ArangoTask] { + return func(in *api.ArangoTaskList) []*api.ArangoTask { + ret := make([]*api.ArangoTask, 0, len(in.Items)) - GetSimple(name string) (*api.ArangoMember, bool) - GetSimpleOptional(name string) *api.ArangoMember - Iterate(action Action, filters ...Filter) error - Read() ReadInterface -} + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } + + ret = append(ret, z) + } -type Filter func(pod *api.ArangoMember) bool -type Action func(pod *api.ArangoMember) error + return ret + } +} diff --git a/pkg/util/k8sutil/inspector/arangotask/v1/reader.go b/pkg/util/k8sutil/inspector/arangotask/v1/reader.go deleted file mode 100644 index dded62250..000000000 --- a/pkg/util/k8sutil/inspector/arangotask/v1/reader.go +++ /dev/null @@ -1,50 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - "context" - - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - - api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" -) - -// ModInterface has methods to work with ArangoTask resources only for creation -type ModInterface interface { - Create(ctx context.Context, arangotask *api.ArangoTask, opts meta.CreateOptions) (*api.ArangoTask, error) - Update(ctx context.Context, arangotask *api.ArangoTask, opts meta.UpdateOptions) (*api.ArangoTask, error) - UpdateStatus(ctx context.Context, arangotask *api.ArangoTask, opts meta.UpdateOptions) (*api.ArangoTask, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *api.ArangoTask, err error) - Delete(ctx context.Context, name string, opts meta.DeleteOptions) error -} - -// Interface has methods to work with ArangoTask resources. -type Interface interface { - ModInterface - ReadInterface -} - -// ReadInterface has methods to work with ArangoTask resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*api.ArangoTask, error) -} diff --git a/pkg/util/k8sutil/inspector/configmap/definition.go b/pkg/util/k8sutil/inspector/configmap/definition.go index bc5e23a71..3cb63218b 100644 --- a/pkg/util/k8sutil/inspector/configmap/definition.go +++ b/pkg/util/k8sutil/inspector/configmap/definition.go @@ -21,11 +21,10 @@ package configmap import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/configmap/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +32,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector - - gvk.GK - anonymous.Impl - - Version() version.Version + base.Inspector - V1() v1.Inspector + V1() generic.Inspector[*core.ConfigMap] } diff --git a/pkg/util/k8sutil/inspector/configmap/generic.go b/pkg/util/k8sutil/inspector/configmap/generic.go new file mode 100644 index 000000000..6237af2ab --- /dev/null +++ b/pkg/util/k8sutil/inspector/configmap/generic.go @@ -0,0 +1,44 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package configmap + +import ( + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" +) + +func List(filter ...generic.Filter[*core.ConfigMap]) generic.ExtractorList[*core.ConfigMapList, *core.ConfigMap] { + return func(in *core.ConfigMapList) []*core.ConfigMap { + ret := make([]*core.ConfigMap, 0, len(in.Items)) + + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } + + ret = append(ret, z) + } + + return ret + } +} diff --git a/pkg/util/k8sutil/inspector/configmap/v1/reader.go b/pkg/util/k8sutil/inspector/configmap/v1/reader.go deleted file mode 100644 index b2262fefd..000000000 --- a/pkg/util/k8sutil/inspector/configmap/v1/reader.go +++ /dev/null @@ -1,48 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2024 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - "context" - - core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" -) - -// ModInterface has methods to work with ConfigMap resources only for creation -type ModInterface interface { - Create(ctx context.Context, configmap *core.ConfigMap, opts meta.CreateOptions) (*core.ConfigMap, error) - Update(ctx context.Context, configmap *core.ConfigMap, opts meta.UpdateOptions) (*core.ConfigMap, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *core.ConfigMap, err error) - Delete(ctx context.Context, name string, opts meta.DeleteOptions) error -} - -// Interface has methods to work with ConfigMap resources. -type Interface interface { - ModInterface - ReadInterface -} - -// ReadInterface has methods to work with ConfigMap resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*core.ConfigMap, error) -} diff --git a/pkg/util/k8sutil/inspector/constants/aps_constants.go b/pkg/util/k8sutil/inspector/constants/aps_constants.go new file mode 100644 index 000000000..a993b2126 --- /dev/null +++ b/pkg/util/k8sutil/inspector/constants/aps_constants.go @@ -0,0 +1,66 @@ +// +// DISCLAIMER +// +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package constants + +import ( + "k8s.io/apimachinery/pkg/runtime/schema" + + "github.com/arangodb/kube-arangodb/pkg/apis/platform" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" +) + +// ArangoPlatformStorage +const ( + ArangoPlatformStorageGroup = platform.ArangoPlatformGroupName + ArangoPlatformStorageResource = platform.ArangoPlatformStorageResourcePlural + ArangoPlatformStorageKind = platform.ArangoPlatformStorageResourceKind + ArangoPlatformStorageVersionV1Beta1 = platformApi.ArangoPlatformVersion +) + +func ArangoPlatformStorageGK() schema.GroupKind { + return schema.GroupKind{ + Group: ArangoPlatformStorageGroup, + Kind: ArangoPlatformStorageKind, + } +} + +func ArangoPlatformStorageGKv1() schema.GroupVersionKind { + return schema.GroupVersionKind{ + Group: ArangoPlatformStorageGroup, + Kind: ArangoPlatformStorageKind, + Version: ArangoPlatformStorageVersionV1Beta1, + } +} + +func ArangoPlatformStorageGR() schema.GroupResource { + return schema.GroupResource{ + Group: ArangoPlatformStorageGroup, + Resource: ArangoPlatformStorageResource, + } +} + +func ArangoPlatformStorageGRv1() schema.GroupVersionResource { + return schema.GroupVersionResource{ + Group: ArangoPlatformStorageGroup, + Resource: ArangoPlatformStorageResource, + Version: ArangoPlatformStorageVersionV1Beta1, + } +} diff --git a/pkg/util/k8sutil/inspector/definitions/components.go b/pkg/util/k8sutil/inspector/definitions/components.go index 886cddaf3..0ef2ffd4c 100644 --- a/pkg/util/k8sutil/inspector/definitions/components.go +++ b/pkg/util/k8sutil/inspector/definitions/components.go @@ -30,6 +30,7 @@ const ( ArangoTask Component = "ArangoTask" ArangoRoute Component = "ArangoRoute" ArangoProfile Component = "ArangoProfile" + ArangoPlatformStorage Component = "ArangoPlatformStorage" Node Component = "Node" PersistentVolume Component = "PersistentVolume" PersistentVolumeClaim Component = "PersistentVolumeClaim" @@ -50,6 +51,7 @@ func AllComponents() []Component { ArangoTask, ArangoRoute, ArangoProfile, + ArangoPlatformStorage, Node, PersistentVolume, PersistentVolumeClaim, diff --git a/pkg/util/k8sutil/inspector/endpoints/definition.go b/pkg/util/k8sutil/inspector/endpoints/definition.go index 6c431135d..481cdb752 100644 --- a/pkg/util/k8sutil/inspector/endpoints/definition.go +++ b/pkg/util/k8sutil/inspector/endpoints/definition.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,11 +21,10 @@ package endpoints import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/endpoints/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +32,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector - - gvk.GK - anonymous.Impl - - Version() version.Version + base.Inspector - V1() (v1.Inspector, error) + V1() (generic.Inspector[*core.Endpoints], error) } diff --git a/pkg/util/k8sutil/inspector/endpoints/generic.go b/pkg/util/k8sutil/inspector/endpoints/generic.go new file mode 100644 index 000000000..34844530a --- /dev/null +++ b/pkg/util/k8sutil/inspector/endpoints/generic.go @@ -0,0 +1,44 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package endpoints + +import ( + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" +) + +func List(filter ...generic.Filter[*core.Endpoints]) generic.ExtractorList[*core.EndpointsList, *core.Endpoints] { + return func(in *core.EndpointsList) []*core.Endpoints { + ret := make([]*core.Endpoints, 0, len(in.Items)) + + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } + + ret = append(ret, z) + } + + return ret + } +} diff --git a/pkg/util/k8sutil/inspector/endpoints/v1/reader.go b/pkg/util/k8sutil/inspector/endpoints/v1/reader.go deleted file mode 100644 index dfd9e1d18..000000000 --- a/pkg/util/k8sutil/inspector/endpoints/v1/reader.go +++ /dev/null @@ -1,48 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - "context" - - core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" -) - -// ModInterface has methods to work with Endpoints resources only for creation -type ModInterface interface { - Create(ctx context.Context, endpoints *core.Endpoints, opts meta.CreateOptions) (*core.Endpoints, error) - Update(ctx context.Context, endpoints *core.Endpoints, opts meta.UpdateOptions) (*core.Endpoints, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *core.Endpoints, err error) - Delete(ctx context.Context, name string, opts meta.DeleteOptions) error -} - -// Interface has methods to work with Endpoints resources. -type Interface interface { - ModInterface - ReadInterface -} - -// ReadInterface has methods to work with Endpoints resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*core.Endpoints, error) -} diff --git a/pkg/util/k8sutil/inspector/generic/inspector.go b/pkg/util/k8sutil/inspector/generic/inspector.go new file mode 100644 index 000000000..54251c12a --- /dev/null +++ b/pkg/util/k8sutil/inspector/generic/inspector.go @@ -0,0 +1,33 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package generic + +import meta "k8s.io/apimachinery/pkg/apis/meta/v1" + +type InspectorInterface[S meta.Object] interface { + ModClient[S] + ReadClient[S] +} + +type InspectorStatusInterface[S meta.Object] interface { + ModStatusClient[S] + ReadClient[S] +} diff --git a/pkg/util/k8sutil/inspector/arangoclustersynchronization/v1/loader.go b/pkg/util/k8sutil/inspector/generic/inspector_filter.go similarity index 51% rename from pkg/util/k8sutil/inspector/arangoclustersynchronization/v1/loader.go rename to pkg/util/k8sutil/inspector/generic/inspector_filter.go index 5432e5f1f..d3f65b4bf 100644 --- a/pkg/util/k8sutil/inspector/arangoclustersynchronization/v1/loader.go +++ b/pkg/util/k8sutil/inspector/generic/inspector_filter.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,36 +18,55 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package generic import ( - api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" ) -type Inspector interface { +type Inspector[S meta.Object] interface { gvk.GVK - ListSimple() []*api.ArangoClusterSynchronization - GetSimple(name string) (*api.ArangoClusterSynchronization, bool) - Filter(filters ...Filter) []*api.ArangoClusterSynchronization - Iterate(action Action, filters ...Filter) error - Read() ReadInterface + ListSimple() []S + GetSimple(name string) (S, bool) + Filter(filters ...Filter[S]) []S + Iterate(action Action[S], filters ...Filter[S]) error + Read() ReadClient[S] } -type Filter func(acs *api.ArangoClusterSynchronization) bool -type Action func(acs *api.ArangoClusterSynchronization) error +type Filter[S meta.Object] func(obj S) bool +type Action[S meta.Object] func(obj S) error -func FilterObject(acs *api.ArangoClusterSynchronization, filters ...Filter) bool { +func FilterObject[S meta.Object](obj S, filters ...Filter[S]) bool { for _, f := range filters { if f == nil { continue } - if !f(acs) { + if !f(obj) { return false } } return true } + +func FilterByLabels[S meta.Object](labels map[string]string) Filter[S] { + return func(obj S) bool { + objLabels := obj.GetLabels() + for key, value := range labels { + v, ok := objLabels[key] + if !ok { + return false + } + + if v != value { + return false + } + } + + return true + } +} diff --git a/pkg/util/k8sutil/inspector/generic/mod.go b/pkg/util/k8sutil/inspector/generic/mod.go index 37a0c2e25..fc5ff1158 100644 --- a/pkg/util/k8sutil/inspector/generic/mod.go +++ b/pkg/util/k8sutil/inspector/generic/mod.go @@ -23,6 +23,7 @@ package generic import ( "context" + autoscaling "k8s.io/api/autoscaling/v1" meta "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" ) @@ -31,6 +32,8 @@ type ListContinue interface { GetContinue() string } +type ExtractorList[L ListContinue, S meta.Object] func(in L) []S + type ListInterface[S ListContinue] interface { List(ctx context.Context, opts meta.ListOptions) (S, error) } @@ -59,6 +62,19 @@ type DeleteInterface[S meta.Object] interface { Delete(ctx context.Context, name string, opts meta.DeleteOptions) error } +type ScaleGet interface { + GetScale(ctx context.Context, name string, options meta.GetOptions) (*autoscaling.Scale, error) +} + +type ScaleUpdate interface { + UpdateScale(ctx context.Context, name string, scale *autoscaling.Scale, opts meta.UpdateOptions) (*autoscaling.Scale, error) +} + +type Scale interface { + ScaleGet + ScaleUpdate +} + type ReadClient[S meta.Object] interface { GetInterface[S] } @@ -67,7 +83,6 @@ type ModClient[S meta.Object] interface { CreateInterface[S] UpdateInterface[S] PatchInterface[S] - PatchInterface[S] DeleteInterface[S] } diff --git a/pkg/util/k8sutil/inspector/inspector.go b/pkg/util/k8sutil/inspector/inspector.go index 41a1631aa..bb6ed18f0 100644 --- a/pkg/util/k8sutil/inspector/inspector.go +++ b/pkg/util/k8sutil/inspector/inspector.go @@ -32,6 +32,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoclustersynchronization" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangodeployment" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangomember" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoplatformstorage" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoprofile" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoroute" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangotask" @@ -96,6 +97,7 @@ type Inspector interface { arangotask.Inspector arangoroute.Inspector arangoprofile.Inspector + arangoplatformstorage.Inspector mods.Mods diff --git a/pkg/util/k8sutil/inspector/mods/mods.go b/pkg/util/k8sutil/inspector/mods/mods.go index 62eeb6295..4532967dd 100644 --- a/pkg/util/k8sutil/inspector/mods/mods.go +++ b/pkg/util/k8sutil/inspector/mods/mods.go @@ -21,76 +21,75 @@ package mods import ( - arangoclustersynchronizationv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoclustersynchronization/v1" - arangomemberv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangomember/v1" - arangoProfilev1beta1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoprofile/v1beta1" - arangoroutev1alpha1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoroute/v1alpha1" - arangotaskv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangotask/v1" - configMapv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/configmap/v1" - endpointsv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/endpoints/v1" - persistentvolumeclaimv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1" - podv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/pod/v1" - poddisruptionbudgetv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/poddisruptionbudget/v1" - secretv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" - servicev1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/service/v1" - serviceaccountv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/serviceaccount/v1" - servicemonitorv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/servicemonitor/v1" + monitoring "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" + core "k8s.io/api/core/v1" + policy "k8s.io/api/policy/v1" + + api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type PodsMods interface { - V1() podv1.ModInterface + V1() generic.ModClient[*core.Pod] } type ServiceAccountsMods interface { - V1() serviceaccountv1.ModInterface + V1() generic.ModClient[*core.ServiceAccount] } type SecretsMods interface { - V1() secretv1.ModInterface + V1() generic.ModClient[*core.Secret] } type ConfigMapsMods interface { - V1() configMapv1.ModInterface + V1() generic.ModClient[*core.ConfigMap] } type PersistentVolumeClaimsMods interface { - V1() persistentvolumeclaimv1.ModInterface + V1() generic.ModClient[*core.PersistentVolumeClaim] } type ServicesMods interface { - V1() servicev1.ModInterface + V1() generic.ModClient[*core.Service] } type EndpointsMods interface { - V1() endpointsv1.ModInterface + V1() generic.ModClient[*core.Endpoints] } type ServiceMonitorsMods interface { - V1() servicemonitorv1.ModInterface + V1() generic.ModClient[*monitoring.ServiceMonitor] } type PodDisruptionBudgetsMods interface { - V1() poddisruptionbudgetv1.ModInterface + V1() generic.ModClient[*policy.PodDisruptionBudget] } type ArangoMemberMods interface { - V1() arangomemberv1.ModInterface + V1() generic.ModStatusClient[*api.ArangoMember] +} + +type ArangoPlatformStorageMods interface { + V1Alpha1() generic.ModStatusClient[*platformApi.ArangoPlatformStorage] } type ArangoTaskMods interface { - V1() arangotaskv1.ModInterface + V1() generic.ModStatusClient[*api.ArangoTask] } type ArangoClusterSynchronizationMods interface { - V1() arangoclustersynchronizationv1.ModInterface + V1() generic.ModStatusClient[*api.ArangoClusterSynchronization] } type ArangoRouteMods interface { - V1Alpha1() arangoroutev1alpha1.ModInterface + V1Alpha1() generic.ModStatusClient[*networkingApi.ArangoRoute] } type ArangoProfileMods interface { - V1Beta1() arangoProfilev1beta1.ModInterface + V1Beta1() generic.ModStatusClient[*schedulerApi.ArangoProfile] } type Mods interface { @@ -109,4 +108,5 @@ type Mods interface { ArangoClusterSynchronizationModInterface() ArangoClusterSynchronizationMods ArangoRouteModInterface() ArangoRouteMods ArangoProfileModInterface() ArangoProfileMods + ArangoPlatformStorageModInterface() ArangoPlatformStorageMods } diff --git a/pkg/util/k8sutil/inspector/node/definition.go b/pkg/util/k8sutil/inspector/node/definition.go index 39a0619f5..0f60a7c02 100644 --- a/pkg/util/k8sutil/inspector/node/definition.go +++ b/pkg/util/k8sutil/inspector/node/definition.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,11 +21,10 @@ package node import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/node/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +32,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector - - gvk.GK - anonymous.Impl - - Version() version.Version + base.Inspector - V1() (v1.Inspector, error) + V1() (generic.Inspector[*core.Node], error) } diff --git a/pkg/util/k8sutil/inspector/node/v1/loader.go b/pkg/util/k8sutil/inspector/node/generic.go similarity index 63% rename from pkg/util/k8sutil/inspector/node/v1/loader.go rename to pkg/util/k8sutil/inspector/node/generic.go index f59878000..dbd1b2f75 100644 --- a/pkg/util/k8sutil/inspector/node/v1/loader.go +++ b/pkg/util/k8sutil/inspector/node/generic.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,22 +18,27 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package node import ( core "k8s.io/api/core/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) -type Inspector interface { - gvk.GVK +func List(filter ...generic.Filter[*core.Node]) generic.ExtractorList[*core.NodeList, *core.Node] { + return func(in *core.NodeList) []*core.Node { + ret := make([]*core.Node, 0, len(in.Items)) - ListSimple() []*core.Node - GetSimple(name string) (*core.Node, bool) - Iterate(action Action, filters ...Filter) error - Read() ReadInterface -} + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } + + ret = append(ret, z) + } -type Filter func(podDisruptionBudget *core.Node) bool -type Action func(podDisruptionBudget *core.Node) error + return ret + } +} diff --git a/pkg/util/k8sutil/inspector/node/v1/reader.go b/pkg/util/k8sutil/inspector/node/v1/reader.go deleted file mode 100644 index a3661d1a8..000000000 --- a/pkg/util/k8sutil/inspector/node/v1/reader.go +++ /dev/null @@ -1,38 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - "context" - - core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// Interface has methods to work with Node resources. -type Interface interface { - ReadInterface -} - -// ReadInterface has methods to work with Node resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*core.Node, error) -} diff --git a/pkg/util/k8sutil/inspector/persistentvolume/definition.go b/pkg/util/k8sutil/inspector/persistentvolume/definition.go index 3b7e5c595..f31f70205 100644 --- a/pkg/util/k8sutil/inspector/persistentvolume/definition.go +++ b/pkg/util/k8sutil/inspector/persistentvolume/definition.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,11 +21,10 @@ package persistentvolume import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolume/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +32,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector - - gvk.GK - anonymous.Impl - - Version() version.Version + base.Inspector - V1() (v1.Inspector, error) + V1() (generic.Inspector[*core.PersistentVolume], error) } diff --git a/pkg/util/k8sutil/inspector/persistentvolume/generic.go b/pkg/util/k8sutil/inspector/persistentvolume/generic.go new file mode 100644 index 000000000..a1f79478f --- /dev/null +++ b/pkg/util/k8sutil/inspector/persistentvolume/generic.go @@ -0,0 +1,44 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package persistentvolume + +import ( + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" +) + +func List(filter ...generic.Filter[*core.PersistentVolume]) generic.ExtractorList[*core.PersistentVolumeList, *core.PersistentVolume] { + return func(in *core.PersistentVolumeList) []*core.PersistentVolume { + ret := make([]*core.PersistentVolume, 0, len(in.Items)) + + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } + + ret = append(ret, z) + } + + return ret + } +} diff --git a/pkg/util/k8sutil/inspector/persistentvolumeclaim/definition.go b/pkg/util/k8sutil/inspector/persistentvolumeclaim/definition.go index a61b8ead8..1ca96e738 100644 --- a/pkg/util/k8sutil/inspector/persistentvolumeclaim/definition.go +++ b/pkg/util/k8sutil/inspector/persistentvolumeclaim/definition.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,11 +21,10 @@ package persistentvolumeclaim import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +32,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector - - gvk.GK - anonymous.Impl - - Version() version.Version + base.Inspector - V1() v1.Inspector + V1() generic.Inspector[*core.PersistentVolumeClaim] } diff --git a/pkg/util/k8sutil/inspector/persistentvolumeclaim/generic.go b/pkg/util/k8sutil/inspector/persistentvolumeclaim/generic.go new file mode 100644 index 000000000..0116c3cc6 --- /dev/null +++ b/pkg/util/k8sutil/inspector/persistentvolumeclaim/generic.go @@ -0,0 +1,44 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package persistentvolumeclaim + +import ( + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" +) + +func List(filter ...generic.Filter[*core.PersistentVolumeClaim]) generic.ExtractorList[*core.PersistentVolumeClaimList, *core.PersistentVolumeClaim] { + return func(in *core.PersistentVolumeClaimList) []*core.PersistentVolumeClaim { + ret := make([]*core.PersistentVolumeClaim, 0, len(in.Items)) + + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } + + ret = append(ret, z) + } + + return ret + } +} diff --git a/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1/reader.go b/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1/reader.go deleted file mode 100644 index c0d825b6e..000000000 --- a/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1/reader.go +++ /dev/null @@ -1,48 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - "context" - - core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" -) - -// ModInterface has methods to work with PersistentVolumeClaim resources only for creation -type ModInterface interface { - Create(ctx context.Context, persistentvolumeclaim *core.PersistentVolumeClaim, opts meta.CreateOptions) (*core.PersistentVolumeClaim, error) - Update(ctx context.Context, persistentvolumeclaim *core.PersistentVolumeClaim, opts meta.UpdateOptions) (*core.PersistentVolumeClaim, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *core.PersistentVolumeClaim, err error) - Delete(ctx context.Context, name string, opts meta.DeleteOptions) error -} - -// Interface has methods to work with PersistentVolumeClaim resources. -type Interface interface { - ModInterface - ReadInterface -} - -// ReadInterface has methods to work with PersistentVolumeClaim resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*core.PersistentVolumeClaim, error) -} diff --git a/pkg/util/k8sutil/inspector/pod/definition.go b/pkg/util/k8sutil/inspector/pod/definition.go index e1e652efd..3e124cbae 100644 --- a/pkg/util/k8sutil/inspector/pod/definition.go +++ b/pkg/util/k8sutil/inspector/pod/definition.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,11 +21,10 @@ package pod import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/pod/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +32,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector - - gvk.GK - anonymous.Impl - - Version() version.Version + base.Inspector - V1() v1.Inspector + V1() generic.Inspector[*core.Pod] } diff --git a/pkg/util/k8sutil/inspector/persistentvolume/v1/loader.go b/pkg/util/k8sutil/inspector/pod/generic.go similarity index 64% rename from pkg/util/k8sutil/inspector/persistentvolume/v1/loader.go rename to pkg/util/k8sutil/inspector/pod/generic.go index 2a52f8d86..6a30ea0f2 100644 --- a/pkg/util/k8sutil/inspector/persistentvolume/v1/loader.go +++ b/pkg/util/k8sutil/inspector/pod/generic.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,22 +18,27 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package pod import ( core "k8s.io/api/core/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) -type Inspector interface { - gvk.GVK +func List(filter ...generic.Filter[*core.Pod]) generic.ExtractorList[*core.PodList, *core.Pod] { + return func(in *core.PodList) []*core.Pod { + ret := make([]*core.Pod, 0, len(in.Items)) - ListSimple() []*core.PersistentVolume - GetSimple(name string) (*core.PersistentVolume, bool) - Iterate(action Action, filters ...Filter) error - Read() ReadInterface -} + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } + + ret = append(ret, z) + } -type Filter func(pv *core.PersistentVolume) bool -type Action func(pv *core.PersistentVolume) error + return ret + } +} diff --git a/pkg/util/k8sutil/inspector/pod/v1/loader.go b/pkg/util/k8sutil/inspector/pod/v1/loader.go deleted file mode 100644 index a7b94bc1d..000000000 --- a/pkg/util/k8sutil/inspector/pod/v1/loader.go +++ /dev/null @@ -1,39 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - core "k8s.io/api/core/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" -) - -type Inspector interface { - gvk.GVK - - ListSimple() []*core.Pod - GetSimple(name string) (*core.Pod, bool) - Iterate(action Action, filters ...Filter) error - Read() ReadInterface -} - -type Filter func(pod *core.Pod) bool -type Action func(pod *core.Pod) error diff --git a/pkg/util/k8sutil/inspector/pod/v1/reader.go b/pkg/util/k8sutil/inspector/pod/v1/reader.go deleted file mode 100644 index a344515e7..000000000 --- a/pkg/util/k8sutil/inspector/pod/v1/reader.go +++ /dev/null @@ -1,47 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - "context" - - core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" -) - -// ModInterface has methods to work with Pod resources only for creation -type ModInterface interface { - Create(ctx context.Context, pod *core.Pod, opts meta.CreateOptions) (*core.Pod, error) - Update(ctx context.Context, pod *core.Pod, opts meta.UpdateOptions) (*core.Pod, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *core.Pod, err error) - Delete(ctx context.Context, name string, opts meta.DeleteOptions) error -} - -// Interface has methods to work with Pod resources. -type Interface interface { - ModInterface -} - -// ReadInterface has methods to work with Pod resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*core.Pod, error) -} diff --git a/pkg/util/k8sutil/inspector/poddisruptionbudget/definition.go b/pkg/util/k8sutil/inspector/poddisruptionbudget/definition.go index bd5fcdab4..ec6175e10 100644 --- a/pkg/util/k8sutil/inspector/poddisruptionbudget/definition.go +++ b/pkg/util/k8sutil/inspector/poddisruptionbudget/definition.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,11 +21,10 @@ package poddisruptionbudget import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/poddisruptionbudget/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + policy "k8s.io/api/policy/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +32,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector - - gvk.GK - anonymous.Impl - - Version() version.Version + base.Inspector - V1() (v1.Inspector, error) + V1() (generic.Inspector[*policy.PodDisruptionBudget], error) } diff --git a/pkg/util/k8sutil/inspector/poddisruptionbudget/v1/loader.go b/pkg/util/k8sutil/inspector/poddisruptionbudget/generic.go similarity index 58% rename from pkg/util/k8sutil/inspector/poddisruptionbudget/v1/loader.go rename to pkg/util/k8sutil/inspector/poddisruptionbudget/generic.go index c7ac6e105..fc7ec15c3 100644 --- a/pkg/util/k8sutil/inspector/poddisruptionbudget/v1/loader.go +++ b/pkg/util/k8sutil/inspector/poddisruptionbudget/generic.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,21 +18,27 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package poddisruptionbudget import ( policy "k8s.io/api/policy/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) -type Inspector interface { - gvk.GVK +func List(filter ...generic.Filter[*policy.PodDisruptionBudget]) generic.ExtractorList[*policy.PodDisruptionBudgetList, *policy.PodDisruptionBudget] { + return func(in *policy.PodDisruptionBudgetList) []*policy.PodDisruptionBudget { + ret := make([]*policy.PodDisruptionBudget, 0, len(in.Items)) - GetSimple(name string) (*policy.PodDisruptionBudget, bool) - Iterate(action Action, filters ...Filter) error - Read() ReadInterface -} + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } + + ret = append(ret, z) + } -type Filter func(podDisruptionBudget *policy.PodDisruptionBudget) bool -type Action func(podDisruptionBudget *policy.PodDisruptionBudget) error + return ret + } +} diff --git a/pkg/util/k8sutil/inspector/poddisruptionbudget/v1/reader.go b/pkg/util/k8sutil/inspector/poddisruptionbudget/v1/reader.go deleted file mode 100644 index 49575866e..000000000 --- a/pkg/util/k8sutil/inspector/poddisruptionbudget/v1/reader.go +++ /dev/null @@ -1,48 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - "context" - - policy "k8s.io/api/policy/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" -) - -// ModInterface has methods to work with PodDisruptionBudget resources only for creation -type ModInterface interface { - Create(ctx context.Context, poddisruptionbudget *policy.PodDisruptionBudget, opts meta.CreateOptions) (*policy.PodDisruptionBudget, error) - Update(ctx context.Context, poddisruptionbudget *policy.PodDisruptionBudget, opts meta.UpdateOptions) (*policy.PodDisruptionBudget, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *policy.PodDisruptionBudget, err error) - Delete(ctx context.Context, name string, opts meta.DeleteOptions) error -} - -// Interface has methods to work with PodDisruptionBudget resources. -type Interface interface { - ModInterface - ReadInterface -} - -// ReadInterface has methods to work with PodDisruptionBudget resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*policy.PodDisruptionBudget, error) -} diff --git a/pkg/util/k8sutil/inspector/secret/definition.go b/pkg/util/k8sutil/inspector/secret/definition.go index 577c747c9..8b54de399 100644 --- a/pkg/util/k8sutil/inspector/secret/definition.go +++ b/pkg/util/k8sutil/inspector/secret/definition.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,11 +21,10 @@ package secret import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +32,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector - - gvk.GK - anonymous.Impl - - Version() version.Version + base.Inspector - V1() v1.Inspector + V1() generic.Inspector[*core.Secret] } diff --git a/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1/loader.go b/pkg/util/k8sutil/inspector/secret/generic.go similarity index 62% rename from pkg/util/k8sutil/inspector/persistentvolumeclaim/v1/loader.go rename to pkg/util/k8sutil/inspector/secret/generic.go index 12fe2b124..70538c909 100644 --- a/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1/loader.go +++ b/pkg/util/k8sutil/inspector/secret/generic.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,22 +18,27 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package secret import ( core "k8s.io/api/core/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) -type Inspector interface { - gvk.GVK +func List(filter ...generic.Filter[*core.Secret]) generic.ExtractorList[*core.SecretList, *core.Secret] { + return func(in *core.SecretList) []*core.Secret { + ret := make([]*core.Secret, 0, len(in.Items)) - ListSimple() []*core.PersistentVolumeClaim - GetSimple(name string) (*core.PersistentVolumeClaim, bool) - Iterate(action Action, filters ...Filter) error - Read() ReadInterface -} + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } + + ret = append(ret, z) + } -type Filter func(pvc *core.PersistentVolumeClaim) bool -type Action func(pvc *core.PersistentVolumeClaim) error + return ret + } +} diff --git a/pkg/util/k8sutil/inspector/secret/v1/loader.go b/pkg/util/k8sutil/inspector/secret/v1/loader.go deleted file mode 100644 index 3bdf6d689..000000000 --- a/pkg/util/k8sutil/inspector/secret/v1/loader.go +++ /dev/null @@ -1,40 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - core "k8s.io/api/core/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" -) - -// Inspector for secrets -type Inspector interface { - gvk.GVK - - ListSimple() []*core.Secret - GetSimple(name string) (*core.Secret, bool) - Iterate(action Action, filters ...Filter) error - Read() ReadInterface -} - -type Filter func(pod *core.Secret) bool -type Action func(pod *core.Secret) error diff --git a/pkg/util/k8sutil/inspector/secret/v1/reader.go b/pkg/util/k8sutil/inspector/secret/v1/reader.go deleted file mode 100644 index dcbcff5a1..000000000 --- a/pkg/util/k8sutil/inspector/secret/v1/reader.go +++ /dev/null @@ -1,48 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - "context" - - core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" -) - -// ModInterface has methods to work with Secret resources only for creation -type ModInterface interface { - Create(ctx context.Context, secret *core.Secret, opts meta.CreateOptions) (*core.Secret, error) - Update(ctx context.Context, secret *core.Secret, opts meta.UpdateOptions) (*core.Secret, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *core.Secret, err error) - Delete(ctx context.Context, name string, opts meta.DeleteOptions) error -} - -// Interface has methods to work with Secret resources. -type Interface interface { - ModInterface - ReadInterface -} - -// ReadInterface has methods to work with Secret resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*core.Secret, error) -} diff --git a/pkg/util/k8sutil/inspector/service/definition.go b/pkg/util/k8sutil/inspector/service/definition.go index 5ffbf8a26..bba5fcc7e 100644 --- a/pkg/util/k8sutil/inspector/service/definition.go +++ b/pkg/util/k8sutil/inspector/service/definition.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,11 +21,10 @@ package service import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/service/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +32,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector - - gvk.GK - anonymous.Impl - - Version() version.Version + base.Inspector - V1() v1.Inspector + V1() generic.Inspector[*core.Service] } diff --git a/pkg/util/k8sutil/inspector/service/generic.go b/pkg/util/k8sutil/inspector/service/generic.go new file mode 100644 index 000000000..a28991f8e --- /dev/null +++ b/pkg/util/k8sutil/inspector/service/generic.go @@ -0,0 +1,44 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package service + +import ( + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" +) + +func List(filter ...generic.Filter[*core.Service]) generic.ExtractorList[*core.ServiceList, *core.Service] { + return func(in *core.ServiceList) []*core.Service { + ret := make([]*core.Service, 0, len(in.Items)) + + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } + + ret = append(ret, z) + } + + return ret + } +} diff --git a/pkg/util/k8sutil/inspector/service/v1/loader.go b/pkg/util/k8sutil/inspector/service/v1/loader.go deleted file mode 100644 index e116f2a24..000000000 --- a/pkg/util/k8sutil/inspector/service/v1/loader.go +++ /dev/null @@ -1,38 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - core "k8s.io/api/core/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" -) - -type Inspector interface { - gvk.GVK - - GetSimple(name string) (*core.Service, bool) - Iterate(action Action, filters ...Filter) error - Read() ReadInterface -} - -type Filter func(pod *core.Service) bool -type Action func(pod *core.Service) error diff --git a/pkg/util/k8sutil/inspector/service/v1/reader.go b/pkg/util/k8sutil/inspector/service/v1/reader.go deleted file mode 100644 index aeb2fc0b0..000000000 --- a/pkg/util/k8sutil/inspector/service/v1/reader.go +++ /dev/null @@ -1,48 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - "context" - - core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" -) - -// ModInterface has methods to work with Service resources only for creation -type ModInterface interface { - Create(ctx context.Context, service *core.Service, opts meta.CreateOptions) (*core.Service, error) - Update(ctx context.Context, service *core.Service, opts meta.UpdateOptions) (*core.Service, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *core.Service, err error) - Delete(ctx context.Context, name string, opts meta.DeleteOptions) error -} - -// ReadInterface has methods to work with Secret resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*core.Service, error) -} - -// Interface has methods to work with Service resources. -type Interface interface { - ModInterface - ReadInterface -} diff --git a/pkg/util/k8sutil/inspector/serviceaccount/definition.go b/pkg/util/k8sutil/inspector/serviceaccount/definition.go index 3b2ae52dc..a6da69e32 100644 --- a/pkg/util/k8sutil/inspector/serviceaccount/definition.go +++ b/pkg/util/k8sutil/inspector/serviceaccount/definition.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,11 +21,10 @@ package serviceaccount import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/serviceaccount/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +32,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector - - gvk.GK - anonymous.Impl - - Version() version.Version + base.Inspector - V1() v1.Inspector + V1() generic.Inspector[*core.ServiceAccount] } diff --git a/pkg/util/k8sutil/inspector/serviceaccount/generic.go b/pkg/util/k8sutil/inspector/serviceaccount/generic.go new file mode 100644 index 000000000..39472872b --- /dev/null +++ b/pkg/util/k8sutil/inspector/serviceaccount/generic.go @@ -0,0 +1,44 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package serviceaccount + +import ( + core "k8s.io/api/core/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" +) + +func List(filter ...generic.Filter[*core.ServiceAccount]) generic.ExtractorList[*core.ServiceAccountList, *core.ServiceAccount] { + return func(in *core.ServiceAccountList) []*core.ServiceAccount { + ret := make([]*core.ServiceAccount, 0, len(in.Items)) + + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } + + ret = append(ret, z) + } + + return ret + } +} diff --git a/pkg/util/k8sutil/inspector/serviceaccount/v1/loader.go b/pkg/util/k8sutil/inspector/serviceaccount/v1/loader.go deleted file mode 100644 index 2300261b4..000000000 --- a/pkg/util/k8sutil/inspector/serviceaccount/v1/loader.go +++ /dev/null @@ -1,38 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - core "k8s.io/api/core/v1" - - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" -) - -type Inspector interface { - gvk.GVK - - GetSimple(name string) (*core.ServiceAccount, bool) - Iterate(action Action, filters ...Filter) error - Read() ReadInterface -} - -type Filter func(pod *core.ServiceAccount) bool -type Action func(pod *core.ServiceAccount) error diff --git a/pkg/util/k8sutil/inspector/serviceaccount/v1/reader.go b/pkg/util/k8sutil/inspector/serviceaccount/v1/reader.go deleted file mode 100644 index 2b9838374..000000000 --- a/pkg/util/k8sutil/inspector/serviceaccount/v1/reader.go +++ /dev/null @@ -1,52 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - "context" - - core "k8s.io/api/core/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" -) - -// ModInterface has methods to work with ServiceAccount resources only for creation -type ModInterface interface { - Create(ctx context.Context, serviceaccount *core.ServiceAccount, opts meta.CreateOptions) (*core.ServiceAccount, error) - Update(ctx context.Context, serviceaccount *core.ServiceAccount, opts meta.UpdateOptions) (*core.ServiceAccount, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *core.ServiceAccount, err error) - Delete(ctx context.Context, name string, opts meta.DeleteOptions) error -} - -// Interface has methods to work with ServiceAccount resources. -type Interface interface { - anonymous.Impl - - ModInterface - ReadInterface -} - -// ReadInterface has methods to work with ServiceAccount resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*core.ServiceAccount, error) -} diff --git a/pkg/util/k8sutil/inspector/servicemonitor/definition.go b/pkg/util/k8sutil/inspector/servicemonitor/definition.go index f5cb6e73d..3cb87cee7 100644 --- a/pkg/util/k8sutil/inspector/servicemonitor/definition.go +++ b/pkg/util/k8sutil/inspector/servicemonitor/definition.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,11 +21,10 @@ package servicemonitor import ( - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/refresh" - v1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/servicemonitor/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version" + monitoring "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/base" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) type Inspector interface { @@ -33,12 +32,7 @@ type Inspector interface { } type Definition interface { - refresh.Inspector - - gvk.GK - anonymous.Impl - - Version() version.Version + base.Inspector - V1() (v1.Inspector, error) + V1() (generic.Inspector[*monitoring.ServiceMonitor], error) } diff --git a/pkg/util/k8sutil/inspector/servicemonitor/v1/loader.go b/pkg/util/k8sutil/inspector/servicemonitor/generic.go similarity index 60% rename from pkg/util/k8sutil/inspector/servicemonitor/v1/loader.go rename to pkg/util/k8sutil/inspector/servicemonitor/generic.go index 9b559ecd4..711c31572 100644 --- a/pkg/util/k8sutil/inspector/servicemonitor/v1/loader.go +++ b/pkg/util/k8sutil/inspector/servicemonitor/generic.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,21 +18,27 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package servicemonitor import ( monitoring "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) -type Inspector interface { - gvk.GVK +func List(filter ...generic.Filter[*monitoring.ServiceMonitor]) generic.ExtractorList[*monitoring.ServiceMonitorList, *monitoring.ServiceMonitor] { + return func(in *monitoring.ServiceMonitorList) []*monitoring.ServiceMonitor { + ret := make([]*monitoring.ServiceMonitor, 0, len(in.Items)) - GetSimple(name string) (*monitoring.ServiceMonitor, bool) - Iterate(action Action, filters ...Filter) error - Read() ReadInterface -} + for _, el := range in.Items { + z := el.DeepCopy() + if !generic.FilterObject(z, filter...) { + continue + } + + ret = append(ret, z) + } -type Filter func(serviceMonitor *monitoring.ServiceMonitor) bool -type Action func(serviceMonitor *monitoring.ServiceMonitor) error + return ret + } +} diff --git a/pkg/util/k8sutil/inspector/servicemonitor/v1/reader.go b/pkg/util/k8sutil/inspector/servicemonitor/v1/reader.go deleted file mode 100644 index f7e607149..000000000 --- a/pkg/util/k8sutil/inspector/servicemonitor/v1/reader.go +++ /dev/null @@ -1,52 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany -// -// 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 holder is ArangoDB GmbH, Cologne, Germany -// - -package v1 - -import ( - "context" - - monitoring "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" -) - -// ModInterface has methods to work with ServiceMonitor resources only for creation -type ModInterface interface { - Create(ctx context.Context, servicemonitor *monitoring.ServiceMonitor, opts meta.CreateOptions) (*monitoring.ServiceMonitor, error) - Update(ctx context.Context, servicemonitor *monitoring.ServiceMonitor, opts meta.UpdateOptions) (*monitoring.ServiceMonitor, error) - Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts meta.PatchOptions, subresources ...string) (result *monitoring.ServiceMonitor, err error) - Delete(ctx context.Context, name string, opts meta.DeleteOptions) error -} - -// Interface has methods to work with ServiceMonitor resources. -type Interface interface { - anonymous.Impl - - ModInterface - ReadInterface -} - -// ReadInterface has methods to work with ServiceMonitor resources with ReadOnly mode. -type ReadInterface interface { - Get(ctx context.Context, name string, opts meta.GetOptions) (*monitoring.ServiceMonitor, error) -} diff --git a/pkg/util/k8sutil/inspector/throttle/throttle.go b/pkg/util/k8sutil/inspector/throttle/throttle.go index d1a178737..e21a38a54 100644 --- a/pkg/util/k8sutil/inspector/throttle/throttle.go +++ b/pkg/util/k8sutil/inspector/throttle/throttle.go @@ -32,16 +32,17 @@ type Inspector interface { } func NewAlwaysThrottleComponents() Components { - return NewThrottleComponents(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + return NewThrottleComponents(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) } -func NewThrottleComponents(acs, am, at, ar, ap, node, pvc, pod, pv, pdb, secret, cm, service, serviceAccount, sm, endpoints time.Duration) Components { +func NewThrottleComponents(acs, am, at, ar, ap, aps, node, pvc, pod, pv, pdb, secret, cm, service, serviceAccount, sm, endpoints time.Duration) Components { return &throttleComponents{ arangoClusterSynchronization: NewThrottle(acs), arangoMember: NewThrottle(am), arangoTask: NewThrottle(at), arangoRoute: NewThrottle(ar), arangoProfile: NewThrottle(ap), + arangopPlatformStorage: NewThrottle(aps), node: NewThrottle(node), persistentVolume: NewThrottle(pv), persistentVolumeClaim: NewThrottle(pvc), @@ -62,6 +63,7 @@ type Components interface { ArangoTask() Throttle ArangoRoute() Throttle ArangoProfile() Throttle + ArangoPlatformStorage() Throttle Node() Throttle PersistentVolume() Throttle PersistentVolumeClaim() Throttle @@ -87,6 +89,7 @@ type throttleComponents struct { arangoTask Throttle arangoRoute Throttle arangoProfile Throttle + arangopPlatformStorage Throttle node Throttle persistentVolume Throttle persistentVolumeClaim Throttle @@ -143,6 +146,8 @@ func (t *throttleComponents) Get(c definitions.Component) Throttle { return t.arangoRoute case definitions.ArangoProfile: return t.arangoProfile + case definitions.ArangoPlatformStorage: + return t.arangopPlatformStorage case definitions.Node: return t.node case definitions.PersistentVolume: @@ -177,6 +182,7 @@ func (t *throttleComponents) Copy() Components { arangoTask: t.arangoTask.Copy(), arangoRoute: t.arangoRoute.Copy(), arangoProfile: t.arangoProfile.Copy(), + arangopPlatformStorage: t.arangopPlatformStorage.Copy(), node: t.node.Copy(), persistentVolume: t.persistentVolume.Copy(), persistentVolumeClaim: t.persistentVolumeClaim.Copy(), @@ -211,6 +217,10 @@ func (t *throttleComponents) ArangoProfile() Throttle { return t.arangoProfile } +func (t *throttleComponents) ArangoPlatformStorage() Throttle { + return t.arangopPlatformStorage +} + func (t *throttleComponents) Node() Throttle { return t.node } diff --git a/pkg/util/k8sutil/list/list.go b/pkg/util/k8sutil/list/list.go new file mode 100644 index 000000000..d51f77f62 --- /dev/null +++ b/pkg/util/k8sutil/list/list.go @@ -0,0 +1,79 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package list + +import ( + "context" + + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" +) + +func APIMap[L generic.ListContinue, S meta.Object](ctx context.Context, i generic.ListInterface[L], opts meta.ListOptions, call generic.ExtractorList[L, S]) (map[string]S, error) { + res, err := APIList(ctx, i, opts, call) + if err != nil { + return nil, err + } + + result := make(map[string]S, len(res)) + + for _, el := range res { + if _, ok := result[el.GetName()]; ok { + return nil, errors.Errorf("Key %s already exists", el.GetName()) + } + + result[el.GetName()] = el + } + + return result, nil +} + +func APIList[L generic.ListContinue, S meta.Object](ctx context.Context, i generic.ListInterface[L], opts meta.ListOptions, call generic.ExtractorList[L, S]) ([]S, error) { + var results []S + + var cont string + + for { + opts.Continue = cont + if v := globals.GetGlobals().Kubernetes().RequestBatchSize().Get(); opts.Limit <= 0 || opts.Limit > v { + opts.Limit = v + } + res, err := i.List(ctx, opts) + if err != nil { + return nil, err + } + + objs := call(res) + + results = append(results, objs...) + + if res.GetContinue() == "" { + break + } + + cont = res.GetContinue() + } + + return results, nil +} diff --git a/pkg/util/k8sutil/pods.go b/pkg/util/k8sutil/pods.go index 5d27339e4..95751059c 100644 --- a/pkg/util/k8sutil/pods.go +++ b/pkg/util/k8sutil/pods.go @@ -45,7 +45,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/constants" "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/globals" - podv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/pod/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/interfaces" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" ) @@ -607,7 +607,7 @@ func GetPodSpecChecksum(podSpec core.PodSpec) (string, error) { // CreatePod adds an owner to the given pod and calls the k8s api-server to created it. // If the pod already exists, nil is returned. // If another error occurs, that error is returned. -func CreatePod(ctx context.Context, c podv1.ModInterface, pod *core.Pod, ns string, +func CreatePod(ctx context.Context, c generic.ModClient[*core.Pod], pod *core.Pod, ns string, owner meta.OwnerReference) (string, types.UID, error) { AddOwnerRefToObject(pod.GetObjectMeta(), &owner) @@ -691,7 +691,7 @@ func CreateEnvSecretKeySelector(name, SecretKeyName, secretKey string) core.EnvV } } -func EnsureFinalizerAbsent(ctx context.Context, pods podv1.Interface, pod *core.Pod, finalizers ...string) error { +func EnsureFinalizerAbsent(ctx context.Context, pods generic.ModClient[*core.Pod], pod *core.Pod, finalizers ...string) error { var newFinalizers []string c := utils.StringList(finalizers) @@ -709,7 +709,7 @@ func EnsureFinalizerAbsent(ctx context.Context, pods podv1.Interface, pod *core. return SetFinalizers(ctx, pods, pod, newFinalizers...) } -func EnsureFinalizerPresent(ctx context.Context, pods podv1.Interface, pod *core.Pod, finalizers ...string) error { +func EnsureFinalizerPresent(ctx context.Context, pods generic.ModClient[*core.Pod], pod *core.Pod, finalizers ...string) error { var newFinalizers []string newFinalizers = append(newFinalizers, pod.Finalizers...) @@ -729,7 +729,7 @@ func EnsureFinalizerPresent(ctx context.Context, pods podv1.Interface, pod *core return SetFinalizers(ctx, pods, pod, newFinalizers...) } -func SetFinalizers(ctx context.Context, pods podv1.Interface, pod *core.Pod, finalizers ...string) error { +func SetFinalizers(ctx context.Context, pods generic.ModClient[*core.Pod], pod *core.Pod, finalizers ...string) error { d, err := patch.NewPatch(patch.ItemReplace(patch.NewPath("metadata", "finalizers"), finalizers)).Marshal() if err != nil { return err diff --git a/pkg/util/k8sutil/pvc.go b/pkg/util/k8sutil/pvc.go index e0babd031..621227b13 100644 --- a/pkg/util/k8sutil/pvc.go +++ b/pkg/util/k8sutil/pvc.go @@ -29,7 +29,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/constants" "github.com/arangodb/kube-arangodb/pkg/util/errors" - persistentvolumeclaimv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" kresources "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/resources" ) @@ -66,7 +66,7 @@ func IsPersistentVolumeClaimResizing(pvc *core.PersistentVolumeClaim) bool { // CreatePersistentVolumeClaim creates a persistent volume claim with given name and configuration. // If the pvc already exists, nil is returned. // If another error occurs, that error is returned. -func CreatePersistentVolumeClaim(ctx context.Context, pvcs persistentvolumeclaimv1.ModInterface, pvcName, deploymentName, +func CreatePersistentVolumeClaim(ctx context.Context, pvcs generic.ModClient[*core.PersistentVolumeClaim], pvcName, deploymentName, storageClassName, role string, enforceAntiAffinity bool, resources core.ResourceRequirements, vct *core.PersistentVolumeClaim, finalizers []string, owner meta.OwnerReference) error { labels := LabelsForDeployment(deploymentName, role) diff --git a/pkg/util/k8sutil/secrets.go b/pkg/util/k8sutil/secrets.go index 4ae62fa73..84302b938 100644 --- a/pkg/util/k8sutil/secrets.go +++ b/pkg/util/k8sutil/secrets.go @@ -32,14 +32,14 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/crypto" "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/globals" - secretv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" "github.com/arangodb/kube-arangodb/pkg/util/token" ) // ValidateEncryptionKeySecret checks that a secret with given name in given namespace // exists and it contains a 'key' data field of exactly 32 bytes. -func ValidateEncryptionKeySecret(secrets secretv1.Interface, secretName string) error { +func ValidateEncryptionKeySecret(secrets generic.InspectorInterface[*core.Secret], secretName string) error { s, err := secrets.Get(context.Background(), secretName, meta.GetOptions{}) if err != nil { return errors.WithStack(err) @@ -60,7 +60,7 @@ func ValidateEncryptionKeyFromSecret(s *core.Secret) error { } // CreateEncryptionKeySecret creates a secret used to store a RocksDB encryption key. -func CreateEncryptionKeySecret(secrets secretv1.ModInterface, secretName string, key []byte) error { +func CreateEncryptionKeySecret(secrets generic.ModClient[*core.Secret], secretName string, key []byte) error { if len(key) != 32 { return errors.WithStack(errors.Errorf("Key in secret '%s' is expected to be 32 bytes long, got %d", secretName, len(key))) } @@ -82,7 +82,7 @@ func CreateEncryptionKeySecret(secrets secretv1.ModInterface, secretName string, // ValidateCACertificateSecret checks that a secret with given name in given namespace // exists and it contains a 'ca.crt' data field. -func ValidateCACertificateSecret(ctx context.Context, secrets secretv1.ReadInterface, secretName string) error { +func ValidateCACertificateSecret(ctx context.Context, secrets generic.ReadClient[*core.Secret], secretName string) error { s, err := secrets.Get(ctx, secretName, meta.GetOptions{}) if err != nil { return errors.WithStack(err) @@ -100,7 +100,7 @@ func ValidateCACertificateSecret(ctx context.Context, secrets secretv1.ReadInter // If the secret does not exists the field is missing, // an error is returned. // Returns: certificate, error -func GetCACertficateSecret(ctx context.Context, secrets secretv1.ReadInterface, secretName string) (string, error) { +func GetCACertficateSecret(ctx context.Context, secrets generic.ReadClient[*core.Secret], secretName string) (string, error) { ctxChild, cancel := globals.GetGlobalTimeouts().Kubernetes().WithTimeout(ctx) defer cancel() @@ -121,7 +121,7 @@ func GetCACertficateSecret(ctx context.Context, secrets secretv1.ReadInterface, // If the secret does not exists or one of the fields is missing, // an error is returned. // Returns: certificate, private-key, isOwnedByDeployment, error -func GetCASecret(ctx context.Context, secrets secretv1.ReadInterface, secretName string, +func GetCASecret(ctx context.Context, secrets generic.ReadClient[*core.Secret], secretName string, ownerRef *meta.OwnerReference) (string, string, bool, error) { s, err := secrets.Get(ctx, secretName, meta.GetOptions{}) if err != nil { @@ -172,7 +172,7 @@ func GetKeyCertFromSecret(secret *core.Secret, certName, keyName string) (crypto } // CreateCASecret creates a secret used to store a PEM encoded CA certificate & private key. -func CreateCASecret(ctx context.Context, secrets secretv1.ModInterface, secretName string, certificate, key string, +func CreateCASecret(ctx context.Context, secrets generic.ModClient[*core.Secret], secretName string, certificate, key string, ownerRef *meta.OwnerReference) error { // Create secret secret := &core.Secret{ @@ -196,7 +196,7 @@ func CreateCASecret(ctx context.Context, secrets secretv1.ModInterface, secretNa // GetTLSKeyfileSecret loads a secret used to store a PEM encoded keyfile // in the format ArangoDB accepts it for its `--ssl.keyfile` option. // Returns: keyfile (pem encoded), error -func GetTLSKeyfileSecret(secrets secretv1.ReadInterface, secretName string) (string, error) { +func GetTLSKeyfileSecret(secrets generic.ReadClient[*core.Secret], secretName string) (string, error) { s, err := secrets.Get(context.Background(), secretName, meta.GetOptions{}) if err != nil { return "", errors.WithStack(err) @@ -232,7 +232,7 @@ func RenderTLSKeyfileSecret(secretName string, keyfile string, ownerRef *meta.Ow // CreateTLSKeyfileSecret creates a secret used to store a PEM encoded keyfile // in the format ArangoDB accepts it for its `--ssl.keyfile` option. -func CreateTLSKeyfileSecret(ctx context.Context, secrets secretv1.ModInterface, secretName string, keyfile string, +func CreateTLSKeyfileSecret(ctx context.Context, secrets generic.ModClient[*core.Secret], secretName string, keyfile string, ownerRef *meta.OwnerReference) (*core.Secret, error) { secret := RenderTLSKeyfileSecret(secretName, keyfile, ownerRef) if s, err := secrets.Create(ctx, secret, meta.CreateOptions{}); err != nil { @@ -245,7 +245,7 @@ func CreateTLSKeyfileSecret(ctx context.Context, secrets secretv1.ModInterface, // ValidateTokenSecret checks that a secret with given name in given namespace // exists and it contains a 'token' data field. -func ValidateTokenSecret(ctx context.Context, secrets secretv1.ReadInterface, secretName string) error { +func ValidateTokenSecret(ctx context.Context, secrets generic.ReadClient[*core.Secret], secretName string) error { s, err := secrets.Get(ctx, secretName, meta.GetOptions{}) if err != nil { return errors.WithStack(err) @@ -263,7 +263,7 @@ func ValidateTokenFromSecret(s *core.Secret) error { } // GetTokenSecret loads the token secret from a Secret with given name. -func GetTokenSecret(ctx context.Context, secrets secretv1.ReadInterface, secretName string) (string, error) { +func GetTokenSecret(ctx context.Context, secrets generic.ReadClient[*core.Secret], secretName string) (string, error) { s, err := secrets.Get(ctx, secretName, meta.GetOptions{}) if err != nil { return "", errors.WithStack(err) @@ -283,7 +283,7 @@ func GetTokenFromSecret(s *core.Secret) (string, error) { // CreateTokenSecret creates a secret with given name in given namespace // with a given token as value. -func CreateTokenSecret(ctx context.Context, secrets secretv1.ModInterface, secretName, token string, +func CreateTokenSecret(ctx context.Context, secrets generic.ModClient[*core.Secret], secretName, token string, ownerRef *meta.OwnerReference) error { // Create secret secret := &core.Secret{ @@ -305,7 +305,7 @@ func CreateTokenSecret(ctx context.Context, secrets secretv1.ModInterface, secre // UpdateTokenSecret updates a secret with given name in given namespace // with a given token as value. -func UpdateTokenSecret(ctx context.Context, secrets secretv1.ModInterface, secret *core.Secret, token string) error { +func UpdateTokenSecret(ctx context.Context, secrets generic.ModClient[*core.Secret], secret *core.Secret, token string) error { secret.Data = map[string][]byte{ constants.SecretKeyToken: []byte(token), } @@ -318,7 +318,7 @@ func UpdateTokenSecret(ctx context.Context, secrets secretv1.ModInterface, secre // CreateJWTFromSecret creates a JWT using the secret stored in secretSecretName and stores the // result in a new secret called tokenSecretName -func CreateJWTFromSecret(ctx context.Context, cachedSecrets secretv1.ReadInterface, secrets secretv1.ModInterface, tokenSecretName, secretSecretName string, claims map[string]interface{}, ownerRef *meta.OwnerReference) error { +func CreateJWTFromSecret(ctx context.Context, cachedSecrets generic.ReadClient[*core.Secret], secrets generic.ModClient[*core.Secret], tokenSecretName, secretSecretName string, claims map[string]interface{}, ownerRef *meta.OwnerReference) error { secret, err := GetTokenSecret(ctx, cachedSecrets, secretSecretName) if err != nil { return errors.WithStack(err) @@ -336,7 +336,7 @@ func CreateJWTFromSecret(ctx context.Context, cachedSecrets secretv1.ReadInterfa // UpdateJWTFromSecret updates a JWT using the secret stored in secretSecretName and stores the // result in a new secret called tokenSecretName -func UpdateJWTFromSecret(ctx context.Context, cachedSecrets secretv1.ReadInterface, secrets secretv1.ModInterface, tokenSecretName, secretSecretName string, claims map[string]interface{}) error { +func UpdateJWTFromSecret(ctx context.Context, cachedSecrets generic.ReadClient[*core.Secret], secrets generic.ModClient[*core.Secret], tokenSecretName, secretSecretName string, claims map[string]interface{}) error { current, err := cachedSecrets.Get(ctx, tokenSecretName, meta.GetOptions{}) if err != nil { return errors.WithStack(err) @@ -359,7 +359,7 @@ func UpdateJWTFromSecret(ctx context.Context, cachedSecrets secretv1.ReadInterfa // CreateBasicAuthSecret creates a secret with given name in given namespace // with a given username and password as value. -func CreateBasicAuthSecret(ctx context.Context, secrets secretv1.ModInterface, secretName, username, password string, +func CreateBasicAuthSecret(ctx context.Context, secrets generic.ModClient[*core.Secret], secretName, username, password string, ownerRef *meta.OwnerReference) error { // Create secret secret := &core.Secret{ @@ -389,7 +389,7 @@ func CreateBasicAuthSecret(ctx context.Context, secrets secretv1.ModInterface, s // If the secret does not exists or one of the fields is missing, // an error is returned. // Returns: username, password, error -func GetBasicAuthSecret(secrets secretv1.Interface, secretName string) (string, string, error) { +func GetBasicAuthSecret(secrets generic.ReadClient[*core.Secret], secretName string) (string, string, error) { s, err := secrets.Get(context.Background(), secretName, meta.GetOptions{}) if err != nil { return "", "", errors.WithStack(err) diff --git a/pkg/util/k8sutil/services.go b/pkg/util/k8sutil/services.go index f4cbc065b..47a63f7a9 100644 --- a/pkg/util/k8sutil/services.go +++ b/pkg/util/k8sutil/services.go @@ -35,7 +35,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector" - servicev1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/service/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/patcher" ) @@ -126,7 +126,7 @@ func ExporterServiceDetails(deploymentName string) ([]core.ServicePort, map[stri // If the service already exists, nil is returned. // If another error occurs, that error is returned. // The returned bool is true if the service is created, or false when the service already existed. -func CreateHeadlessService(ctx context.Context, svcs servicev1.ModInterface, deployment meta.Object, +func CreateHeadlessService(ctx context.Context, svcs generic.ModClient[*core.Service], deployment meta.Object, ports []core.ServicePort, selectors map[string]string, owner meta.OwnerReference) (string, bool, error) { deploymentName := deployment.GetName() @@ -158,7 +158,7 @@ func HeadlessServiceDetails(deploymentName string) ([]core.ServicePort, map[stri // If the service already exists, nil is returned. // If another error occurs, that error is returned. // The returned bool is true if the service is created, or false when the service already existed. -func CreateDatabaseClientService(ctx context.Context, svcs servicev1.ModInterface, deployment meta.Object, +func CreateDatabaseClientService(ctx context.Context, svcs generic.ModClient[*core.Service], deployment meta.Object, ports []core.ServicePort, selectors map[string]string, owner meta.OwnerReference) (string, bool, error) { deploymentName := deployment.GetName() svcName := CreateDatabaseClientServiceName(deploymentName) @@ -193,7 +193,7 @@ func DatabaseClientDetails(deploymentName string, role string, withLeader bool) // If the service already exists, nil is returned. // If another error occurs, that error is returned. // The returned bool is true if the service is created, or false when the service already existed. -func CreateExternalAccessService(ctx context.Context, svcs servicev1.ModInterface, svcName string, serviceType core.ServiceType, +func CreateExternalAccessService(ctx context.Context, svcs generic.ModClient[*core.Service], svcName string, serviceType core.ServiceType, ports []core.ServicePort, selectors map[string]string, loadBalancerIP string, loadBalancerSourceRanges []string, owner meta.OwnerReference) (string, bool, error) { @@ -228,7 +228,7 @@ func ExternalAccessDetails(port, nodePort int, deploymentName, role string, with // If the service already exists, nil is returned. // If another error occurs, that error is returned. // The returned bool is true if the service is created, or false when the service already existed. -func createService(ctx context.Context, svcs servicev1.ModInterface, svcName, clusterIP string, +func createService(ctx context.Context, svcs generic.ModClient[*core.Service], svcName, clusterIP string, serviceType core.ServiceType, ports []core.ServicePort, selectors map[string]string, loadBalancerIP string, loadBalancerSourceRanges []string, publishNotReadyAddresses bool, owner meta.OwnerReference) (bool, error) { svc := &core.Service{ diff --git a/pkg/util/kclient/client_factory.go b/pkg/util/kclient/client_factory.go index 68b44ca45..ce42b73b1 100644 --- a/pkg/util/kclient/client_factory.go +++ b/pkg/util/kclient/client_factory.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -31,6 +31,7 @@ import ( "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned" "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/kconfig" ) const ( @@ -45,7 +46,7 @@ var ( func init() { f := GetDefaultFactory() - f.SetKubeConfigGetter(NewStaticConfigGetter(newKubeConfig)) + f.SetKubeConfigGetter(NewStaticConfigGetter(kconfig.NewConfig)) if err := f.Refresh(); err != nil { println("Error while getting client: ", err.Error()) @@ -191,16 +192,21 @@ type Client interface { Config() *rest.Config } -func NewStaticClient(kubernetes kubernetes.Interface, kubernetesExtensions apiextensionsclient.Interface, arango versioned.Interface, monitoring monitoring.Interface) Client { +func NewStaticClient(config *rest.Config, kubernetes kubernetes.Interface, kubernetesExtensions apiextensionsclient.Interface, arango versioned.Interface, monitoring monitoring.Interface) Client { return &client{ name: "static", kubernetes: kubernetes, kubernetesExtensions: kubernetesExtensions, arango: arango, monitoring: monitoring, + config: config, } } +func NewClient(name string, cfg *rest.Config) (Client, error) { + return newClient(name, cfg) +} + func newClient(name string, cfg *rest.Config) (*client, error) { var c client diff --git a/pkg/util/kclient/fake.go b/pkg/util/kclient/fake.go index 82e89c39d..36d084ebc 100644 --- a/pkg/util/kclient/fake.go +++ b/pkg/util/kclient/fake.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -33,6 +33,7 @@ import ( "k8s.io/apimachinery/pkg/version" "k8s.io/client-go/discovery/fake" kubernetesFake "k8s.io/client-go/kubernetes/fake" + "k8s.io/client-go/rest" api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" versionedFake "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/fake" @@ -109,6 +110,9 @@ func (f *fakeClientBuilder) Client() Client { panic("Unable to get client") } return NewStaticClient( + &rest.Config{ + Host: "x.y.z.d:12345", + }, q, apiextensionsclientFake.NewSimpleClientset(f.filter(apiextensionsclientFake.AddToScheme)...), versionedFake.NewSimpleClientset(f.filter(versionedFake.AddToScheme)...), diff --git a/pkg/util/kclient/mod.go b/pkg/util/kclient/mod.go index 09f69e6b4..50ff401c1 100644 --- a/pkg/util/kclient/mod.go +++ b/pkg/util/kclient/mod.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,14 +21,12 @@ package kclient import ( - arangomemberv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangomember/v1" - persistentvolumeclaimv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1" - podv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/pod/v1" - poddisruptionbudgetv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/poddisruptionbudget/v1" - secretv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/secret/v1" - servicev1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/service/v1" - serviceaccountv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/serviceaccount/v1" - servicemonitorv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/servicemonitor/v1" + monitoring "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1" + core "k8s.io/api/core/v1" + policy "k8s.io/api/policy/v1" + + api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" ) func NewModInterface(client Client, namespace string) ModInterface { @@ -39,14 +37,14 @@ func NewModInterface(client Client, namespace string) ModInterface { } type ModInterface interface { - Secrets() secretv1.ModInterface - Pods() podv1.ModInterface - Services() servicev1.ModInterface - ServiceAccounts() serviceaccountv1.ModInterface - PersistentVolumeClaims() persistentvolumeclaimv1.ModInterface - PodDisruptionBudgets() poddisruptionbudgetv1.ModInterface - ServiceMonitors() servicemonitorv1.ModInterface - ArangoMembers() arangomemberv1.ModInterface + Secrets() generic.ModClient[*core.Secret] + Pods() generic.ModClient[*core.Pod] + Services() generic.ModClient[*core.Service] + ServiceAccounts() generic.ModClient[*core.ServiceAccount] + PersistentVolumeClaims() generic.ModClient[*core.PersistentVolumeClaim] + PodDisruptionBudgets() generic.ModClient[*policy.PodDisruptionBudget] + ServiceMonitors() generic.ModClient[*monitoring.ServiceMonitor] + ArangoMembers() generic.ModStatusClient[*api.ArangoMember] } type modInterface struct { @@ -54,34 +52,34 @@ type modInterface struct { namespace string } -func (m modInterface) PersistentVolumeClaims() persistentvolumeclaimv1.ModInterface { +func (m modInterface) PersistentVolumeClaims() generic.ModClient[*core.PersistentVolumeClaim] { return m.client.Kubernetes().CoreV1().PersistentVolumeClaims(m.namespace) } -func (m modInterface) PodDisruptionBudgets() poddisruptionbudgetv1.ModInterface { +func (m modInterface) PodDisruptionBudgets() generic.ModClient[*policy.PodDisruptionBudget] { return m.client.Kubernetes().PolicyV1().PodDisruptionBudgets(m.namespace) } -func (m modInterface) ServiceMonitors() servicemonitorv1.ModInterface { +func (m modInterface) ServiceMonitors() generic.ModClient[*monitoring.ServiceMonitor] { return m.client.Monitoring().MonitoringV1().ServiceMonitors(m.namespace) } -func (m modInterface) ArangoMembers() arangomemberv1.ModInterface { +func (m modInterface) ArangoMembers() generic.ModStatusClient[*api.ArangoMember] { return m.client.Arango().DatabaseV1().ArangoMembers(m.namespace) } -func (m modInterface) Services() servicev1.ModInterface { +func (m modInterface) Services() generic.ModClient[*core.Service] { return m.client.Kubernetes().CoreV1().Services(m.namespace) } -func (m modInterface) ServiceAccounts() serviceaccountv1.ModInterface { +func (m modInterface) ServiceAccounts() generic.ModClient[*core.ServiceAccount] { return m.client.Kubernetes().CoreV1().ServiceAccounts(m.namespace) } -func (m modInterface) Pods() podv1.ModInterface { +func (m modInterface) Pods() generic.ModClient[*core.Pod] { return m.client.Kubernetes().CoreV1().Pods(m.namespace) } -func (m modInterface) Secrets() secretv1.ModInterface { +func (m modInterface) Secrets() generic.ModClient[*core.Secret] { return m.client.Kubernetes().CoreV1().Secrets(m.namespace) } diff --git a/pkg/util/kclient/client.go b/pkg/util/kconfig/client.go similarity index 88% rename from pkg/util/kclient/client.go rename to pkg/util/kconfig/client.go index d96d33024..098427566 100644 --- a/pkg/util/kclient/client.go +++ b/pkg/util/kconfig/client.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2025 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package kclient +package kconfig import ( "fmt" @@ -32,8 +32,8 @@ import ( const Kubeconfig util.EnvironmentVariable = "KUBECONFIG" -// newKubeConfig loads config from KUBECONFIG or as incluster -func newKubeConfig() (*rest.Config, error) { +// NewConfig loads config from KUBECONFIG or as incluster +func NewConfig() (*rest.Config, error) { // If KUBECONFIG is defined use this variable if kubeconfig, ok := Kubeconfig.Lookup(); ok { return clientcmd.BuildConfigFromFlags("", kubeconfig) diff --git a/pkg/util/kconfig/rest.go b/pkg/util/kconfig/rest.go new file mode 100644 index 000000000..8baf97fc0 --- /dev/null +++ b/pkg/util/kconfig/rest.go @@ -0,0 +1,107 @@ +// +// DISCLAIMER +// +// Copyright 2024-2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package kconfig + +import ( + "k8s.io/apimachinery/pkg/api/meta" + "k8s.io/client-go/discovery" + "k8s.io/client-go/discovery/cached/memory" + "k8s.io/client-go/rest" + "k8s.io/client-go/restmapper" + "k8s.io/client-go/tools/clientcmd" +) + +// RESTClientOption is a function that can be used to set the RESTClientOptions of a HelmClient. +type RESTClientOption func(*rest.Config) + +// RESTClientGetter defines the values of a helm REST client. +type RESTClientGetter struct { + namespace string + kubeConfig []byte + restConfig *rest.Config + + opts []RESTClientOption +} + +// NewRESTClientGetter returns a RESTClientGetter using the provided 'namespace', 'kubeConfig' and 'restConfig'. +// +// source: https://github.com/helm/helm/issues/6910#issuecomment-601277026 +func NewRESTClientGetter(namespace string, kubeConfig []byte, restConfig *rest.Config, opts ...RESTClientOption) *RESTClientGetter { + return &RESTClientGetter{ + namespace: namespace, + kubeConfig: kubeConfig, + restConfig: restConfig, + opts: opts, + } +} + +// ToRESTConfig returns a REST config build from a given kubeconfig +func (c *RESTClientGetter) ToRESTConfig() (*rest.Config, error) { + if c.restConfig != nil { + return c.restConfig, nil + } + + return clientcmd.RESTConfigFromKubeConfig(c.kubeConfig) + +} + +// ToDiscoveryClient returns a CachedDiscoveryInterface that can be used as a discovery client. +func (c *RESTClientGetter) ToDiscoveryClient() (discovery.CachedDiscoveryInterface, error) { + config, err := c.ToRESTConfig() + if err != nil { + return nil, err + } + + // The more API groups exist, the more discovery requests need to be made. + // Given 25 API groups with about one version each, discovery needs to make 50 requests. + // This setting is only used for discovery. + config.Burst = 100 + + for _, fn := range c.opts { + fn(config) + } + + discoveryClient, _ := discovery.NewDiscoveryClientForConfig(config) + return memory.NewMemCacheClient(discoveryClient), nil +} + +func (c *RESTClientGetter) ToRESTMapper() (meta.RESTMapper, error) { + discoveryClient, err := c.ToDiscoveryClient() + if err != nil { + return nil, err + } + + mapper := restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient) + expander := restmapper.NewShortcutExpander(mapper, discoveryClient, nil) + return expander, nil +} + +func (c *RESTClientGetter) ToRawKubeConfigLoader() clientcmd.ClientConfig { + loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() + // use the standard defaults for this client command + // DEPRECATED: remove and replace with something more accurate + loadingRules.DefaultClientConfig = &clientcmd.DefaultClientConfig + + overrides := &clientcmd.ConfigOverrides{ClusterDefaults: clientcmd.ClusterDefaults} + overrides.Context.Namespace = c.namespace + + return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, overrides) +} diff --git a/pkg/util/list.go b/pkg/util/list.go index 1d1e76ce7..afb752899 100644 --- a/pkg/util/list.go +++ b/pkg/util/list.go @@ -81,6 +81,16 @@ func (l List[T]) Unique(f func(existing List[T], a T) bool) List[T] { return r } +func ListAsMap[K comparable, V any](in []V, extract func(in V) K) map[K]V { + ret := make(map[K]V, len(in)) + + for _, el := range in { + ret[extract(el)] = el + } + + return ret +} + func PickFromList[V any](in []V, q func(v V) bool) (V, bool) { for _, v := range in { if q(v) { @@ -112,6 +122,18 @@ func FormatList[A, B any](in []A, format func(A) B) []B { return r } +func FilterList[A any](in []A, filter func(A) bool) []A { + r := make([]A, 0, len(in)) + + for _, el := range in { + if filter(el) { + r = append(r, el) + } + } + + return r +} + func ContainsList[A comparable](in []A, item A) bool { for _, el := range in { if el == item { diff --git a/pkg/util/mod.go b/pkg/util/mod.go new file mode 100644 index 000000000..d2b2d3b38 --- /dev/null +++ b/pkg/util/mod.go @@ -0,0 +1,87 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package util + +func emptyMod[T any](_ *T) {} + +type Mod[T any] func(in *T) + +func (m Mod[T]) Optional() Mod[T] { + if m == nil { + return emptyMod[T] + } + + return m +} + +func ApplyMods[T any](in *T, mods ...Mod[T]) { + for _, mod := range mods { + mod(in) + } +} + +func emptyModE[T any](_ *T) error { + return nil +} + +type ModE[T any] func(in *T) error + +func (m ModE[T]) Optional() ModE[T] { + if m == nil { + return emptyModE[T] + } + + return m +} + +func ApplyModsE[T any](in *T, mods ...ModE[T]) error { + for _, mod := range mods { + if err := mod(in); err != nil { + return err + } + } + + return nil +} + +func emptyModEP1[T, P1 any](_ *T, _ P1) error { + return nil +} + +type ModEP1[T, P1 any] func(in *T, p1 P1) error + +func (m ModEP1[T, P1]) Optional() ModEP1[T, P1] { + if m == nil { + return emptyModEP1[T, P1] + } + + return m +} + +func ApplyModsEP1[T, P1 any](in *T, p1 P1, mods ...ModEP1[T, P1]) error { + for _, mod := range mods { + if err := mod(in, p1); err != nil { + return err + } + } + + return nil +} diff --git a/pkg/util/next.go b/pkg/util/next.go new file mode 100644 index 000000000..9e2130a08 --- /dev/null +++ b/pkg/util/next.go @@ -0,0 +1,27 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package util + +import "context" + +type NextIterator[T any] interface { + Next(ctx context.Context) (T, error) +} diff --git a/pkg/util/parallel.go b/pkg/util/parallel.go index 01048c7be..03fd0f77d 100644 --- a/pkg/util/parallel.go +++ b/pkg/util/parallel.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany +// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -22,6 +22,40 @@ package util import "sync" +func ParallelProcess[T any](caller func(in T), threads int, in []T) { + r := ParallelInput(in) + + var wg sync.WaitGroup + + for id := 0; id < threads; id++ { + wg.Add(1) + + go func() { + defer wg.Done() + + for el := range r { + caller(el) + } + }() + } + + wg.Wait() +} + +func ParallelInput[T any](in []T) <-chan T { + r := make(chan T) + + go func() { + defer close(r) + + for id := range in { + r <- in[id] + } + }() + + return r +} + // RunParallel runs actions parallelly throttling them to the given maximum number. func RunParallel(max int, actions ...func() error) error { c, close := ParallelThread(max) diff --git a/pkg/util/pretty/marsh_table.go b/pkg/util/pretty/marsh_table.go new file mode 100644 index 000000000..6f0b76a6a --- /dev/null +++ b/pkg/util/pretty/marsh_table.go @@ -0,0 +1,146 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package pretty + +import ( + "fmt" + "reflect" + "strings" + + "github.com/jedib0t/go-pretty/v6/table" + "github.com/jedib0t/go-pretty/v6/text" + "github.com/pkg/errors" + + "github.com/arangodb/kube-arangodb/pkg/util" +) + +type Table[T any] interface { + Add(in ...T) Table[T] + + RenderMarkdown() string +} + +type tableImpl[T any] struct { + wr table.Writer + + fields []int +} + +func (t tableImpl[T]) RenderMarkdown() string { + return fmt.Sprintf("%s\n", t.wr.RenderMarkdown()) +} + +func (t tableImpl[T]) Add(in ...T) Table[T] { + for _, el := range in { + v := reflect.ValueOf(el) + + rows := make(table.Row, len(t.fields)) + + for q, id := range t.fields { + rows[q] = v.Field(id).Interface() + } + + t.wr.AppendRow(rows) + } + + return t +} + +type TableTags struct { + Enabled *string `tag:"table"` + Align *string `tag:"table_align"` +} + +func (t TableTags) asColumnConfig() (table.ColumnConfig, error) { + var r table.ColumnConfig + + r.Name = *t.Enabled + + if a := t.Align; a != nil { + switch v := strings.ToLower(*a); v { + case "left": + r.Align = text.AlignLeft + case "right": + r.Align = text.AlignRight + case "center": + r.Align = text.AlignCenter + default: + return table.ColumnConfig{}, errors.Errorf("Unsuported align format: %s", v) + } + } + + return r, nil +} + +func NewTable[T any]() (Table[T], error) { + t := reflect.TypeOf(util.Default[T]()) + + if t.Kind() != reflect.Struct { + return nil, errors.Errorf("Only Struct kind allowed") + } + + var fields []int + var columns []table.ColumnConfig + + for id := 0; id < t.NumField(); id++ { + f := t.Field(id) + + if !f.IsExported() { + continue + } + + if f.Anonymous { + continue + } + + v, err := util.ExtractTags[TableTags](f) + if err != nil { + return nil, err + } + + if v.Enabled == nil { + return nil, nil + } + + col, err := v.asColumnConfig() + if err != nil { + return nil, err + } + + fields = append(fields, id) + columns = append(columns, col) + } + + wr := table.NewWriter() + + wr.AppendHeader(util.FormatList(columns, func(a table.ColumnConfig) interface{} { + return a.Name + })) + + wr.SetColumnConfigs(columns) + + wr.SuppressTrailingSpaces() + + return tableImpl[T]{ + wr: wr, + fields: fields, + }, nil +} diff --git a/pkg/util/pretty/marsh_table_test.go b/pkg/util/pretty/marsh_table_test.go new file mode 100644 index 000000000..11c045505 --- /dev/null +++ b/pkg/util/pretty/marsh_table_test.go @@ -0,0 +1,40 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package pretty + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func Test_MarshTable(t *testing.T) { + type q struct { + B string `table:"Table Name" table_align:"center"` + } + + z, err := NewTable[q]() + require.NoError(t, err) + + println(z.Add(q{ + B: "TEST", + }).RenderMarkdown()) +} diff --git a/internal/md/sections.go b/pkg/util/pretty/replace.go similarity index 96% rename from internal/md/sections.go rename to pkg/util/pretty/replace.go index 49d2d03f7..4bdd80257 100644 --- a/internal/md/sections.go +++ b/pkg/util/pretty/replace.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany +// Copyright 2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package md +package pretty import ( "bytes" diff --git a/internal/md/wrap.go b/pkg/util/pretty/wrap.go similarity index 92% rename from internal/md/wrap.go rename to pkg/util/pretty/wrap.go index 3725b5b70..bcad40bef 100644 --- a/internal/md/wrap.go +++ b/pkg/util/pretty/wrap.go @@ -1,7 +1,7 @@ // // DISCLAIMER // -// Copyright 2023 ArangoDB GmbH, Cologne, Germany +// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package md +package pretty import "fmt" diff --git a/pkg/util/refs.go b/pkg/util/refs.go index dd1f3d1a3..c74ffb1e0 100644 --- a/pkg/util/refs.go +++ b/pkg/util/refs.go @@ -22,8 +22,19 @@ package util import ( "reflect" + + "github.com/pkg/errors" ) +// NewPointer returns a reference to a copy of the pointer value +func NewPointer[T any](input *T) *T { + if input == nil { + return nil + } + + return NewType(*input) +} + // NewType returns a reference to a simple type with given value. func NewType[T interface{}](input T) *T { return &input @@ -38,6 +49,15 @@ func NewTypeOrNil[T interface{}](input *T) *T { return NewType(*input) } +// OptionalType returns the default value (or T default value) +func OptionalType[T any](in *T, v T) T { + if in == nil { + return v + } + + return *in +} + // TypeOrDefault returns the default value (or T default value) if input is nil, otherwise returns the referenced value. func TypeOrDefault[T interface{}](input *T, defaultValue ...T) T { if input == nil { @@ -117,6 +137,42 @@ func InitType[T interface{}](in *T) *T { return &q } +func DeepType[T any]() (T, error) { + var z T + + if err := InitDeepType(&z); err != nil { + return Default[T](), err + } + + return z, nil +} + +func InitDeepType(in any) error { + return initDeepType(reflect.ValueOf(in)) +} + +func initDeepType(v reflect.Value) error { + switch v.Kind() { + case reflect.Pointer: + if !v.Elem().CanSet() { + return errors.Errorf("Unable to set interface") + } + + switch v.Elem().Kind() { + case reflect.Pointer: + nv := reflect.New(v.Type().Elem().Elem()) + if err := initDeepType(nv); err != nil { + return err + } + v.Elem().Set(nv) + default: + v.Elem().Set(reflect.New(v.Elem().Type()).Elem()) + } + } + + return nil +} + type ConditionalFunction[T interface{}] func() (T, bool) type ConditionalP1Function[T, P1 interface{}] func(p1 P1) (T, bool) @@ -155,3 +211,12 @@ func And(in ...bool) bool { return len(in) > 0 } + +func InitOptional[T any](in *T, ok bool) *T { + if ok { + return in + } + + var z T + return &z +} diff --git a/pkg/util/svc/service_test.go b/pkg/util/svc/service_test.go index dea43dbe0..9ec97a12b 100644 --- a/pkg/util/svc/service_test.go +++ b/pkg/util/svc/service_test.go @@ -46,12 +46,12 @@ func Test_Service(t *testing.T) { othStart := other.StartWithHealth(ctx, h) - healthConn, err := grpc.DialContext(ctx, st.Address(), grpc.WithTransportCredentials(insecure.NewCredentials())) + healthConn, err := grpc.NewClient(st.Address(), grpc.WithTransportCredentials(insecure.NewCredentials())) require.NoError(t, err) defer healthConn.Close() - otherConn, err := grpc.DialContext(ctx, othStart.Address(), grpc.WithTransportCredentials(insecure.NewCredentials())) + otherConn, err := grpc.NewClient(othStart.Address(), grpc.WithTransportCredentials(insecure.NewCredentials())) require.NoError(t, err) defer otherConn.Close() diff --git a/pkg/util/tags.go b/pkg/util/tags.go new file mode 100644 index 000000000..cd59fd5ba --- /dev/null +++ b/pkg/util/tags.go @@ -0,0 +1,68 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package util + +import ( + "reflect" + + "github.com/pkg/errors" +) + +func ExtractTags[OUT any](t reflect.StructField) (OUT, error) { + var out OUT + + v := reflect.ValueOf(&out).Elem() + z := v.Type() + + if z.Kind() != reflect.Struct { + return Default[OUT](), errors.Errorf("Only Struct kind allowed") + } + + for id := 0; id < z.NumField(); id++ { + f := z.Field(id) + vf := v.Field(id) + + if !f.IsExported() { + continue + } + + if f.Anonymous { + continue + } + + tag, ok := f.Tag.Lookup("tag") + if !ok { + continue + } + + if f.Type != reflect.TypeOf(Default[*string]()) { + return Default[OUT](), errors.Errorf("Tagged fields can be only *string type") + } + + if v, ok := t.Tag.Lookup(tag); ok { + vf.Set(reflect.ValueOf(&v)) + } else { + vf.Set(reflect.Zero(vf.Type())) + } + } + + return out, nil +} diff --git a/pkg/util/tests/aws.go b/pkg/util/tests/aws.go new file mode 100644 index 000000000..afa15bb86 --- /dev/null +++ b/pkg/util/tests/aws.go @@ -0,0 +1,69 @@ +// +// DISCLAIMER +// +// Copyright 2025 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package tests + +import ( + "testing" + + "github.com/arangodb/kube-arangodb/pkg/util" + awsHelper "github.com/arangodb/kube-arangodb/pkg/util/aws" +) + +const ( + TestAwsProfile util.EnvironmentVariable = "TEST_AWS_PROFILE" + TestAwsRole util.EnvironmentVariable = "TEST_AWS_ROLE" + TestAWSBucket util.EnvironmentVariable = "TEST_AWS_BUCKET" +) + +func GetAWSS3Bucket(t *testing.T) string { + b, ok := TestAWSBucket.Lookup() + if !ok { + t.Skipf("Bucket does not exists") + } + + return b +} + +func GetAWSClientConfig(t *testing.T) awsHelper.Config { + v, ok := TestAwsProfile.Lookup() + if !ok { + t.Skipf("Client does not exists") + } + + var c awsHelper.Config + c.Region = "eu-central-1" + + c.Provider.Config = awsHelper.ProviderConfig{ + Profile: v, + } + c.Provider.Type = awsHelper.ProviderTypeConfig + + r, ok := TestAwsRole.Lookup() + if ok { + c.Provider.Impersonate = awsHelper.ProviderImpersonate{ + Impersonate: true, + Role: r, + Name: "Test", + } + } + + return c +} diff --git a/pkg/util/tests/http.go b/pkg/util/tests/http.go new file mode 100644 index 000000000..79dff5d51 --- /dev/null +++ b/pkg/util/tests/http.go @@ -0,0 +1,58 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package tests + +import ( + "context" + "fmt" + "net" + goHttp "net/http" + "testing" + "time" + + "github.com/stretchr/testify/require" + + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/http" +) + +func NewHTTPServer(ctx context.Context, t *testing.T, mods ...util.ModEP1[goHttp.Server, context.Context]) string { + ln, err := net.Listen("tcp", "127.0.0.1:0") + require.NoError(t, err) + + pr, ok := ln.Addr().(*net.TCPAddr) + require.True(t, ok) + + addr, port := pr.IP.String(), pr.Port + + server, err := http.NewServer(ctx, mods...) + require.NoError(t, err) + + closer := server.Async(ctx, ln) + + WaitForTCPPort(addr, port).WithContextTimeoutT(t, ctx, 10*time.Second, 125*time.Millisecond) + + go func() { + require.NoError(t, closer()) + }() + + return fmt.Sprintf("%s:%d", addr, port) +} diff --git a/pkg/util/tests/kubernetes.go b/pkg/util/tests/kubernetes.go index 6eae5c44a..afd6d0c89 100644 --- a/pkg/util/tests/kubernetes.go +++ b/pkg/util/tests/kubernetes.go @@ -47,12 +47,15 @@ import ( mlApi "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" "github.com/arangodb/kube-arangodb/pkg/apis/networking" networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/apis/platform" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" "github.com/arangodb/kube-arangodb/pkg/apis/scheduler" schedulerApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1" schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" arangoClientSet "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned" operator "github.com/arangodb/kube-arangodb/pkg/operatorV2" "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" + "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/errors" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors" "github.com/arangodb/kube-arangodb/pkg/util/kclient" @@ -185,6 +188,12 @@ func CreateObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientSe vl := *v _, err := arango.BackupV1().ArangoBackups(vl.GetNamespace()).Create(context.Background(), vl, meta.CreateOptions{}) require.NoError(t, err) + case **backupApi.ArangoBackupPolicy: + require.NotNil(t, v) + + vl := *v + _, err := arango.BackupV1().ArangoBackupPolicies(vl.GetNamespace()).Create(context.Background(), vl, meta.CreateOptions{}) + require.NoError(t, err) case **mlApi.ArangoMLExtension: require.NotNil(t, v) @@ -293,6 +302,18 @@ func CreateObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientSe vl := *v _, err := arango.NetworkingV1alpha1().ArangoRoutes(vl.GetNamespace()).Create(context.Background(), vl, meta.CreateOptions{}) require.NoError(t, err) + case **platformApi.ArangoPlatformStorage: + require.NotNil(t, v) + + vl := *v + _, err := arango.PlatformV1alpha1().ArangoPlatformStorages(vl.GetNamespace()).Create(context.Background(), vl, meta.CreateOptions{}) + require.NoError(t, err) + case **platformApi.ArangoPlatformChart: + require.NotNil(t, v) + + vl := *v + _, err := arango.PlatformV1alpha1().ArangoPlatformCharts(vl.GetNamespace()).Create(context.Background(), vl, meta.CreateOptions{}) + require.NoError(t, err) default: require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String())) } @@ -386,6 +407,12 @@ func UpdateObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientSe vl := *v _, err := arango.BackupV1().ArangoBackups(vl.GetNamespace()).Update(context.Background(), vl, meta.UpdateOptions{}) require.NoError(t, err) + case **backupApi.ArangoBackupPolicy: + require.NotNil(t, v) + + vl := *v + _, err := arango.BackupV1().ArangoBackupPolicies(vl.GetNamespace()).Update(context.Background(), vl, meta.UpdateOptions{}) + require.NoError(t, err) case **mlApi.ArangoMLExtension: require.NotNil(t, v) @@ -494,6 +521,18 @@ func UpdateObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientSe vl := *v _, err := arango.NetworkingV1alpha1().ArangoRoutes(vl.GetNamespace()).Update(context.Background(), vl, meta.UpdateOptions{}) require.NoError(t, err) + case **platformApi.ArangoPlatformStorage: + require.NotNil(t, v) + + vl := *v + _, err := arango.PlatformV1alpha1().ArangoPlatformStorages(vl.GetNamespace()).Update(context.Background(), vl, meta.UpdateOptions{}) + require.NoError(t, err) + case **platformApi.ArangoPlatformChart: + require.NotNil(t, v) + + vl := *v + _, err := arango.PlatformV1alpha1().ArangoPlatformCharts(vl.GetNamespace()).Update(context.Background(), vl, meta.UpdateOptions{}) + require.NoError(t, err) default: require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String())) } @@ -572,6 +611,11 @@ func DeleteObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientSe vl := *v require.NoError(t, arango.BackupV1().ArangoBackups(vl.GetNamespace()).Delete(context.Background(), vl.GetName(), meta.DeleteOptions{})) + case **backupApi.ArangoBackupPolicy: + require.NotNil(t, v) + + vl := *v + require.NoError(t, arango.BackupV1().ArangoBackupPolicies(vl.GetNamespace()).Delete(context.Background(), vl.GetName(), meta.DeleteOptions{})) case **mlApi.ArangoMLExtension: require.NotNil(t, v) @@ -662,6 +706,16 @@ func DeleteObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientSe vl := *v require.NoError(t, arango.NetworkingV1alpha1().ArangoRoutes(vl.GetNamespace()).Delete(context.Background(), vl.GetName(), meta.DeleteOptions{})) + case **platformApi.ArangoPlatformStorage: + require.NotNil(t, v) + + vl := *v + require.NoError(t, arango.PlatformV1alpha1().ArangoPlatformStorages(vl.GetNamespace()).Delete(context.Background(), vl.GetName(), meta.DeleteOptions{})) + case **platformApi.ArangoPlatformChart: + require.NotNil(t, v) + + vl := *v + require.NoError(t, arango.PlatformV1alpha1().ArangoPlatformCharts(vl.GetNamespace()).Delete(context.Background(), vl.GetName(), meta.DeleteOptions{})) default: require.Fail(t, fmt.Sprintf("Unable to delete object: %s", reflect.TypeOf(v).String())) } @@ -868,6 +922,21 @@ func RefreshObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientS } else { *v = vn } + case **backupApi.ArangoBackupPolicy: + require.NotNil(t, v) + + vl := *v + + vn, err := arango.BackupV1().ArangoBackupPolicies(vl.GetNamespace()).Get(context.Background(), vl.GetName(), meta.GetOptions{}) + if err != nil { + if kerrors.IsNotFound(err) { + *v = nil + } else { + require.NoError(t, err) + } + } else { + *v = vn + } case **mlApi.ArangoMLExtension: require.NotNil(t, v) @@ -1138,6 +1207,36 @@ func RefreshObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientS } else { *v = vn } + case **platformApi.ArangoPlatformStorage: + require.NotNil(t, v) + + vl := *v + + vn, err := arango.PlatformV1alpha1().ArangoPlatformStorages(vl.GetNamespace()).Get(context.Background(), vl.GetName(), meta.GetOptions{}) + if err != nil { + if kerrors.IsNotFound(err) { + *v = nil + } else { + require.NoError(t, err) + } + } else { + *v = vn + } + case **platformApi.ArangoPlatformChart: + require.NotNil(t, v) + + vl := *v + + vn, err := arango.PlatformV1alpha1().ArangoPlatformCharts(vl.GetNamespace()).Get(context.Background(), vl.GetName(), meta.GetOptions{}) + if err != nil { + if kerrors.IsNotFound(err) { + *v = nil + } else { + require.NoError(t, err) + } + } else { + *v = vn + } default: require.Fail(t, fmt.Sprintf("Unable to get object: %s", reflect.TypeOf(v).String())) } @@ -1238,6 +1337,14 @@ func SetMetaBasedOnType(t *testing.T, object meta.Object) { backup.ArangoBackupResourcePlural, object.GetNamespace(), object.GetName())) + case *backupApi.ArangoBackupPolicy: + v.Kind = backup.ArangoBackupPolicyResourceKind + v.APIVersion = backupApi.SchemeGroupVersion.String() + v.SetSelfLink(fmt.Sprintf("/api/%s/%s/%s/%s", + backupApi.SchemeGroupVersion.String(), + backup.ArangoBackupPolicyResourcePlural, + object.GetNamespace(), + object.GetName())) case *mlApi.ArangoMLExtension: v.Kind = ml.ArangoMLExtensionResourceKind v.APIVersion = mlApi.SchemeGroupVersion.String() @@ -1374,6 +1481,22 @@ func SetMetaBasedOnType(t *testing.T, object meta.Object) { networking.ArangoRouteResourcePlural, object.GetNamespace(), object.GetName())) + case *platformApi.ArangoPlatformStorage: + v.Kind = platform.ArangoPlatformStorageResourceKind + v.APIVersion = networkingApi.SchemeGroupVersion.String() + v.SetSelfLink(fmt.Sprintf("/api/%s/%s/%s/%s", + platformApi.SchemeGroupVersion.String(), + platform.ArangoPlatformStorageResourcePlural, + object.GetNamespace(), + object.GetName())) + case *platformApi.ArangoPlatformChart: + v.Kind = platform.ArangoPlatformChartResourceKind + v.APIVersion = networkingApi.SchemeGroupVersion.String() + v.SetSelfLink(fmt.Sprintf("/api/%s/%s/%s/%s", + platformApi.SchemeGroupVersion.String(), + platform.ArangoPlatformChartResourcePlural, + object.GetNamespace(), + object.GetName())) default: require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String())) } @@ -1384,19 +1507,15 @@ func NewMetaObjectInDefaultNamespace[T meta.Object](t *testing.T, name string, m } func NewMetaObject[T meta.Object](t *testing.T, namespace, name string, mods ...MetaObjectMod[T]) T { - var obj T - - if objT := reflect.TypeOf(obj); objT.Kind() == reflect.Pointer { - newObj := reflect.New(objT.Elem()) - - reflect.ValueOf(&obj).Elem().Set(newObj) - } + obj, err := util.DeepType[T]() + require.NoError(t, err) if IsNamespaced(obj) { obj.SetNamespace(namespace) } obj.SetName(name) obj.SetUID(uuid.NewUUID()) + obj.SetCreationTimestamp(meta.Now()) SetMetaBasedOnType(t, obj) @@ -1494,6 +1613,12 @@ func GVK(t *testing.T, object meta.Object) schema.GroupVersionKind { Version: backupApi.ArangoBackupVersion, Kind: backup.ArangoBackupResourceKind, } + case *backupApi.ArangoBackupPolicy: + return schema.GroupVersionKind{ + Group: backup.ArangoBackupGroupName, + Version: backupApi.ArangoBackupVersion, + Kind: backup.ArangoBackupPolicyResourceKind, + } case *mlApi.ArangoMLExtension: return schema.GroupVersionKind{ Group: ml.ArangoMLGroupName, @@ -1596,6 +1721,18 @@ func GVK(t *testing.T, object meta.Object) schema.GroupVersionKind { Version: networkingApi.ArangoNetworkingVersion, Kind: networking.ArangoRouteResourceKind, } + case *platformApi.ArangoPlatformStorage: + return schema.GroupVersionKind{ + Group: platform.ArangoPlatformGroupName, + Version: platformApi.ArangoPlatformVersion, + Kind: platform.ArangoPlatformStorageResourceKind, + } + case *platformApi.ArangoPlatformChart: + return schema.GroupVersionKind{ + Group: platform.ArangoPlatformGroupName, + Version: platformApi.ArangoPlatformVersion, + Kind: platform.ArangoPlatformChartResourceKind, + } default: require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String())) return schema.GroupVersionKind{} diff --git a/pkg/util/tests/kubernetes_test.go b/pkg/util/tests/kubernetes_test.go index ffadeb629..de36136a2 100644 --- a/pkg/util/tests/kubernetes_test.go +++ b/pkg/util/tests/kubernetes_test.go @@ -37,6 +37,7 @@ import ( mlApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" mlApi "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" "github.com/arangodb/kube-arangodb/pkg/operatorV2/operation" "github.com/arangodb/kube-arangodb/pkg/util/kclient" @@ -84,6 +85,7 @@ func Test_NewMetaObject(t *testing.T) { NewMetaObjectRun[*api.ArangoDeployment](t) NewMetaObjectRun[*api.ArangoClusterSynchronization](t) NewMetaObjectRun[*backupApi.ArangoBackup](t) + NewMetaObjectRun[*backupApi.ArangoBackupPolicy](t) NewMetaObjectRun[*mlApi.ArangoMLExtension](t) NewMetaObjectRun[*mlApi.ArangoMLStorage](t) NewMetaObjectRun[*mlApiv1alpha1.ArangoMLExtension](t) @@ -97,4 +99,6 @@ func Test_NewMetaObject(t *testing.T) { NewMetaObjectRun[*schedulerApi.ArangoSchedulerCronJob](t) NewMetaObjectRun[*analyticsApi.GraphAnalyticsEngine](t) NewMetaObjectRun[*networkingApi.ArangoRoute](t) + NewMetaObjectRun[*platformApi.ArangoPlatformStorage](t) + NewMetaObjectRun[*platformApi.ArangoPlatformChart](t) } diff --git a/pkg/util/tests/port.go b/pkg/util/tests/port.go new file mode 100644 index 000000000..88a7187d4 --- /dev/null +++ b/pkg/util/tests/port.go @@ -0,0 +1,42 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package tests + +import ( + "fmt" + "net" + "time" +) + +func WaitForTCPPort(addr string, port int) Timeout { + return func() error { + conn, err := net.DialTimeout("tcp", fmt.Sprintf("%s:%d", addr, port), time.Second) + if err != nil { + return nil + } + + if err := conn.Close(); err != nil { + return nil + } + + return Interrupt() + } +} diff --git a/pkg/util/tests/suite/chart.go b/pkg/util/tests/suite/chart.go new file mode 100644 index 000000000..234417504 --- /dev/null +++ b/pkg/util/tests/suite/chart.go @@ -0,0 +1,55 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package suite + +import ( + _ "embed" + "testing" + + "github.com/stretchr/testify/require" +) + +//go:embed chart/example-1.0.0.tgz +var chart_example_1_0_0 []byte + +//go:embed chart/example-1.0.1.tgz +var chart_example_1_0_1 []byte + +//go:embed chart/example-1.1.0.tgz +var chart_example_1_1_0 []byte + +func GetChart(t *testing.T, name, version string) []byte { + switch name { + case "example": + switch version { + case "1.0.0": + return chart_example_1_0_0 + case "1.0.1": + return chart_example_1_0_1 + case "1.1.0": + return chart_example_1_1_0 + } + } + + require.Fail(t, "Chart with version not found") + + return nil +} diff --git a/pkg/util/tests/suite/chart/example-1.0.0.tgz b/pkg/util/tests/suite/chart/example-1.0.0.tgz new file mode 100644 index 000000000..04fda88bf Binary files /dev/null and b/pkg/util/tests/suite/chart/example-1.0.0.tgz differ diff --git a/pkg/util/tests/suite/chart/example-1.0.1.tgz b/pkg/util/tests/suite/chart/example-1.0.1.tgz new file mode 100644 index 000000000..15e8fea4a Binary files /dev/null and b/pkg/util/tests/suite/chart/example-1.0.1.tgz differ diff --git a/pkg/util/tests/suite/chart/example-1.1.0.tgz b/pkg/util/tests/suite/chart/example-1.1.0.tgz new file mode 100644 index 000000000..462031cf1 Binary files /dev/null and b/pkg/util/tests/suite/chart/example-1.1.0.tgz differ diff --git a/pkg/util/tests/tgrpc/grpc.go b/pkg/util/tests/tgrpc/grpc.go index 7145aa842..1dd9b522b 100644 --- a/pkg/util/tests/tgrpc/grpc.go +++ b/pkg/util/tests/tgrpc/grpc.go @@ -29,13 +29,15 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + proto "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/types/known/anypb" - "github.com/arangodb/kube-arangodb/pkg/util" + ugrpc "github.com/arangodb/kube-arangodb/pkg/util/grpc" "github.com/arangodb/kube-arangodb/pkg/util/svc" ) func NewGRPCClient[T any](t *testing.T, ctx context.Context, in func(cc grpc.ClientConnInterface) T, addr string, opts ...grpc.DialOption) T { - client, closer, err := util.NewGRPCClient(ctx, in, addr, opts...) + client, closer, err := ugrpc.NewGRPCClient(ctx, in, addr, opts...) require.NoError(t, err) go func() { <-ctx.Done() @@ -72,3 +74,7 @@ func AsGRPCError(t *testing.T, err error) ErrorStatusValidator { require.NotNil(t, st) return errorStatusValidator{st: st} } + +func GRPCAnyCastAs[T proto.Message](t *testing.T, in *anypb.Any, v T) { + require.NoError(t, ugrpc.GRPCAnyCastAs[T](in, v)) +} diff --git a/pkg/util/tests/time.go b/pkg/util/tests/time.go index 7b197807c..dbb38babe 100644 --- a/pkg/util/tests/time.go +++ b/pkg/util/tests/time.go @@ -21,6 +21,7 @@ package tests import ( + "context" "testing" "time" @@ -83,6 +84,36 @@ func (t Timeout) WithTimeout(timeout, interval time.Duration) error { } } +func (t Timeout) WithContextTimeout(ctx context.Context, timeout, interval time.Duration) error { + timeoutT := time.NewTimer(timeout) + defer timeoutT.Stop() + + intervalT := time.NewTicker(interval) + defer intervalT.Stop() + + for { + select { + case <-ctx.Done(): + return errors.Errorf("ContextCancelled!") + case <-timeoutT.C: + return errors.Errorf("Timeouted!") + case <-intervalT.C: + if err := t(); err != nil { + var interrupt interrupt + if errors.As(err, &interrupt) { + return nil + } + + return err + } + } + } +} + func (t Timeout) WithTimeoutT(z *testing.T, timeout, interval time.Duration) { require.NoError(z, t.WithTimeout(timeout, interval)) } + +func (t Timeout) WithContextTimeoutT(z *testing.T, ctx context.Context, timeout, interval time.Duration) { + require.NoError(z, t.WithContextTimeout(ctx, timeout, interval)) +} diff --git a/pkg/util/tests/types/compatibility.go b/pkg/util/tests/types/compatibility.go new file mode 100644 index 000000000..fb70a9b67 --- /dev/null +++ b/pkg/util/tests/types/compatibility.go @@ -0,0 +1,60 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package types + +import ( + "reflect" + + "github.com/pkg/errors" + + shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" +) + +func EnsureTypeForwardCompatibility(a, b reflect.Type) error { + if a.Kind() != b.Kind() { + return errors.Errorf("Invalid kind, got %s, expected %s", a.Kind().String(), b.Kind().String()) + } + + if a == b { + return nil + } + + switch a.Kind() { + case reflect.Struct: + var err = make([]error, 0, a.NumField()) + + for id := 0; id < a.NumField(); id++ { + f := a.Field(id) + + bf, ok := b.FieldByName(f.Name) + if !ok { + err = append(err, shared.PrefixResourceError(f.Name, errors.Errorf("Field not defined in target"))) + continue + } + + err = append(err, shared.PrefixResourceError(f.Name, EnsureTypeForwardCompatibility(f.Type, bf.Type))) + } + + return shared.WithErrors(err...) + default: + return nil + } +} diff --git a/pkg/util/tls.go b/pkg/util/tls.go new file mode 100644 index 000000000..c20fc502e --- /dev/null +++ b/pkg/util/tls.go @@ -0,0 +1,121 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package util + +import ( + "context" + "crypto/tls" + "time" + + core "k8s.io/api/core/v1" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/arangodb-helper/go-certificates" + + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/globals" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" +) + +type TLSConfigFetcher func(ctx context.Context) (*tls.Config, error) + +func (t TLSConfigFetcher) Eval(ctx context.Context) (*tls.Config, error) { + if t == nil { + return EmptyTLSConfig(ctx) + } + + return t(ctx) +} + +func EmptyTLSConfig(ctx context.Context) (*tls.Config, error) { + return nil, nil +} + +func NewSelfSignedTLSConfig(cn string, names ...string) TLSConfigFetcher { + return func(ctx context.Context) (*tls.Config, error) { + options := certificates.CreateCertificateOptions{ + CommonName: cn, + Hosts: append([]string{cn}, names...), + ValidFrom: time.Now(), + ValidFor: time.Hour * 24 * 365 * 10, + IsCA: false, + ECDSACurve: "P256", + } + + cert, priv, err := certificates.CreateCertificate(options, nil) + if err != nil { + return nil, err + } + + var result *tls.Config + c, err := tls.X509KeyPair([]byte(cert), []byte(priv)) + if err != nil { + return nil, errors.WithStack(err) + } + result = &tls.Config{ + Certificates: []tls.Certificate{c}, + } + return result, nil + } +} + +func NewSecretTLSConfig(client generic.GetInterface[*core.Secret], name string) TLSConfigFetcher { + return func(ctx context.Context) (*tls.Config, error) { + nctx, cancel := globals.GetGlobals().Timeouts().Kubernetes().WithTimeout(ctx) + defer cancel() + + s, err := client.Get(nctx, name, meta.GetOptions{}) + if err != nil { + return nil, err + } + certBytes, found := s.Data[core.TLSCertKey] + if !found { + return nil, errors.Errorf("No %s found in secret %s", core.TLSCertKey, name) + } + keyBytes, found := s.Data[core.TLSPrivateKeyKey] + if !found { + return nil, errors.Errorf("No %s found in secret %s", core.TLSPrivateKeyKey, name) + } + + var result *tls.Config + c, err := tls.X509KeyPair(certBytes, keyBytes) + if err != nil { + return nil, errors.WithStack(err) + } + result = &tls.Config{ + Certificates: []tls.Certificate{c}, + } + return result, nil + } +} + +func NewKeyfileTLSConfig(keyfile string) TLSConfigFetcher { + return func(ctx context.Context) (*tls.Config, error) { + certificate, err := certificates.LoadKeyFile(keyfile) + if err != nil { + return nil, err + } + + return &tls.Config{ + Certificates: []tls.Certificate{certificate}, + }, nil + } +} diff --git a/pkg/util/version.go b/pkg/util/version.go new file mode 100644 index 000000000..1d8f05e19 --- /dev/null +++ b/pkg/util/version.go @@ -0,0 +1,57 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package util + +import "github.com/Masterminds/semver/v3" + +type VersionConstrain interface { + Validate(version string) (bool, error) +} + +type versionConstrain struct { + constrain *semver.Constraints +} + +func (v versionConstrain) Validate(version string) (bool, error) { + ver, err := semver.NewVersion(version) + if err != nil { + return false, err + } + + if ver.Prerelease() != "" { + nver, nerr := ver.SetPrerelease("") + if nerr != nil { + return false, nerr + } + ver = &nver + } + + return v.constrain.Check(ver), nil +} + +func NewVersionConstrain(constrain string) (VersionConstrain, error) { + c, err := semver.NewConstraint(constrain) + if err != nil { + return nil, err + } + + return versionConstrain{constrain: c}, nil +} diff --git a/pkg/util/version_test.go b/pkg/util/version_test.go new file mode 100644 index 000000000..c32af38d6 --- /dev/null +++ b/pkg/util/version_test.go @@ -0,0 +1,127 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package util + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func Test_VersionConstrain(t *testing.T) { + type constrain struct { + version string + valid bool + } + + validate := func(version string, checks ...constrain) { + t.Run(version, func(t *testing.T) { + vc, err := NewVersionConstrain(version) + require.NoError(t, err) + + for _, el := range checks { + t.Run(el.version, func(t *testing.T) { + b, err := vc.Validate(el.version) + require.NoError(t, err) + + if el.valid { + require.True(t, b) + } else { + require.False(t, b) + } + }) + } + }) + } + + validate(">= 1.2.3 < 1.3.0", + constrain{ + version: "1.2.3", + valid: true, + }, + constrain{ + version: "1.2.5", + valid: true, + }, + constrain{ + version: "1.3.0", + }, + constrain{ + version: "v1.2.3-abcdefg", + valid: true, + }, + ) + + validate(">= 1.2.3 < 1.3.0 || >= 1.3.1 < 1.4.0", + constrain{ + version: "1.2.3", + valid: true, + }, + constrain{ + version: "1.2.5", + valid: true, + }, + constrain{ + version: "1.3.0", + }, + constrain{ + version: "v1.2.3-abcdefg", + valid: true, + }, + constrain{ + version: "1.3.5", + valid: true, + }, + constrain{ + version: "1.4.0", + }, + ) + + validate("~ 1", + constrain{ + version: "1.2.3", + valid: true, + }, + constrain{ + version: "1.2.5", + valid: true, + }, + constrain{ + version: "1.3.0", + valid: true, + }, + constrain{ + version: "v1.2.3-abcdefg", + valid: true, + }, + constrain{ + version: "1.3.5", + valid: true, + }, + constrain{ + version: "1.4.0", + valid: true, + }, + constrain{ + version: "2.0.0", + }, + ) +} diff --git a/pkg/webhook/admission.go b/pkg/webhook/admission.go new file mode 100644 index 000000000..8325edee4 --- /dev/null +++ b/pkg/webhook/admission.go @@ -0,0 +1,329 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package webhook + +import ( + "context" + "encoding/json" + "fmt" + goHttp "net/http" + "reflect" + "time" + + "github.com/pkg/errors" + admission "k8s.io/api/admission/v1" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/arangodb/kube-arangodb/pkg/logging" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/http" + "github.com/arangodb/kube-arangodb/pkg/util/shutdown" +) + +func NewAdmissionHandler[T meta.Object](name, group, version, kind, resource string, handlers ...Handler[T]) Admission { + return admissionImpl[T]{ + name: name, + group: group, + version: version, + kind: kind, + resource: resource, + handlers: handlers, + } +} + +type AdmissionRequestType int + +const ( + AdmissionRequestValidate AdmissionRequestType = iota + AdmissionRequestMutate +) + +type Admissions []Admission + +func (a Admissions) Register() util.Mod[goHttp.ServeMux] { + return func(in *goHttp.ServeMux) { + for _, handler := range a { + log := logger.Str("name", handler.Name()) + + log.Info("Registering handler") + + if endpoint := fmt.Sprintf("/webhook/%s/%s/validate", gvsAsPath(handler.Resource()), handler.Name()); endpoint != "" { + log.Str("endpoint", endpoint).Info("Registered Validate handler") + in.HandleFunc(endpoint, handler.Validate) + } + + if endpoint := fmt.Sprintf("/webhook/%s/%s/mutate", gvsAsPath(handler.Resource()), handler.Name()); endpoint != "" { + log.Str("endpoint", endpoint).Info("Registered Mutate handler") + in.HandleFunc(endpoint, handler.Mutate) + } + } + } +} + +func gvsAsPath(in meta.GroupVersionResource) string { + if in.Group == "" { + return fmt.Sprintf("core/%s/%s", in.Version, in.Resource) + } + return fmt.Sprintf("%s/%s/%s", in.Group, in.Version, in.Resource) +} + +type Admission interface { + Name() string + + Kind() meta.GroupVersionKind + Resource() meta.GroupVersionResource + + Validate(goHttp.ResponseWriter, *goHttp.Request) + Mutate(goHttp.ResponseWriter, *goHttp.Request) +} + +type admissionImpl[T meta.Object] struct { + name, group, version, kind, resource string + + handlers []Handler[T] +} + +func (a admissionImpl[T]) Name() string { + return a.name +} + +func (a admissionImpl[T]) Kind() meta.GroupVersionKind { + return meta.GroupVersionKind{ + Group: a.group, + Version: a.version, + Kind: a.kind, + } +} + +func (a admissionImpl[T]) Resource() meta.GroupVersionResource { + return meta.GroupVersionResource{ + Group: a.group, + Version: a.version, + Resource: a.resource, + } +} + +func (a admissionImpl[T]) Validate(writer goHttp.ResponseWriter, request *goHttp.Request) { + a.request(AdmissionRequestValidate, writer, request) +} + +func (a admissionImpl[T]) Mutate(writer goHttp.ResponseWriter, request *goHttp.Request) { + a.request(AdmissionRequestMutate, writer, request) +} + +func (a admissionImpl[T]) request(t AdmissionRequestType, writer goHttp.ResponseWriter, request *goHttp.Request) { + log := logger.Wrap(logging.HTTPRequestWrap(request)) + + log.Info("Request Received") + + timeout := time.Second + + if request.URL.Query().Has("timeout") { + if v, err := time.ParseDuration(request.URL.Query().Get("timeout")); err == nil { + if v > 500*time.Millisecond { + timeout = v - 200*time.Millisecond + } else { + timeout = v + } + } + } + + ctx, c := context.WithTimeout(shutdown.Context(), timeout) + defer c() + + code, data := a.requestWriterJSON(ctx, log, t, request) + writer.WriteHeader(code) + if len(data) > 0 { + if _, err := util.WriteAll(writer, data); err != nil { + log.Err(err).Warn("Unable to send response") + } + } +} + +func (a admissionImpl[T]) requestWriterJSON(ctx context.Context, log logging.Logger, t AdmissionRequestType, request *goHttp.Request) (int, []byte) { + code, obj, err := a.requestWriter(ctx, log, t, request) + + if err != nil { + if herr, ok := http.IsError(err); ok { + return herr.Code, herr.JSON() + } + + log.Err(err).Warn("Unexpected Error") + return goHttp.StatusInternalServerError, nil + } + + if reflect.ValueOf(obj).IsZero() { + return code, nil + } + + data, err := json.Marshal(obj) + if err != nil { + log.Err(err).Warn("Unable to marshal response") + return goHttp.StatusInternalServerError, nil + } + + return code, data +} + +func (a admissionImpl[T]) requestWriter(ctx context.Context, log logging.Logger, t AdmissionRequestType, request *goHttp.Request) (int, any, error) { + switch t { + case AdmissionRequestValidate, AdmissionRequestMutate: + default: + log.Warn("Invalid AdmissionRequestType") + return 0, nil, http.NewError(goHttp.StatusBadRequest, "Invalid AdmissionRequestType") + } + + if request.Method != goHttp.MethodPost { + return 0, nil, http.NewError(goHttp.StatusMethodNotAllowed, "Method '%s' not allowed, expected '%s'", request.Method, goHttp.MethodPost) + } + + var req admission.AdmissionReview + + if err := json.NewDecoder(request.Body).Decode(&req); err != nil { + return 0, nil, http.WrapError(goHttp.StatusBadRequest, err) + } + + resp := a.admissionHandle(ctx, log, t, req.Request) + + return 200, admission.AdmissionReview{ + TypeMeta: req.TypeMeta, + Response: resp, + }, nil +} + +func (a admissionImpl[T]) admissionHandle(ctx context.Context, log logging.Logger, t AdmissionRequestType, request *admission.AdmissionRequest) *admission.AdmissionResponse { + if request == nil { + return &admission.AdmissionResponse{ + Allowed: false, + } + } + + if request.Kind != a.Kind() { + return &admission.AdmissionResponse{ + UID: request.UID, + Allowed: false, + Result: &meta.Status{ + Message: fmt.Sprintf("Invalid Kind. Got '%s', expected '%s'", request.Kind.String(), a.Kind().String()), + }, + } + } + + resp, err := a.admissionHandleE(ctx, log, t, request) + if err != nil { + return &admission.AdmissionResponse{ + UID: request.UID, + Allowed: false, + Result: &meta.Status{ + Message: fmt.Sprintf("Unexpected error: %s", err.Error()), + }, + } + } + + if resp == nil { + return &admission.AdmissionResponse{ + UID: request.UID, + Allowed: false, + Result: &meta.Status{ + Message: "Missing Response element", + }, + } + } + + resp.UID = request.UID + + return resp +} + +func (a admissionImpl[T]) admissionHandleE(ctx context.Context, log logging.Logger, t AdmissionRequestType, request *admission.AdmissionRequest) (*admission.AdmissionResponse, error) { + old, err := a.evaluateObject(request.OldObject.Raw) + if err != nil { + return nil, errors.Wrapf(err, "Unable to parse old object") + } + + new, err := a.evaluateObject(request.Object.Raw) + if err != nil { + return nil, errors.Wrapf(err, "Unable to parse new object") + } + + switch t { + case AdmissionRequestValidate: + for _, handler := range a.handlers { + if handler.CanHandle(ctx, log, t, request, old, new) { + if v, ok := handler.(ValidationHandler[T]); ok { + result, err := v.Validate(ctx, log, t, request, old, new) + if err != nil { + return nil, err + } + + return result.AsResponse() + } + + return ValidationResponse{ + Allowed: false, + Message: "Request not handled", + }.AsResponse() + } + } + + return &admission.AdmissionResponse{Allowed: true}, nil + case AdmissionRequestMutate: + for _, handler := range a.handlers { + if handler.CanHandle(ctx, log, t, request, old, new) { + if v, ok := handler.(MutationHandler[T]); ok { + result, err := v.Mutate(ctx, log, t, request, old, new) + if err != nil { + return nil, err + } + + return result.AsResponse() + } + + return ValidationResponse{ + Allowed: false, + Message: "Request not handled", + }.AsResponse() + } + } + + return &admission.AdmissionResponse{Allowed: true}, nil + default: + return &admission.AdmissionResponse{ + Allowed: false, + }, nil + } +} + +func (a admissionImpl[T]) evaluateObject(data []byte) (T, error) { + if len(data) == 0 { + return util.Default[T](), nil + } + + obj, err := util.DeepType[T]() + if err != nil { + return util.Default[T](), err + } + + if err := json.Unmarshal(data, &obj); err != nil { + return util.Default[T](), err + } + + return obj, nil +} diff --git a/pkg/webhook/handler.go b/pkg/webhook/handler.go new file mode 100644 index 000000000..a786c3ae9 --- /dev/null +++ b/pkg/webhook/handler.go @@ -0,0 +1,52 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package webhook + +import ( + "context" + + admission "k8s.io/api/admission/v1" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/arangodb/kube-arangodb/pkg/logging" +) + +type CanHandleFunc[T meta.Object] func(ctx context.Context, log logging.Logger, t AdmissionRequestType, request *admission.AdmissionRequest, old, new T) bool + +type MutateFunc[T meta.Object] func(ctx context.Context, log logging.Logger, t AdmissionRequestType, request *admission.AdmissionRequest, old, new T) (MutationResponse, error) + +type ValidateFunc[T meta.Object] func(ctx context.Context, log logging.Logger, t AdmissionRequestType, request *admission.AdmissionRequest, old, new T) (ValidationResponse, error) + +type Handler[T meta.Object] interface { + CanHandle(ctx context.Context, log logging.Logger, t AdmissionRequestType, request *admission.AdmissionRequest, old, new T) bool +} + +type MutationHandler[T meta.Object] interface { + Handler[T] + + Mutate(ctx context.Context, log logging.Logger, t AdmissionRequestType, request *admission.AdmissionRequest, old, new T) (MutationResponse, error) +} + +type ValidationHandler[T meta.Object] interface { + Handler[T] + + Validate(ctx context.Context, log logging.Logger, t AdmissionRequestType, request *admission.AdmissionRequest, old, new T) (ValidationResponse, error) +} diff --git a/pkg/webhook/logger.go b/pkg/webhook/logger.go new file mode 100644 index 000000000..66b163aba --- /dev/null +++ b/pkg/webhook/logger.go @@ -0,0 +1,25 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package webhook + +import "github.com/arangodb/kube-arangodb/pkg/logging" + +var logger = logging.Global().RegisterAndGetLogger("webhook", logging.Info) diff --git a/pkg/webhook/responses.go b/pkg/webhook/responses.go new file mode 100644 index 000000000..aa9e93646 --- /dev/null +++ b/pkg/webhook/responses.go @@ -0,0 +1,89 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package webhook + +import ( + "encoding/json" + "fmt" + + admission "k8s.io/api/admission/v1" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/arangodb/kube-arangodb/pkg/deployment/patch" + "github.com/arangodb/kube-arangodb/pkg/util" +) + +func NewValidationResponse(allowed bool, msg string, args ...any) ValidationResponse { + return ValidationResponse{ + Allowed: allowed, + Message: fmt.Sprintf(msg, args...), + } +} + +type ValidationResponse struct { + Allowed bool + Message string + Warnings []string +} + +func (v ValidationResponse) AsResponse() (*admission.AdmissionResponse, error) { + if v.Allowed { + return &admission.AdmissionResponse{ + Allowed: true, + Warnings: v.Warnings, + }, nil + } + + return &admission.AdmissionResponse{ + Allowed: false, + Warnings: v.Warnings, + Result: &meta.Status{ + Message: v.Message, + }, + }, nil +} + +type MutationResponse struct { + ValidationResponse + + Patch patch.Items +} + +func (v MutationResponse) AsResponse() (*admission.AdmissionResponse, error) { + resp, err := v.ValidationResponse.AsResponse() + if err != nil { + return nil, err + } + + if len(v.Patch) == 0 { + return resp, nil + } + + q, err := json.Marshal(v.Patch) + if err != nil { + return nil, err + } + + resp.Patch = q + resp.PatchType = util.NewType(admission.PatchTypeJSONPatch) + + return resp, nil +} diff --git a/pkg/webhook/suite_pod_test.go b/pkg/webhook/suite_pod_test.go new file mode 100644 index 000000000..2ebecad58 --- /dev/null +++ b/pkg/webhook/suite_pod_test.go @@ -0,0 +1,111 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package webhook + +import ( + "context" + "encoding/json" + "testing" + + "github.com/stretchr/testify/require" + admission "k8s.io/api/admission/v1" + core "k8s.io/api/core/v1" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/arangodb/kube-arangodb/pkg/logging" +) + +func newPodAdmissionRequest(t *testing.T, name, namespace string, op admission.Operation, old, new *core.Pod) *admission.AdmissionRequest { + req := &admission.AdmissionRequest{ + UID: "", + Kind: meta.GroupVersionKind{ + Group: "", + Version: "v1", + Kind: "Pod", + }, + Resource: meta.GroupVersionResource{ + Group: "", + Version: "v1", + Resource: "pods", + }, + Name: name, + Namespace: namespace, + Operation: op, + } + + if old != nil { + data, err := json.Marshal(old) + require.NoError(t, err) + req.OldObject.Raw = data + } + + if new != nil { + data, err := json.Marshal(new) + require.NoError(t, err) + req.Object.Raw = data + } + + return req +} + +func newPodAdmission(name string, handlers ...Handler[*core.Pod]) Admission { + return NewAdmissionHandler[*core.Pod](name, "", "v1", "Pod", "pods", handlers...) +} + +func newPodHandler(can CanHandleFunc[*core.Pod], + mutate MutateFunc[*core.Pod], + validate ValidateFunc[*core.Pod]) Handler[*core.Pod] { + return podHandler{ + can: can, + mutate: mutate, + validate: validate, + } +} + +type podHandler struct { + can CanHandleFunc[*core.Pod] + mutate MutateFunc[*core.Pod] + validate ValidateFunc[*core.Pod] +} + +func (p podHandler) Validate(ctx context.Context, log logging.Logger, t AdmissionRequestType, request *admission.AdmissionRequest, old, new *core.Pod) (ValidationResponse, error) { + if p.validate == nil { + return ValidationResponse{}, nil + } + + return p.validate(ctx, log, t, request, old, new) +} + +func (p podHandler) Mutate(ctx context.Context, log logging.Logger, t AdmissionRequestType, request *admission.AdmissionRequest, old, new *core.Pod) (MutationResponse, error) { + if p.mutate == nil { + return MutationResponse{}, nil + } + + return p.mutate(ctx, log, t, request, old, new) +} + +func (p podHandler) CanHandle(ctx context.Context, log logging.Logger, t AdmissionRequestType, request *admission.AdmissionRequest, old, new *core.Pod) bool { + if p.can == nil { + return false + } + + return p.can(ctx, log, t, request, old, new) +} diff --git a/pkg/webhook/suite_test.go b/pkg/webhook/suite_test.go new file mode 100644 index 000000000..b9acabf3b --- /dev/null +++ b/pkg/webhook/suite_test.go @@ -0,0 +1,129 @@ +// +// DISCLAIMER +// +// Copyright 2024 ArangoDB GmbH, Cologne, Germany +// +// 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 holder is ArangoDB GmbH, Cologne, Germany +// + +package webhook + +import ( + "bytes" + "context" + "crypto/tls" + "encoding/json" + "fmt" + goHttp "net/http" + "testing" + + "github.com/stretchr/testify/require" + admission "k8s.io/api/admission/v1" + core "k8s.io/api/core/v1" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/uuid" + + "github.com/arangodb/kube-arangodb/pkg/logging" + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/http" + "github.com/arangodb/kube-arangodb/pkg/util/tests" +) + +func Test(t *testing.T) { + ctx, c := context.WithCancel(context.Background()) + defer c() + + addr := startHTTPServer(t, ctx, newPodAdmission("test", newPodHandler(func(ctx context.Context, log logging.Logger, t AdmissionRequestType, request *admission.AdmissionRequest, old, new *core.Pod) bool { + return true + }, nil, func(ctx context.Context, log logging.Logger, at AdmissionRequestType, request *admission.AdmissionRequest, old, new *core.Pod) (ValidationResponse, error) { + require.Nil(t, old) + require.NotNil(t, new) + + require.EqualValues(t, AdmissionRequestValidate, at) + + return ValidationResponse{ + Allowed: true, + }, nil + }))) + + resp := requestPod(t, addr, "test", AdmissionRequestValidate, + newPodAdmissionRequest(t, "test", tests.FakeNamespace, admission.Create, nil, &core.Pod{ + ObjectMeta: meta.ObjectMeta{ + Name: "test", + Namespace: tests.FakeNamespace, + }, + }), + ) + require.NotNil(t, resp) + require.True(t, resp.Allowed) +} + +func requestPod(t *testing.T, addr string, name string, mode AdmissionRequestType, req *admission.AdmissionRequest) *admission.AdmissionResponse { + return request(t, addr, meta.GroupVersionResource{ + Group: "", + Version: "v1", + Resource: "pods", + }, name, mode, req) +} + +func request(t *testing.T, addr string, gvs meta.GroupVersionResource, name string, mode AdmissionRequestType, request *admission.AdmissionRequest) *admission.AdmissionResponse { + if request == nil { + request = &admission.AdmissionRequest{} + } + + request.UID = uuid.NewUUID() + + data, err := json.Marshal(admission.AdmissionReview{ + Request: request, + }) + require.NoError(t, err) + + var c = goHttp.Client{ + Transport: &goHttp.Transport{ + TLSClientConfig: &tls.Config{ + InsecureSkipVerify: true, + }, + }, + } + + url := fmt.Sprintf("https://%s/webhook/%s/%s/%s", addr, gvsAsPath(gvs), name, util.BoolSwitch(mode == AdmissionRequestValidate, "validate", "mutate")) + + t.Logf("Request send to: %s", url) + + resp, err := c.Post(url, "application/json", bytes.NewReader(data)) + require.NoError(t, err) + + require.EqualValues(t, 200, resp.StatusCode) + + var rv admission.AdmissionReview + + require.NoError(t, json.NewDecoder(resp.Body).Decode(&rv)) + require.NoError(t, resp.Body.Close()) + + require.NotNil(t, rv.Response) + require.EqualValues(t, request.UID, rv.Response.UID) + + return rv.Response +} + +func startHTTPServer(t *testing.T, ctx context.Context, admissions ...Admission) string { + return tests.NewHTTPServer(ctx, t, + http.DefaultHTTPServerSettings, + http.WithTLSConfigFetcher(util.NewSelfSignedTLSConfig("localhost", "127.0.0.1")), + http.WithServeMux( + Admissions(admissions).Register(), + ), + ) +} diff --git a/scripts/cache.sh b/scripts/cache.sh new file mode 100644 index 000000000..edc83821a --- /dev/null +++ b/scripts/cache.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +ROOT=$1 + +SHA_CODE=$( +find "${ROOT}/" \ + '(' -type f -name '*.go' -not -path "${ROOT}/vendor/*" -not -path "${ROOT}/.gobuild/*" -not -path "${ROOT}/deps/*" -exec sha256sum {} \; ')' -o \ + '(' -type f -name 'go.sum' -not -path "${ROOT}/vendor/*" -not -path "${ROOT}/.gobuild/*" -not -path "${ROOT}/deps/*" -exec sha256sum {} \; ')' -o \ + '(' -type f -name 'go.mod' -not -path "${ROOT}/vendor/*" -not -path "${ROOT}/.gobuild/*" -not -path "${ROOT}/deps/*" -exec sha256sum {} \; ')' \ + | cut -d ' ' -f1 | sha256sum | cut -d ' ' -f1 +) + +SHA_MOD=$( +find "${ROOT}/" \ + '(' -type f -name 'go.sum' -not -path "${ROOT}/vendor/*" -not -path "${ROOT}/.gobuild/*" -not -path "${ROOT}/deps/*" -exec sha256sum {} \; ')' -o \ + '(' -type f -name 'go.mod' -not -path "${ROOT}/vendor/*" -not -path "${ROOT}/.gobuild/*" -not -path "${ROOT}/deps/*" -exec sha256sum {} \; ')' \ + | cut -d ' ' -f1 | sha256sum | cut -d ' ' -f1 +) + +echo "Checksum Code: ${SHA_CODE}" +echo "Checksum Mod: ${SHA_MOD}" + +echo -n "${SHA_CODE}" > ${ROOT}/.checksum.code +echo -n "${SHA_MOD}" > ${ROOT}/.checksum.mod \ No newline at end of file diff --git a/scripts/codegen.sh b/scripts/codegen.sh new file mode 100644 index 000000000..42cfddb2b --- /dev/null +++ b/scripts/codegen.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +SCRIPT_ROOT=$1 + +THIS_PKG=github.com/arangodb/kube-arangodb + +sed -i --posix "s@\^v\[0-9\]\+((alpha|beta)\[0-9\]\+)\?@^v[0-9]+((alpha|beta)[0-9]*)?@g" "${SCRIPT_ROOT}/deps/k8s.io/code-generator/kube_codegen.sh" + +source "${SCRIPT_ROOT}/deps/k8s.io/code-generator/kube_codegen.sh" + +kube::codegen::gen_helpers \ + --boilerplate "${SCRIPT_ROOT}/tools/codegen/boilerplate.go.txt" \ + "${SCRIPT_ROOT}/pkg/apis" + +kube::codegen::gen_client \ + --boilerplate "${SCRIPT_ROOT}/tools/codegen/boilerplate.go.txt" \ + --with-watch \ + --output-dir "${SCRIPT_ROOT}/pkg/generated" \ + --output-pkg "${THIS_PKG}/pkg/generated" \ + "${SCRIPT_ROOT}/pkg/apis" \ No newline at end of file diff --git a/scripts/patch_readme.sh b/scripts/patch_readme.sh index 1c6af7e59..01a81fcb0 100755 --- a/scripts/patch_readme.sh +++ b/scripts/patch_readme.sh @@ -22,6 +22,8 @@ f=README.md replaceInFile "s@arangodb/kube-arangodb:[0-9]+\.[0-9]+\.[0-9]+@arangodb/kube-arangodb:${VERSION}@g" ${f} replaceInFile "s@arangodb/kube-arangodb-enterprise:[0-9]+\.[0-9]+\.[0-9]+@arangodb/kube-arangodb-enterprise:${VERSION}@g" ${f} +replaceInFile "s@kube-arangodb/manifests/(kustomize|kustomize-enterprise)/([a-z]+)\?ref=[0-9]+\.[0-9]+\.[0-9]+@kube-arangodb/manifests/\1/\2?ref=${VERSION}@g" ${f} + replaceInFile "s@^kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/.*/manifests/arango-crd.yaml\$@kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/${VERSION}/manifests/arango-crd.yaml@g" ${f} replaceInFile "s@^kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/.*/manifests/arango-deployment.yaml\$@kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/${VERSION}/manifests/arango-deployment.yaml@g" ${f} replaceInFile "s@^kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/.*/manifests/arango-deployment-replication.yaml\$@kubectl apply -f https://raw.githubusercontent.com/arangodb/kube-arangodb/${VERSION}/manifests/arango-deployment-replication.yaml@g" ${f} diff --git a/tools/codegen/license-header.txt b/tools/codegen/license-header.txt index 6fbf8775e..841c650df 100644 --- a/tools/codegen/license-header.txt +++ b/tools/codegen/license-header.txt @@ -1,7 +1,7 @@ DISCLAIMER -Copyright 2024 ArangoDB GmbH, Cologne, Germany +Copyright 2025 ArangoDB GmbH, Cologne, Germany Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.