From c6fd4a4ca0099f4d59b8cf800f55f518503bb9c9 Mon Sep 17 00:00:00 2001 From: ajanikow <12255597+ajanikow@users.noreply.github.com> Date: Mon, 14 Oct 2024 14:36:45 +0000 Subject: [PATCH 01/69] Updated to 1.2.43+git --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index bb3653fe5..65f113ed6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.43 \ No newline at end of file +1.2.43+git \ No newline at end of file From 2d12813f6db9d850dea0d36d007f7338e8f6f425 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:55:35 +0200 Subject: [PATCH 02/69] [Maintenance] License fix (#1738) --- Makefile | 2 +- pkg/operatorV2/handler_p0.generated.go | 20 ++++++++++++++++++++ pkg/operatorV2/handler_p1.generated.go | 20 ++++++++++++++++++++ pkg/operatorV2/handler_p2.generated.go | 20 ++++++++++++++++++++ pkg/operatorV2/handler_p3.generated.go | 20 ++++++++++++++++++++ pkg/operatorV2/handler_p4.generated.go | 20 ++++++++++++++++++++ pkg/operatorV2/handler_p5.generated.go | 20 ++++++++++++++++++++ pkg/operatorV2/handler_p6.generated.go | 20 ++++++++++++++++++++ pkg/operatorV2/handler_p7.generated.go | 20 ++++++++++++++++++++ pkg/operatorV2/handler_p8.generated.go | 20 ++++++++++++++++++++ pkg/operatorV2/handler_p9.generated.go | 20 ++++++++++++++++++++ 11 files changed, 201 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index ca462de78..6afdabe65 100644 --- a/Makefile +++ b/Makefile @@ -917,7 +917,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/..." diff --git a/pkg/operatorV2/handler_p0.generated.go b/pkg/operatorV2/handler_p0.generated.go index 492a0e785..f29852614 100644 --- a/pkg/operatorV2/handler_p0.generated.go +++ b/pkg/operatorV2/handler_p0.generated.go @@ -1,3 +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 +// + package operator import ( diff --git a/pkg/operatorV2/handler_p1.generated.go b/pkg/operatorV2/handler_p1.generated.go index 9e455e237..381d562d2 100644 --- a/pkg/operatorV2/handler_p1.generated.go +++ b/pkg/operatorV2/handler_p1.generated.go @@ -1,3 +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 +// + package operator import ( diff --git a/pkg/operatorV2/handler_p2.generated.go b/pkg/operatorV2/handler_p2.generated.go index 7db3e05e4..5176b8cab 100644 --- a/pkg/operatorV2/handler_p2.generated.go +++ b/pkg/operatorV2/handler_p2.generated.go @@ -1,3 +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 +// + package operator import ( diff --git a/pkg/operatorV2/handler_p3.generated.go b/pkg/operatorV2/handler_p3.generated.go index 5bccf5f32..31b05f6b2 100644 --- a/pkg/operatorV2/handler_p3.generated.go +++ b/pkg/operatorV2/handler_p3.generated.go @@ -1,3 +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 +// + package operator import ( diff --git a/pkg/operatorV2/handler_p4.generated.go b/pkg/operatorV2/handler_p4.generated.go index 765207e7c..b1249dcec 100644 --- a/pkg/operatorV2/handler_p4.generated.go +++ b/pkg/operatorV2/handler_p4.generated.go @@ -1,3 +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 +// + package operator import ( diff --git a/pkg/operatorV2/handler_p5.generated.go b/pkg/operatorV2/handler_p5.generated.go index 3fe2255e3..b8803f296 100644 --- a/pkg/operatorV2/handler_p5.generated.go +++ b/pkg/operatorV2/handler_p5.generated.go @@ -1,3 +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 +// + package operator import ( diff --git a/pkg/operatorV2/handler_p6.generated.go b/pkg/operatorV2/handler_p6.generated.go index 6b156beef..5811317f2 100644 --- a/pkg/operatorV2/handler_p6.generated.go +++ b/pkg/operatorV2/handler_p6.generated.go @@ -1,3 +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 +// + package operator import ( diff --git a/pkg/operatorV2/handler_p7.generated.go b/pkg/operatorV2/handler_p7.generated.go index 8e8242bde..edd4fe844 100644 --- a/pkg/operatorV2/handler_p7.generated.go +++ b/pkg/operatorV2/handler_p7.generated.go @@ -1,3 +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 +// + package operator import ( diff --git a/pkg/operatorV2/handler_p8.generated.go b/pkg/operatorV2/handler_p8.generated.go index da316e688..72c210d3e 100644 --- a/pkg/operatorV2/handler_p8.generated.go +++ b/pkg/operatorV2/handler_p8.generated.go @@ -1,3 +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 +// + package operator import ( diff --git a/pkg/operatorV2/handler_p9.generated.go b/pkg/operatorV2/handler_p9.generated.go index a2d30073e..d21ed0f0e 100644 --- a/pkg/operatorV2/handler_p9.generated.go +++ b/pkg/operatorV2/handler_p9.generated.go @@ -1,3 +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 +// + package operator import ( From 0da4798a502478bcd3fc2c76be4dd0bb54a07f4c Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:06:21 +0200 Subject: [PATCH 03/69] [Maintenance] Fix Kustomize versions (#1740) --- README.md | 8 +++--- chart/kube-arangodb-arm64/README.md | 26 ++++++++++++++++++- chart/kube-arangodb-arm64/values.yaml | 2 ++ .../kube-arangodb-enterprise-arm64/README.md | 26 ++++++++++++++++++- .../values.yaml | 2 ++ chart/kube-arangodb-enterprise/README.md | 24 +++++++++++++++++ chart/kube-arangodb-enterprise/values.yaml | 2 ++ chart/kube-arangodb/README.md | 24 +++++++++++++++++ scripts/patch_readme.sh | 2 ++ 9 files changed, 110 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 6970c8817..f19fd9497 100644 --- a/README.md +++ b/README.md @@ -283,8 +283,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.43 + - https://github.com/arangodb/kube-arangodb/manifests/kustomize/deployment?ref=1.2.43 ``` ##### Enterprise Edition example @@ -293,8 +293,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.43 + - https://github.com/arangodb/kube-arangodb/manifests/kustomize-enterprise/deployment?ref=1.2.43 ``` ### Installation of latest release using Helm 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/values.yaml b/chart/kube-arangodb-arm64/values.yaml index 72ec93fbb..7ec9f78a8 100644 --- a/chart/kube-arangodb-arm64/values.yaml +++ b/chart/kube-arangodb-arm64/values.yaml @@ -34,6 +34,8 @@ operator: k8sToK8sClusterSync: false ml: false analytics: false + networking: true + scheduler: true tolerations: [] rbac: enabled: true 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/values.yaml b/chart/kube-arangodb-enterprise-arm64/values.yaml index 1588dc4c2..c8a2fc7a2 100644 --- a/chart/kube-arangodb-enterprise-arm64/values.yaml +++ b/chart/kube-arangodb-enterprise-arm64/values.yaml @@ -34,6 +34,8 @@ operator: k8sToK8sClusterSync: false ml: false analytics: false + networking: true + scheduler: true tolerations: [] rbac: enabled: true 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/values.yaml b/chart/kube-arangodb-enterprise/values.yaml index 838e191c3..6c5965a78 100644 --- a/chart/kube-arangodb-enterprise/values.yaml +++ b/chart/kube-arangodb-enterprise/values.yaml @@ -34,6 +34,8 @@ operator: k8sToK8sClusterSync: false ml: false analytics: false + networking: true + scheduler: true tolerations: [] rbac: enabled: true 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/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} From e1c14d30a9a01abf7c6695c2c4e800340817589c Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:52:15 +0200 Subject: [PATCH 04/69] [Maintenance] Kubernetes 1.31.1 libraries (#1741) --- CHANGELOG.md | 1 + Makefile | 29 +-- go.mod | 98 ++++---- go.sum | 221 +++++++----------- .../deployment/v1/zz_generated.deepcopy.go | 5 + .../v2alpha1/zz_generated.deepcopy.go | 5 + .../versioned/fake/clientset_generated.go | 6 +- .../fake/fake_graphanalyticsengine.go | 36 +-- .../v1alpha1/graphanalyticsengine.go | 146 +----------- .../versioned/typed/apps/v1/arangojob.go | 146 +----------- .../typed/apps/v1/fake/fake_arangojob.go | 36 +-- .../versioned/typed/backup/v1/arangobackup.go | 146 +----------- .../typed/backup/v1/arangobackuppolicy.go | 146 +----------- .../typed/backup/v1/fake/fake_arangobackup.go | 36 +-- .../backup/v1/fake/fake_arangobackuppolicy.go | 36 +-- .../v1/arangoclustersynchronization.go | 146 +----------- .../typed/deployment/v1/arangodeployment.go | 146 +----------- .../typed/deployment/v1/arangomember.go | 146 +----------- .../typed/deployment/v1/arangotask.go | 146 +----------- .../fake/fake_arangoclustersynchronization.go | 36 +-- .../v1/fake/fake_arangodeployment.go | 36 +-- .../deployment/v1/fake/fake_arangomember.go | 36 +-- .../deployment/v1/fake/fake_arangotask.go | 36 +-- .../v2alpha1/arangoclustersynchronization.go | 146 +----------- .../deployment/v2alpha1/arangodeployment.go | 146 +----------- .../typed/deployment/v2alpha1/arangomember.go | 146 +----------- .../typed/deployment/v2alpha1/arangotask.go | 146 +----------- .../fake/fake_arangoclustersynchronization.go | 36 +-- .../v2alpha1/fake/fake_arangodeployment.go | 36 +-- .../v2alpha1/fake/fake_arangomember.go | 36 +-- .../v2alpha1/fake/fake_arangotask.go | 36 +-- .../typed/ml/v1alpha1/arangomlbatchjob.go | 146 +----------- .../typed/ml/v1alpha1/arangomlcronjob.go | 146 +----------- .../typed/ml/v1alpha1/arangomlextension.go | 146 +----------- .../typed/ml/v1alpha1/arangomlstorage.go | 146 +----------- .../ml/v1alpha1/fake/fake_arangomlbatchjob.go | 36 +-- .../ml/v1alpha1/fake/fake_arangomlcronjob.go | 36 +-- .../v1alpha1/fake/fake_arangomlextension.go | 36 +-- .../ml/v1alpha1/fake/fake_arangomlstorage.go | 36 +-- .../typed/ml/v1beta1/arangomlextension.go | 146 +----------- .../typed/ml/v1beta1/arangomlstorage.go | 146 +----------- .../ml/v1beta1/fake/fake_arangomlextension.go | 36 +-- .../ml/v1beta1/fake/fake_arangomlstorage.go | 36 +-- .../typed/networking/v1alpha1/arangoroute.go | 146 +----------- .../v1alpha1/fake/fake_arangoroute.go | 36 +-- .../v1/arangodeploymentreplication.go | 146 +----------- .../fake/fake_arangodeploymentreplication.go | 36 +-- .../v2alpha1/arangodeploymentreplication.go | 146 +----------- .../fake/fake_arangodeploymentreplication.go | 36 +-- .../typed/scheduler/v1alpha1/arangoprofile.go | 146 +----------- .../v1alpha1/fake/fake_arangoprofile.go | 36 +-- .../typed/scheduler/v1beta1/arangoprofile.go | 146 +----------- .../v1beta1/arangoschedulerbatchjob.go | 146 +----------- .../v1beta1/arangoschedulercronjob.go | 146 +----------- .../v1beta1/arangoschedulerdeployment.go | 146 +----------- .../scheduler/v1beta1/arangoschedulerpod.go | 146 +----------- .../v1beta1/fake/fake_arangoprofile.go | 36 +-- .../fake/fake_arangoschedulerbatchjob.go | 36 +-- .../fake/fake_arangoschedulercronjob.go | 36 +-- .../fake/fake_arangoschedulerdeployment.go | 36 +-- .../v1beta1/fake/fake_arangoschedulerpod.go | 36 +-- .../storage/v1alpha/arangolocalstorage.go | 135 +---------- .../v1alpha/fake/fake_arangolocalstorage.go | 36 +-- .../informers/externalversions/factory.go | 1 + .../v1alpha1/graphanalyticsengine.go | 39 +--- pkg/generated/listers/apps/v1/arangojob.go | 39 +--- .../listers/backup/v1/arangobackup.go | 39 +--- .../listers/backup/v1/arangobackuppolicy.go | 39 +--- .../v1/arangoclustersynchronization.go | 39 +--- .../listers/deployment/v1/arangodeployment.go | 39 +--- .../listers/deployment/v1/arangomember.go | 39 +--- .../listers/deployment/v1/arangotask.go | 39 +--- .../v2alpha1/arangoclustersynchronization.go | 39 +--- .../deployment/v2alpha1/arangodeployment.go | 39 +--- .../deployment/v2alpha1/arangomember.go | 39 +--- .../listers/deployment/v2alpha1/arangotask.go | 39 +--- .../listers/ml/v1alpha1/arangomlbatchjob.go | 39 +--- .../listers/ml/v1alpha1/arangomlcronjob.go | 39 +--- .../listers/ml/v1alpha1/arangomlextension.go | 39 +--- .../listers/ml/v1alpha1/arangomlstorage.go | 39 +--- .../listers/ml/v1beta1/arangomlextension.go | 39 +--- .../listers/ml/v1beta1/arangomlstorage.go | 39 +--- .../networking/v1alpha1/arangoroute.go | 39 +--- .../v1/arangodeploymentreplication.go | 39 +--- .../v2alpha1/arangodeploymentreplication.go | 39 +--- .../scheduler/v1alpha1/arangoprofile.go | 39 +--- .../scheduler/v1beta1/arangoprofile.go | 39 +--- .../v1beta1/arangoschedulerbatchjob.go | 39 +--- .../v1beta1/arangoschedulercronjob.go | 39 +--- .../v1beta1/arangoschedulerdeployment.go | 39 +--- .../scheduler/v1beta1/arangoschedulerpod.go | 39 +--- .../storage/v1alpha/arangolocalstorage.go | 26 +-- pkg/operatorV2/operator.go | 8 +- pkg/operatorV2/operator_worker.go | 27 +-- pkg/util/grpc.go | 14 +- pkg/util/k8sutil/informer.go | 62 ++--- pkg/util/svc/service_test.go | 4 +- scripts/codegen.sh | 24 ++ 98 files changed, 1240 insertions(+), 5429 deletions(-) create mode 100644 scripts/codegen.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 5606cde79..b8da57fba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Change Log ## [master](https://github.com/arangodb/kube-arangodb/tree/master) (N/A) +- (Maintenance) Kubernetes 1.31.1 libraries ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/Makefile b/Makefile index 6afdabe65..b4c7f8bdf 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:=1 PROJECT := arangodb_operator SCRIPTDIR := $(shell pwd) @@ -431,30 +431,7 @@ update-generated: @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) + GOPATH=$(GOBUILDDIR) bash "${ROOTDIR}/scripts/codegen.sh" "${ROOTDIR}" dashboard/assets.go: cd $(DASHBOARDDIR) && docker build -t $(DASHBOARDBUILDIMAGE) -f Dockerfile.build $(DASHBOARDDIR) diff --git a/go.mod b/go.mod index beb5040e7..6ddbb1457 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,8 @@ module github.com/arangodb/kube-arangodb -go 1.22 +go 1.22.0 -toolchain go1.22.4 +toolchain go1.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 +10,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.1 + k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.31.1 + k8s.io/apimachinery => k8s.io/apimachinery v0.31.1 + k8s.io/apiserver => k8s.io/apiserver v0.31.1 + k8s.io/client-go => k8s.io/client-go v0.31.1 + k8s.io/cloud-provider => k8s.io/cloud-provider v0.31.1 + k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.31.1 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.1 + k8s.io/kubernetes => k8s.io/kubernetes v0.31.1 + k8s.io/metrics => k8s.io/metrics v0.31.1 ) require ( @@ -35,11 +35,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.12.0 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 + 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,48 +48,48 @@ 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.9.0 + golang.org/x/sync v0.7.0 + golang.org/x/sys v0.21.0 + golang.org/x/text v0.16.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-20240701130421-f6361c86f094 + google.golang.org/grpc v1.65.0 + google.golang.org/protobuf v1.34.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.1 + k8s.io/apiextensions-apiserver v0.31.1 + k8s.io/apimachinery v0.31.1 + k8s.io/client-go v0.31.1 + 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 ( + cel.dev/expr v0.15.0 // indirect github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e // indirect github.com/beorn7/perks v1.0.1 // 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/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-20240423153145-555b57ec207b // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dchest/siphash v1.2.2 // 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.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-logr/logr v1.4.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 @@ -112,31 +113,32 @@ require ( github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect - github.com/moby/spdystream v0.2.0 // indirect + github.com/moby/spdystream v0.4.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect + github.com/onsi/gomega v1.33.1 // 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/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/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 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.24.0 // indirect + golang.org/x/net v0.26.0 // indirect + golang.org/x/oauth2 v0.21.0 // indirect + golang.org/x/term v0.21.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // 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/klog/v2 v2.130.1 // indirect + k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 // indirect sigs.k8s.io/controller-runtime v0.16.3 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect diff --git a/go.sum b/go.sum index 8d68fe4f6..047800277 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +cel.dev/expr v0.15.0 h1:O1jzfJCQBfL5BFoYktaxwIhuttaQPsVWerH9/EEKx0w= +cel.dev/expr v0.15.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg= 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= @@ -23,23 +23,21 @@ 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/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +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.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/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/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/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/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/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/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +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/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= @@ -50,25 +48,22 @@ github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9 h1:74lLNRzvsdIlkTgfD github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9/go.mod h1:GgB8SF9nRG+GqaDtLcwJZsQFhcogVCJ79j4EdT0c2V4= 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.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g= -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 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/go-control-plane v0.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI= +github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= +github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= 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/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-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= 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= @@ -86,38 +81,31 @@ github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91 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-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/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= 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/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= 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/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/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/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.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 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/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/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 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= @@ -158,8 +146,8 @@ github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APP github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= 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/moby/spdystream v0.4.0 h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8= +github.com/moby/spdystream v0.4.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= 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= @@ -169,10 +157,10 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/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/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/v2 v2.1.1 h1:LWAJwfNvjQZCFIDKWYQaM62NcYeYViCmWIwmOStowAI= @@ -187,27 +175,26 @@ github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.71.2 h 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_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.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_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.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +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.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/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/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/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/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/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= @@ -218,111 +205,75 @@ github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS 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/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 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-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 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-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/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -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-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= 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.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -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-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-20190620200207-3b0461eec859/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-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -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/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/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/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +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/sync v0.0.0-20181221193216-37e7f081c4d4/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-20201020160332-67f06af15bc9/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/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/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-20210615035016-665e8c7367d1/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/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/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/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/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.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= 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-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-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-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/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-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -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.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= -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/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -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/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -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/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/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/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/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/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/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -330,22 +281,20 @@ 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.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-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= +k8s.io/api v0.31.1 h1:Xe1hX/fPW3PXYYv8BlozYqw63ytA92snr96zMW9gWTU= +k8s.io/api v0.31.1/go.mod h1:sbN1g6eY6XVLeqNsZGLnI5FwVseTrZX7Fv3O26rhAaI= +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/apimachinery v0.31.1 h1:mhcUBbj7KUjaVhyXILglcVjuS4nYXiwC+KKFBgIVy7U= +k8s.io/apimachinery v0.31.1/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= +k8s.io/client-go v0.31.1 h1:f0ugtWSbWpxHR7sjVpQwuvw9a3ZKLXX0u0itkFXufb0= +k8s.io/client-go v0.31.1/go.mod h1:sKI8871MJN2OyeqRlmA4W4KM9KBdBUpDLu/43eGemCg= +k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= +k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= +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/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= +k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= diff --git a/pkg/apis/deployment/v1/zz_generated.deepcopy.go b/pkg/apis/deployment/v1/zz_generated.deepcopy.go index 86f9e84bf..d683e6d9d 100644 --- a/pkg/apis/deployment/v1/zz_generated.deepcopy.go +++ b/pkg/apis/deployment/v1/zz_generated.deepcopy.go @@ -2907,6 +2907,11 @@ func (in *ServerGroupSpecVolumeHostPath) DeepCopy() *ServerGroupSpecVolumeHostPa // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServerGroupSpecVolumeMount) DeepCopyInto(out *ServerGroupSpecVolumeMount) { *out = *in + if in.RecursiveReadOnly != nil { + in, out := &in.RecursiveReadOnly, &out.RecursiveReadOnly + *out = new(corev1.RecursiveReadOnlyMode) + **out = **in + } if in.MountPropagation != nil { in, out := &in.MountPropagation, &out.MountPropagation *out = new(corev1.MountPropagationMode) diff --git a/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go b/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go index c57528ba7..7cbbb932d 100644 --- a/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go @@ -2907,6 +2907,11 @@ func (in *ServerGroupSpecVolumeHostPath) DeepCopy() *ServerGroupSpecVolumeHostPa // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServerGroupSpecVolumeMount) DeepCopyInto(out *ServerGroupSpecVolumeMount) { *out = *in + if in.RecursiveReadOnly != nil { + in, out := &in.RecursiveReadOnly, &out.RecursiveReadOnly + *out = new(v1.RecursiveReadOnlyMode) + **out = **in + } if in.MountPropagation != nil { in, out := &in.MountPropagation, &out.MountPropagation *out = new(v1.MountPropagationMode) diff --git a/pkg/generated/clientset/versioned/fake/clientset_generated.go b/pkg/generated/clientset/versioned/fake/clientset_generated.go index 661164523..2a0c5afa2 100644 --- a/pkg/generated/clientset/versioned/fake/clientset_generated.go +++ b/pkg/generated/clientset/versioned/fake/clientset_generated.go @@ -59,8 +59,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 { 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..4c7521a98 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 @@ -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/graphanalyticsengine.go b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/graphanalyticsengine.go index 2ca7273b5..fc879c3e7 100644 --- a/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/graphanalyticsengine.go +++ b/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/graphanalyticsengine.go @@ -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/arangojob.go b/pkg/generated/clientset/versioned/typed/apps/v1/arangojob.go index a6a4d1ec8..c4a7e3594 100644 --- a/pkg/generated/clientset/versioned/typed/apps/v1/arangojob.go +++ b/pkg/generated/clientset/versioned/typed/apps/v1/arangojob.go @@ -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/fake/fake_arangojob.go b/pkg/generated/clientset/versioned/typed/apps/v1/fake/fake_arangojob.go index 55b5bdd32..a8004a682 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 @@ -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/backup/v1/arangobackup.go b/pkg/generated/clientset/versioned/typed/backup/v1/arangobackup.go index 29d58ce8b..004484e76 100644 --- a/pkg/generated/clientset/versioned/typed/backup/v1/arangobackup.go +++ b/pkg/generated/clientset/versioned/typed/backup/v1/arangobackup.go @@ -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..7438f03ba 100644 --- a/pkg/generated/clientset/versioned/typed/backup/v1/arangobackuppolicy.go +++ b/pkg/generated/clientset/versioned/typed/backup/v1/arangobackuppolicy.go @@ -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/fake/fake_arangobackup.go b/pkg/generated/clientset/versioned/typed/backup/v1/fake/fake_arangobackup.go index fa883c0c7..590321ff2 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 @@ -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..b8202e1c4 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 @@ -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/deployment/v1/arangoclustersynchronization.go b/pkg/generated/clientset/versioned/typed/deployment/v1/arangoclustersynchronization.go index 634ab47cb..2f755d165 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/arangoclustersynchronization.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/arangoclustersynchronization.go @@ -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..7463f2987 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/arangodeployment.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/arangodeployment.go @@ -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..c94a5519c 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/arangomember.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/arangomember.go @@ -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..5ac3ae6b0 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v1/arangotask.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v1/arangotask.go @@ -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/fake/fake_arangoclustersynchronization.go b/pkg/generated/clientset/versioned/typed/deployment/v1/fake/fake_arangoclustersynchronization.go index 314455a65..dae624cc7 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 @@ -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..9fc2a2ecc 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 @@ -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..6c1bd43ba 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 @@ -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..2d9d1ce64 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 @@ -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/v2alpha1/arangoclustersynchronization.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangoclustersynchronization.go index 23d24297b..54fbf66ed 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangoclustersynchronization.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangoclustersynchronization.go @@ -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..85754bb08 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangodeployment.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangodeployment.go @@ -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..878a57b08 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangomember.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangomember.go @@ -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..e28ac7187 100644 --- a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangotask.go +++ b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangotask.go @@ -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/fake/fake_arangoclustersynchronization.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/fake/fake_arangoclustersynchronization.go index 4331180ca..8f6422d4e 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 @@ -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..1533324cd 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 @@ -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..43ce713e1 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 @@ -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..0963e77d9 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 @@ -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/ml/v1alpha1/arangomlbatchjob.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlbatchjob.go index b28536956..40211c527 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlbatchjob.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlbatchjob.go @@ -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..a53beadb7 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlcronjob.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlcronjob.go @@ -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..1f49d52a1 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlextension.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlextension.go @@ -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..c86092cec 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlstorage.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlstorage.go @@ -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/fake/fake_arangomlbatchjob.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake/fake_arangomlbatchjob.go index a38c287e8..4adb6880b 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 @@ -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..e1775cef3 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 @@ -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..cc62ff07c 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 @@ -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..f200c5b2b 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 @@ -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/v1beta1/arangomlextension.go b/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlextension.go index 2c38e940e..22608a295 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlextension.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlextension.go @@ -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..10fadc48f 100644 --- a/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlstorage.go +++ b/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlstorage.go @@ -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/fake/fake_arangomlextension.go b/pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/fake_arangomlextension.go index 1282d7b8d..ddea7663c 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 @@ -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..03f59d0fb 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 @@ -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/networking/v1alpha1/arangoroute.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/arangoroute.go index 7713adf9a..159303b61 100644 --- a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/arangoroute.go +++ b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/arangoroute.go @@ -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/fake/fake_arangoroute.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_arangoroute.go index 021a9d6f7..0454b0d00 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 @@ -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/replication/v1/arangodeploymentreplication.go b/pkg/generated/clientset/versioned/typed/replication/v1/arangodeploymentreplication.go index 5f90d12c9..b8df5c12b 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v1/arangodeploymentreplication.go +++ b/pkg/generated/clientset/versioned/typed/replication/v1/arangodeploymentreplication.go @@ -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/fake/fake_arangodeploymentreplication.go b/pkg/generated/clientset/versioned/typed/replication/v1/fake/fake_arangodeploymentreplication.go index 8ed7c04f4..3fe5228e0 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 @@ -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/v2alpha1/arangodeploymentreplication.go b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/arangodeploymentreplication.go index a42dff0a3..31586b064 100644 --- a/pkg/generated/clientset/versioned/typed/replication/v2alpha1/arangodeploymentreplication.go +++ b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/arangodeploymentreplication.go @@ -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/fake/fake_arangodeploymentreplication.go b/pkg/generated/clientset/versioned/typed/replication/v2alpha1/fake/fake_arangodeploymentreplication.go index 4d39cd4df..eeef822a4 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 @@ -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/scheduler/v1alpha1/arangoprofile.go b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/arangoprofile.go index e733e17ba..62cee9225 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/arangoprofile.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/arangoprofile.go @@ -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/fake/fake_arangoprofile.go b/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1/fake/fake_arangoprofile.go index 0c058c681..a00a44622 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 @@ -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/v1beta1/arangoprofile.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoprofile.go index 37b9c7ab5..66ef3e278 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoprofile.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoprofile.go @@ -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..8a516e3f5 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerbatchjob.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerbatchjob.go @@ -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..23acfd96e 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulercronjob.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulercronjob.go @@ -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..a7becc2aa 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerdeployment.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerdeployment.go @@ -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" ) // ArangoSchedulerDeploymentsGetter has a method to return a ArangoSchedulerDeploymentInterface. @@ -44,6 +43,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 @@ -56,144 +56,18 @@ type ArangoSchedulerDeploymentInterface interface { // 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). - Resource("arangoschedulerdeployments"). - Name(name). - 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). - Resource("arangoschedulerdeployments"). - 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/arangoschedulerpod.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerpod.go index 55703b9db..71939a237 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerpod.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerpod.go @@ -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/fake/fake_arangoprofile.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/fake/fake_arangoprofile.go index b7ae44fa5..38675965a 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 @@ -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..4988c00d9 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 @@ -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..727ee379b 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 @@ -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..7a30183df 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 @@ -45,22 +45,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 +81,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 +132,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 +140,12 @@ 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 } 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..1ccfe08cb 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 @@ -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/storage/v1alpha/arangolocalstorage.go b/pkg/generated/clientset/versioned/typed/storage/v1alpha/arangolocalstorage.go index b6c10ae15..3de58671f 100644 --- a/pkg/generated/clientset/versioned/typed/storage/v1alpha/arangolocalstorage.go +++ b/pkg/generated/clientset/versioned/typed/storage/v1alpha/arangolocalstorage.go @@ -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/fake/fake_arangolocalstorage.go b/pkg/generated/clientset/versioned/typed/storage/v1alpha/fake/fake_arangolocalstorage.go index b48c7c513..336cca367 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 @@ -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/informers/externalversions/factory.go b/pkg/generated/informers/externalversions/factory.go index 180f55ea6..93b1f88ba 100644 --- a/pkg/generated/informers/externalversions/factory.go +++ b/pkg/generated/informers/externalversions/factory.go @@ -240,6 +240,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 diff --git a/pkg/generated/listers/analytics/v1alpha1/graphanalyticsengine.go b/pkg/generated/listers/analytics/v1alpha1/graphanalyticsengine.go index 5c6596981..3cfe50505 100644 --- a/pkg/generated/listers/analytics/v1alpha1/graphanalyticsengine.go +++ b/pkg/generated/listers/analytics/v1alpha1/graphanalyticsengine.go @@ -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..c7325e3fa 100644 --- a/pkg/generated/listers/apps/v1/arangojob.go +++ b/pkg/generated/listers/apps/v1/arangojob.go @@ -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/backup/v1/arangobackup.go b/pkg/generated/listers/backup/v1/arangobackup.go index 9513ff225..a54ff84dd 100644 --- a/pkg/generated/listers/backup/v1/arangobackup.go +++ b/pkg/generated/listers/backup/v1/arangobackup.go @@ -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..4cb870a4f 100644 --- a/pkg/generated/listers/backup/v1/arangobackuppolicy.go +++ b/pkg/generated/listers/backup/v1/arangobackuppolicy.go @@ -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/deployment/v1/arangoclustersynchronization.go b/pkg/generated/listers/deployment/v1/arangoclustersynchronization.go index c4cb3a81c..fe34f3792 100644 --- a/pkg/generated/listers/deployment/v1/arangoclustersynchronization.go +++ b/pkg/generated/listers/deployment/v1/arangoclustersynchronization.go @@ -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..e7c7db277 100644 --- a/pkg/generated/listers/deployment/v1/arangodeployment.go +++ b/pkg/generated/listers/deployment/v1/arangodeployment.go @@ -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..629952edf 100644 --- a/pkg/generated/listers/deployment/v1/arangomember.go +++ b/pkg/generated/listers/deployment/v1/arangomember.go @@ -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..6fe5a9cd9 100644 --- a/pkg/generated/listers/deployment/v1/arangotask.go +++ b/pkg/generated/listers/deployment/v1/arangotask.go @@ -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/v2alpha1/arangoclustersynchronization.go b/pkg/generated/listers/deployment/v2alpha1/arangoclustersynchronization.go index 259553c05..6110eeee0 100644 --- a/pkg/generated/listers/deployment/v2alpha1/arangoclustersynchronization.go +++ b/pkg/generated/listers/deployment/v2alpha1/arangoclustersynchronization.go @@ -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..33f9c67a2 100644 --- a/pkg/generated/listers/deployment/v2alpha1/arangodeployment.go +++ b/pkg/generated/listers/deployment/v2alpha1/arangodeployment.go @@ -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..2087c5393 100644 --- a/pkg/generated/listers/deployment/v2alpha1/arangomember.go +++ b/pkg/generated/listers/deployment/v2alpha1/arangomember.go @@ -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..161b1bf95 100644 --- a/pkg/generated/listers/deployment/v2alpha1/arangotask.go +++ b/pkg/generated/listers/deployment/v2alpha1/arangotask.go @@ -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/ml/v1alpha1/arangomlbatchjob.go b/pkg/generated/listers/ml/v1alpha1/arangomlbatchjob.go index f289b31ab..4a1bbe6a0 100644 --- a/pkg/generated/listers/ml/v1alpha1/arangomlbatchjob.go +++ b/pkg/generated/listers/ml/v1alpha1/arangomlbatchjob.go @@ -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..2f96658ee 100644 --- a/pkg/generated/listers/ml/v1alpha1/arangomlcronjob.go +++ b/pkg/generated/listers/ml/v1alpha1/arangomlcronjob.go @@ -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..af0208d6c 100644 --- a/pkg/generated/listers/ml/v1alpha1/arangomlextension.go +++ b/pkg/generated/listers/ml/v1alpha1/arangomlextension.go @@ -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..4537182ca 100644 --- a/pkg/generated/listers/ml/v1alpha1/arangomlstorage.go +++ b/pkg/generated/listers/ml/v1alpha1/arangomlstorage.go @@ -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/v1beta1/arangomlextension.go b/pkg/generated/listers/ml/v1beta1/arangomlextension.go index 67a7fc3e9..ca225c3dd 100644 --- a/pkg/generated/listers/ml/v1beta1/arangomlextension.go +++ b/pkg/generated/listers/ml/v1beta1/arangomlextension.go @@ -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..44e05a651 100644 --- a/pkg/generated/listers/ml/v1beta1/arangomlstorage.go +++ b/pkg/generated/listers/ml/v1beta1/arangomlstorage.go @@ -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/networking/v1alpha1/arangoroute.go b/pkg/generated/listers/networking/v1alpha1/arangoroute.go index 737f34c10..ac8bd7027 100644 --- a/pkg/generated/listers/networking/v1alpha1/arangoroute.go +++ b/pkg/generated/listers/networking/v1alpha1/arangoroute.go @@ -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/replication/v1/arangodeploymentreplication.go b/pkg/generated/listers/replication/v1/arangodeploymentreplication.go index 75733e798..a437bc59a 100644 --- a/pkg/generated/listers/replication/v1/arangodeploymentreplication.go +++ b/pkg/generated/listers/replication/v1/arangodeploymentreplication.go @@ -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/v2alpha1/arangodeploymentreplication.go b/pkg/generated/listers/replication/v2alpha1/arangodeploymentreplication.go index afc579df9..0a8aa9ab3 100644 --- a/pkg/generated/listers/replication/v2alpha1/arangodeploymentreplication.go +++ b/pkg/generated/listers/replication/v2alpha1/arangodeploymentreplication.go @@ -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/scheduler/v1alpha1/arangoprofile.go b/pkg/generated/listers/scheduler/v1alpha1/arangoprofile.go index ab68f9f20..02e6294ff 100644 --- a/pkg/generated/listers/scheduler/v1alpha1/arangoprofile.go +++ b/pkg/generated/listers/scheduler/v1alpha1/arangoprofile.go @@ -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/v1beta1/arangoprofile.go b/pkg/generated/listers/scheduler/v1beta1/arangoprofile.go index f53124f3e..6a96724e6 100644 --- a/pkg/generated/listers/scheduler/v1beta1/arangoprofile.go +++ b/pkg/generated/listers/scheduler/v1beta1/arangoprofile.go @@ -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..4c92637cf 100644 --- a/pkg/generated/listers/scheduler/v1beta1/arangoschedulerbatchjob.go +++ b/pkg/generated/listers/scheduler/v1beta1/arangoschedulerbatchjob.go @@ -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..ebf8a66c6 100644 --- a/pkg/generated/listers/scheduler/v1beta1/arangoschedulercronjob.go +++ b/pkg/generated/listers/scheduler/v1beta1/arangoschedulercronjob.go @@ -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..146a060a4 100644 --- a/pkg/generated/listers/scheduler/v1beta1/arangoschedulerdeployment.go +++ b/pkg/generated/listers/scheduler/v1beta1/arangoschedulerdeployment.go @@ -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..0b8a73661 100644 --- a/pkg/generated/listers/scheduler/v1beta1/arangoschedulerpod.go +++ b/pkg/generated/listers/scheduler/v1beta1/arangoschedulerpod.go @@ -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/storage/v1alpha/arangolocalstorage.go b/pkg/generated/listers/storage/v1alpha/arangolocalstorage.go index d2d199a1a..908ec0097 100644 --- a/pkg/generated/listers/storage/v1alpha/arangolocalstorage.go +++ b/pkg/generated/listers/storage/v1alpha/arangolocalstorage.go @@ -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/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..b568ab881 100644 --- a/pkg/operatorV2/operator_worker.go +++ b/pkg/operatorV2/operator_worker.go @@ -78,27 +78,14 @@ func (o *operator) processNextItem() bool { 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/util/grpc.go b/pkg/util/grpc.go index 2ed559baf..254887b16 100644 --- a/pkg/util/grpc.go +++ b/pkg/util/grpc.go @@ -39,7 +39,7 @@ import ( 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 } @@ -65,7 +65,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 +91,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 +109,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 { 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/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/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 From b8d34960c28af6af763a9a45ce96e1095ba80778 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:11:20 +0200 Subject: [PATCH 05/69] [Feature] Helm Client Support (#1743) --- CHANGELOG.md | 1 + go.mod | 92 ++++- go.sum | 357 +++++++++++++++++- pkg/util/errors/defined.go | 37 ++ pkg/util/k8sutil/helm/chart.go | 48 +++ pkg/util/k8sutil/helm/client.go | 208 ++++++++++ pkg/util/k8sutil/helm/client_test.go | 240 ++++++++++++ pkg/util/k8sutil/helm/configuration.go | 48 +++ pkg/util/k8sutil/helm/logger.go | 25 ++ pkg/util/k8sutil/helm/suite/example-1.0.0.tgz | Bin 0 -> 588 bytes pkg/util/k8sutil/helm/suite_test.go | 68 ++++ pkg/util/k8sutil/helm/types.go | 81 ++++ pkg/util/k8sutil/helm/values.go | 48 +++ pkg/util/kclient/client_factory.go | 4 + pkg/util/kclient/rest.go | 127 +++++++ pkg/util/refs.go | 17 + 16 files changed, 1382 insertions(+), 19 deletions(-) create mode 100644 pkg/util/errors/defined.go create mode 100644 pkg/util/k8sutil/helm/chart.go create mode 100644 pkg/util/k8sutil/helm/client.go create mode 100644 pkg/util/k8sutil/helm/client_test.go create mode 100644 pkg/util/k8sutil/helm/configuration.go create mode 100644 pkg/util/k8sutil/helm/logger.go create mode 100644 pkg/util/k8sutil/helm/suite/example-1.0.0.tgz create mode 100644 pkg/util/k8sutil/helm/suite_test.go create mode 100644 pkg/util/k8sutil/helm/types.go create mode 100644 pkg/util/k8sutil/helm/values.go create mode 100644 pkg/util/kclient/rest.go diff --git a/CHANGELOG.md b/CHANGELOG.md index b8da57fba..fa7dbeb40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [master](https://github.com/arangodb/kube-arangodb/tree/master) (N/A) - (Maintenance) Kubernetes 1.31.1 libraries +- (Feature) Helm Client Support ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/go.mod b/go.mod index 6ddbb1457..a859e606c 100644 --- a/go.mod +++ b/go.mod @@ -56,9 +56,9 @@ require ( github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.9.0 - golang.org/x/sync v0.7.0 - golang.org/x/sys v0.21.0 - golang.org/x/text v0.16.0 + golang.org/x/sync v0.8.0 + golang.org/x/sys v0.25.0 + golang.org/x/text v0.18.0 golang.org/x/time v0.5.0 google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 google.golang.org/grpc v1.65.0 @@ -72,74 +72,152 @@ require ( sigs.k8s.io/yaml v1.4.0 ) +require helm.sh/helm/v3 v3.16.2 + require ( cel.dev/expr v0.15.0 // 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/semver/v3 v3.3.0 // 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.3.0 // indirect github.com/census-instrumentation/opencensus-proto v0.4.1 // 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-20240423153145-555b57ec207b // 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.4 // 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-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/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.9 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // 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/onsi/gomega v1.33.1 // 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/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/common v0.55.0 // indirect github.com/prometheus/procfs v0.15.1 // 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.24.0 // indirect + golang.org/x/crypto v0.27.0 // indirect golang.org/x/net v0.26.0 // indirect golang.org/x/oauth2 v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect + golang.org/x/term v0.24.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // 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/apiserver v0.31.1 // indirect + k8s.io/cli-runtime v0.31.1 // indirect + k8s.io/component-base v0.31.1 // 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 047800277..7e8ef8b29 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,37 @@ cel.dev/expr v0.15.0 h1:O1jzfJCQBfL5BFoYktaxwIhuttaQPsVWerH9/EEKx0w= cel.dev/expr v0.15.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= +dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +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/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/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/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/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/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= @@ -16,8 +48,22 @@ github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e h1:Xg+hGrY2 github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e/go.mod h1:mq7Shfa/CaixoDxiyAAc5jZ6CVBAyPaNQCGS7mkj4Ho= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/beorn7/perks 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/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +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= @@ -25,20 +71,39 @@ github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEe github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= 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.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.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-20240423153145-555b57ec207b h1:ga8SEFjZ60pxLcmhnThWgvH2wg8376yUJmPhEH4H3kw= github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b/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-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/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= 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.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= @@ -46,12 +111,46 @@ 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/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.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI= github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +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.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/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.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= @@ -62,8 +161,18 @@ 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-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +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-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= @@ -80,22 +189,48 @@ 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/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.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +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/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= 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/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.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.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +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 v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= 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.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.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= @@ -104,31 +239,59 @@ 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-20240525223248-4bfdf5a9a2af h1:kmjWCqn2qkEml422C2Rrd27c3VGxi6a/6HNq8QmHRKM= github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= +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.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +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/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-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/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/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI= +github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +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.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 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/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.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +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/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/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/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= @@ -136,51 +299,111 @@ 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/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.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.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.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-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/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM= +github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk= +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-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +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.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/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/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/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/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/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 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.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= @@ -192,11 +415,24 @@ github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99 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.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +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/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/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.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 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= @@ -207,50 +443,109 @@ github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4d 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.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +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= +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/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/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= +go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= +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.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/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 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-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 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.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +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/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +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-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 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.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-20181114220301-adae6a3d119a/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-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-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 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/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= 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/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-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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-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-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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +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-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-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +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/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= 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-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-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-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/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-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -261,14 +556,31 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T 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= +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/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= 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/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/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 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/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.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -276,30 +588,51 @@ gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSP 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/yaml.v2 v2.2.1/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.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-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= k8s.io/api v0.31.1 h1:Xe1hX/fPW3PXYYv8BlozYqw63ytA92snr96zMW9gWTU= k8s.io/api v0.31.1/go.mod h1:sbN1g6eY6XVLeqNsZGLnI5FwVseTrZX7Fv3O26rhAaI= 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/apimachinery v0.31.1 h1:mhcUBbj7KUjaVhyXILglcVjuS4nYXiwC+KKFBgIVy7U= k8s.io/apimachinery v0.31.1/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/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/component-base v0.31.1 h1:UpOepcrX3rQ3ab5NB6g5iP0tvsgJWzxTyAo20sgYSy8= +k8s.io/component-base v0.31.1/go.mod h1:WGeaw7t/kTsqpVTaCoVEtillbqAhF2/JgvO0LDOMa0w= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= 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/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +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/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= 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/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/k8sutil/helm/chart.go b/pkg/util/k8sutil/helm/chart.go new file mode 100644 index 000000000..67461b27d --- /dev/null +++ b/pkg/util/k8sutil/helm/chart.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 ( + "bytes" + "io" + + "helm.sh/helm/v3/pkg/chart" + "helm.sh/helm/v3/pkg/chart/loader" +) + +type Chart []byte + +func (c Chart) Get() (*chart.Chart, error) { + return newChartReaderFromBytes(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/client.go b/pkg/util/k8sutil/helm/client.go new file mode 100644 index 000000000..3dcfc6b8b --- /dev/null +++ b/pkg/util/k8sutil/helm/client.go @@ -0,0 +1,208 @@ +// +// 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 ( + "context" + + "helm.sh/helm/v3/pkg/action" + + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/kclient" + "github.com/arangodb/kube-arangodb/pkg/util/tests" +) + +func NewClient(cfg Configuration) (Client, error) { + if err := cfg.Validate(); err != nil { + return nil, err + } + + var helm action.Configuration + + if err := helm.Init(kclient.NewRESTClientGetter(tests.FakeNamespace, nil, cfg.Client.Config()), cfg.Namespace, "configmap", func(format string, v ...interface{}) { + logger.Debug(format, v...) + }); err != nil { + return nil, err + } + + return &client{ + cfg: cfg, + helm: &helm, + }, nil +} + +type Client interface { + Namespace() string + Client() kclient.Client + + Alive(ctx context.Context) 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]) (*Release, 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 { + cfg Configuration + helm *action.Configuration +} + +func (c client) Namespace() string { + return c.cfg.Namespace +} + +func (c client) Client() kclient.Client { + return c.cfg.Client +} + +func (c client) Status(ctx context.Context, name string, mods ...util.Mod[action.Status]) (*Release, error) { + act := action.NewStatus(c.helm) + + util.ApplyMods(act, mods...) + + result, err := act.Run(name) + if err != nil { + if err.Error() == "release: not found" { + return nil, nil + } + return nil, err + } + + r := fromHelmRelease(result) + + 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 + res.Release = fromHelmRelease(result.Release) + + 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 + } + + r := fromHelmRelease(result) + + 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.Run(chartData, valuesData) + if err != nil { + return nil, err + } + + r := fromHelmRelease(result) + + return &r, nil +} + +func (c client) Upgrade(ctx context.Context, name string, chart Chart, values Values, mods ...util.Mod[action.Upgrade]) (*Release, error) { + act := action.NewUpgrade(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.Run(name, chartData, valuesData) + if err != nil { + return nil, err + } + + r := fromHelmRelease(result) + + return &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 { + releases[id] = fromHelmRelease(result[id]) + } + + return releases, 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..8d436f5f0 --- /dev/null +++ b/pkg/util/k8sutil/helm/client_test.go @@ -0,0 +1,240 @@ +// +// 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 ( + "context" + "testing" + + "github.com/stretchr/testify/require" + "helm.sh/helm/v3/pkg/action" + meta "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/arangodb/kube-arangodb/pkg/util/tests" +) + +func cleanup(t *testing.T, c Client) func() { + t.Run("Cleanup Pre", func(t *testing.T) { + items, err := c.List(context.Background()) + 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()) + 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) { + 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(), example_1_0_0, nil, func(in *action.Install) { + in.ReleaseName = "test" + }) + require.NoError(t, err) + + require.NotNil(t, resp) + }) + + t.Run("Upgrade", func(t *testing.T) { + resp, err := c.Upgrade(context.Background(), "test", example_1_0_0, nil, func(in *action.Upgrade) { + in.Install = true + in.Wait = true + }) + require.NoError(t, err) + + require.NotNil(t, resp) + }) + + 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(), 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(), 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(), 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(), 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(), 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(), 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 := c.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", 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 := c.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..7511e4295 --- /dev/null +++ b/pkg/util/k8sutil/helm/configuration.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" + "github.com/arangodb/kube-arangodb/pkg/util/kclient" +) + +type Configuration struct { + Namespace string + + Client kclient.Client +} + +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.Client == nil { + return errors.Errorf("Namespace cannot be empty") + } + + return nil +} 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/suite/example-1.0.0.tgz b/pkg/util/k8sutil/helm/suite/example-1.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c12100f2b635d307804e91629b3ea140cca5d81f GIT binary patch literal 588 zcmV-S0<--eiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI##kDD+I?lZr_s_t>n(59_~w5NOC>9k4r?t<4wg@h#mt>XCa z6A(0wcI&3Gb|>+@AjO{(+wx~jUop#5T09<5+u(#*IvX8~F}C5n{W8XeU&hva7V<4y zalTwH`HY3j&5F%{jUUQ63S&{v*k8XjOzw>UbMZpj2qhyZLr-Ex5xA!C%H9$NEMVTf zW1TQQdi|G}7G(a-0Jy6Ea6QofifvYt{%--__dPE`ixE`yy@Q!>bM*SRl;tT}GK)AH zdkS3B|8_alKM%Lzr2kuB@c%ywnMClYr)5F@@+o z1TWn`xM4Nys%i=F3SSCk30^_SgrtQ{UAOnQj=i;Y@PTAf|H&Lb*S{rW7r9Etn*vw$ zzupe?zh3ca|Gxi=0Kzo&e^X_iUYEy130iog{FrBoKJP|{Up-lus`>Ns~ilT+N7 zV 0 } + +type Mod[T any] func(in *T) + +func ApplyMods[T any](in *T, mods ...Mod[T]) { + for _, mod := range mods { + mod(in) + } +} From ac108d279cc7e7cb5f0d56ad4ba2be046a88910d Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 18 Oct 2024 09:32:37 +0200 Subject: [PATCH 06/69] [Feature] Helm Client Extension (#1746) --- CHANGELOG.md | 1 + pkg/util/k8sutil/helm/client.go | 275 ++++++++++++++++++++++++--- pkg/util/k8sutil/helm/client_test.go | 44 ++++- pkg/util/k8sutil/helm/types.go | 187 ++++++++++++++++-- pkg/util/k8sutil/helm/values.go | 40 +++- pkg/util/refs.go | 16 ++ pkg/util/tests/kubernetes.go | 47 +++++ pkg/util/tests/kubernetes_test.go | 1 + 8 files changed, 558 insertions(+), 53 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa7dbeb40..29cbfadbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## [master](https://github.com/arangodb/kube-arangodb/tree/master) (N/A) - (Maintenance) Kubernetes 1.31.1 libraries - (Feature) Helm Client Support +- (Feature) Helm Client Extension ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/pkg/util/k8sutil/helm/client.go b/pkg/util/k8sutil/helm/client.go index 3dcfc6b8b..ab9cbaa0a 100644 --- a/pkg/util/k8sutil/helm/client.go +++ b/pkg/util/k8sutil/helm/client.go @@ -22,8 +22,20 @@ 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/kclient" @@ -43,9 +55,16 @@ func NewClient(cfg Configuration) (Client, error) { return nil, err } + dClient, err := discovery.NewDiscoveryClientForConfig(cfg.Client.Config()) + if err != nil { + return nil, err + } + return &client{ - cfg: cfg, - helm: &helm, + cfg: cfg, + helm: &helm, + discovery: memory.NewMemCacheClient(dClient), + restClients: map[schema.GroupVersion]rest.Interface{}, }, nil } @@ -55,30 +74,45 @@ type Client interface { 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]) (*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 { +func (c *client) Namespace() string { return c.cfg.Namespace } -func (c client) Client() kclient.Client { +func (c *client) Client() kclient.Client { return c.cfg.Client } -func (c client) Status(ctx context.Context, name string, mods ...util.Mod[action.Status]) (*Release, error) { +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) @@ -89,12 +123,14 @@ func (c client) Status(ctx context.Context, name string, mods ...util.Mod[action return nil, err } - r := fromHelmRelease(result) - - return &r, nil + 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) { +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...) @@ -107,12 +143,17 @@ func (c client) Uninstall(ctx context.Context, name string, mods ...util.Mod[act var res UninstallRelease res.Info = result.Info - res.Release = fromHelmRelease(result.Release) + + 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) { +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...) @@ -122,12 +163,14 @@ func (c client) Test(ctx context.Context, name string, mods ...util.Mod[action.R return nil, err } - r := fromHelmRelease(result) - - return &r, nil + 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) { +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...) @@ -147,16 +190,23 @@ func (c client) Install(ctx context.Context, chart Chart, values Values, mods .. return nil, err } - r := fromHelmRelease(result) - - return &r, nil + 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]) (*Release, error) { +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 @@ -167,17 +217,41 @@ func (c client) Upgrade(ctx context.Context, name string, chart Chart, values Va return nil, err } + if release != nil { + if meta := chartData.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.Run(name, chartData, valuesData) if err != nil { return nil, err } - r := fromHelmRelease(result) - - return &r, nil + 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 { +func (c *client) Alive(ctx context.Context) error { act := action.NewList(c.helm) _, err := act.Run() @@ -188,7 +262,7 @@ func (c client) Alive(ctx context.Context) error { return nil } -func (c client) List(ctx context.Context, mods ...util.Mod[action.List]) ([]Release, error) { +func (c *client) List(ctx context.Context, mods ...util.Mod[action.List]) ([]Release, error) { act := action.NewList(c.helm) util.ApplyMods(act, mods...) @@ -201,8 +275,157 @@ func (c client) List(ctx context.Context, mods ...util.Mod[action.List]) ([]Rele releases := make([]Release, len(result)) for id := range result { - releases[id] = fromHelmRelease(result[id]) + + 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.Client.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 index 8d436f5f0..546fead80 100644 --- a/pkg/util/k8sutil/helm/client_test.go +++ b/pkg/util/k8sutil/helm/client_test.go @@ -26,6 +26,7 @@ import ( "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" @@ -33,7 +34,10 @@ import ( func cleanup(t *testing.T, c Client) func() { t.Run("Cleanup Pre", func(t *testing.T) { - items, err := c.List(context.Background()) + 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 { @@ -46,7 +50,10 @@ func cleanup(t *testing.T, c Client) func() { return func() { t.Run("Cleanup Post", func(t *testing.T) { - items, err := c.List(context.Background()) + 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 { @@ -82,14 +89,37 @@ func Test_Connection(t *testing.T) { require.NotNil(t, resp) }) - t.Run("Upgrade", func(t *testing.T) { - resp, err := c.Upgrade(context.Background(), "test", example_1_0_0, nil, func(in *action.Upgrade) { - in.Install = true - in.Wait = true - }) + t.Run("Upgrade With No change", func(t *testing.T) { + resp, err := c.Upgrade(context.Background(), "test", 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", 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.Logf(string(d.GetUID())) }) t.Run("Test", func(t *testing.T) { diff --git a/pkg/util/k8sutil/helm/types.go b/pkg/util/k8sutil/helm/types.go index b2bf81cf8..887096da7 100644 --- a/pkg/util/k8sutil/helm/types.go +++ b/pkg/util/k8sutil/helm/types.go @@ -21,51 +21,165 @@ 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 { +func fromHelmRelease(in *release.Release) (Release, error) { var r Release - if in != nil { - r.Name = in.Name - r.Version = in.Version - r.Namespace = in.Namespace - r.Labels = in.Labels + 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 +} - r.Info = fromHelmReleaseInfo(in.Info) +func fromHelmReleaseChartMetadata(in *chart.Metadata) *ReleaseChartMetadata { + if in == nil { + return nil } - return r + var r ReleaseChartMetadata + + r.Version = in.Version + + return &r } -func fromHelmReleaseInfo(in *release.Info) ReleaseInfo { +func fromHelmReleaseInfo(in *release.Info) (ReleaseInfo, error) { var r ReleaseInfo - if in != nil { - 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 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 + return r, nil } type Release struct { Name string - Info ReleaseInfo + 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 @@ -73,9 +187,46 @@ type ReleaseInfo struct { 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 index 1b9645144..9e05ac958 100644 --- a/pkg/util/k8sutil/helm/values.go +++ b/pkg/util/k8sutil/helm/values.go @@ -20,7 +20,11 @@ package helm -import "encoding/json" +import ( + "encoding/json" + + "github.com/arangodb/kube-arangodb/pkg/util" +) func NewValues(in any) (Values, error) { data, err := json.Marshal(in) @@ -33,9 +37,41 @@ func NewValues(in any) (Values, error) { type Values []byte +func (v Values) Equals(other Values) bool { + a, err := v.Marshal() + if err != nil { + return false + } + + if len(a) == 0 { + a = nil + } + + ad, err := json.Marshal(a) + if err != nil { + return false + } + + b, err := other.Marshal() + if err != nil { + return false + } + + if len(b) == 0 { + b = nil + } + + bd, err := json.Marshal(b) + if err != nil { + return false + } + + return util.SHA256(ad) == util.SHA256(bd) +} + func (v Values) Marshal() (map[string]interface{}, error) { if len(v) == 0 { - return nil, nil + return map[string]interface{}{}, nil } var q map[string]interface{} diff --git a/pkg/util/refs.go b/pkg/util/refs.go index 56b0aa583..f32cac7ce 100644 --- a/pkg/util/refs.go +++ b/pkg/util/refs.go @@ -21,6 +21,7 @@ package util import ( + "encoding/json" "reflect" ) @@ -172,3 +173,18 @@ func ApplyMods[T any](in *T, mods ...Mod[T]) { mod(in) } } + +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 +} diff --git a/pkg/util/tests/kubernetes.go b/pkg/util/tests/kubernetes.go index 6eae5c44a..ba3d8d203 100644 --- a/pkg/util/tests/kubernetes.go +++ b/pkg/util/tests/kubernetes.go @@ -185,6 +185,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) @@ -386,6 +392,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) @@ -572,6 +584,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) @@ -868,6 +885,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) @@ -1238,6 +1270,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() @@ -1397,6 +1437,7 @@ func NewMetaObject[T meta.Object](t *testing.T, namespace, name string, mods ... } obj.SetName(name) obj.SetUID(uuid.NewUUID()) + obj.SetCreationTimestamp(meta.Now()) SetMetaBasedOnType(t, obj) @@ -1494,6 +1535,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, diff --git a/pkg/util/tests/kubernetes_test.go b/pkg/util/tests/kubernetes_test.go index ffadeb629..82e5b7bed 100644 --- a/pkg/util/tests/kubernetes_test.go +++ b/pkg/util/tests/kubernetes_test.go @@ -84,6 +84,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) From 06d1e7c76e202740a7d73368e4ab9e411b7198d1 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 18 Oct 2024 14:22:24 +0200 Subject: [PATCH 07/69] [Maintenance] Improvie Pipeline (#1747) --- .circleci/continue_config.yml | 39 +++++++++++++++++++++++------------ .gitignore | 5 ++++- Makefile | 19 ++++++++--------- scripts/cache.sh | 24 +++++++++++++++++++++ 4 files changed, 63 insertions(+), 24 deletions(-) create mode 100644 scripts/cache.sh diff --git a/.circleci/continue_config.yml b/.circleci/continue_config.yml index 0b58819e3..4cae94177 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.8 aws_auth: oidc_role_arn: arn:aws:iam::889010145541:role/circleci-project-dev-kube-arangodb machine-executor: @@ -27,21 +27,31 @@ executors: jobs: check-code: executor: golang-executor + environment: + GOCACHE: "/tmp/go/cache" + GOPATH: "/tmp/go/path" + GO111MODULES: off + KEEP_GOPATH: 1 steps: - 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 +81,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 +96,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/.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/Makefile b/Makefile index b4c7f8bdf..2c0837535 100644 --- a/Makefile +++ b/Makefile @@ -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,11 +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) bash "${ROOTDIR}/scripts/codegen.sh" "${ROOTDIR}" + bash "${ROOTDIR}/scripts/codegen.sh" "${ROOTDIR}" dashboard/assets.go: cd $(DASHBOARDDIR) && docker build -t $(DASHBOARDBUILDIMAGE) -f Dockerfile.build $(DASHBOARDDIR) @@ -792,7 +791,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: 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 From cd4f7a3cd0d6f833619365858cbea965c9fb3ed8 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 18 Oct 2024 14:48:34 +0200 Subject: [PATCH 08/69] [Feature] [Integration] SchedulerV2 Definition (#1745) --- CHANGELOG.md | 1 + .../scheduler/v2/definition/consts.go | 25 + .../scheduler/v2/definition/definition.pb.go | 214 +++ .../scheduler/v2/definition/definition.proto | 61 + .../v2/definition/definition_grpc.pb.go | 526 ++++++ .../scheduler/v2/definition/helm.pb.go | 1642 +++++++++++++++++ .../scheduler/v2/definition/helm.proto | 186 ++ .../scheduler/v2/definition/helpers.go | 178 ++ .../scheduler/v2/definition/kubernetes.pb.go | 721 ++++++++ .../scheduler/v2/definition/kubernetes.proto | 93 + .../scheduler/v2/definition/release.pb.go | 830 +++++++++ .../scheduler/v2/definition/release.proto | 117 ++ 12 files changed, 4594 insertions(+) create mode 100644 integrations/scheduler/v2/definition/consts.go create mode 100644 integrations/scheduler/v2/definition/definition.pb.go create mode 100644 integrations/scheduler/v2/definition/definition.proto create mode 100644 integrations/scheduler/v2/definition/definition_grpc.pb.go create mode 100644 integrations/scheduler/v2/definition/helm.pb.go create mode 100644 integrations/scheduler/v2/definition/helm.proto create mode 100644 integrations/scheduler/v2/definition/helpers.go create mode 100644 integrations/scheduler/v2/definition/kubernetes.pb.go create mode 100644 integrations/scheduler/v2/definition/kubernetes.proto create mode 100644 integrations/scheduler/v2/definition/release.pb.go create mode 100644 integrations/scheduler/v2/definition/release.proto diff --git a/CHANGELOG.md b/CHANGELOG.md index 29cbfadbc..230c6ce3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - (Maintenance) Kubernetes 1.31.1 libraries - (Feature) Helm Client Support - (Feature) Helm Client Extension +- (Feature) (Integration) SchedulerV2 Definition ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/integrations/scheduler/v2/definition/consts.go b/integrations/scheduler/v2/definition/consts.go new file mode 100644 index 000000000..b094398b4 --- /dev/null +++ b/integrations/scheduler/v2/definition/consts.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 definition + +const ( + Name = "scheduler.v2" +) diff --git a/integrations/scheduler/v2/definition/definition.pb.go b/integrations/scheduler/v2/definition/definition.pb.go new file mode 100644 index 000000000..c97b551d4 --- /dev/null +++ b/integrations/scheduler/v2/definition/definition.pb.go @@ -0,0 +1,214 @@ +// +// 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, 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, 0xb5, 0x08, 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, 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 + (*SchedulerV2ListResponse)(nil), // 11: scheduler.SchedulerV2ListResponse + (*SchedulerV2StatusResponse)(nil), // 12: scheduler.SchedulerV2StatusResponse + (*SchedulerV2StatusObjectsResponse)(nil), // 13: scheduler.SchedulerV2StatusObjectsResponse + (*SchedulerV2InstallResponse)(nil), // 14: scheduler.SchedulerV2InstallResponse + (*SchedulerV2UpgradeResponse)(nil), // 15: scheduler.SchedulerV2UpgradeResponse + (*SchedulerV2UninstallResponse)(nil), // 16: scheduler.SchedulerV2UninstallResponse + (*SchedulerV2TestResponse)(nil), // 17: scheduler.SchedulerV2TestResponse + (*SchedulerV2DiscoverAPIResourcesResponse)(nil), // 18: scheduler.SchedulerV2DiscoverAPIResourcesResponse + (*SchedulerV2DiscoverAPIResourceResponse)(nil), // 19: scheduler.SchedulerV2DiscoverAPIResourceResponse + (*SchedulerV2KubernetesGetResponse)(nil), // 20: scheduler.SchedulerV2KubernetesGetResponse +} +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 + 0, // 12: scheduler.SchedulerV2.InvalidateCache:output_type -> shared.Empty + 0, // 13: scheduler.SchedulerV2.Alive:output_type -> shared.Empty + 11, // 14: scheduler.SchedulerV2.List:output_type -> scheduler.SchedulerV2ListResponse + 12, // 15: scheduler.SchedulerV2.Status:output_type -> scheduler.SchedulerV2StatusResponse + 13, // 16: scheduler.SchedulerV2.StatusObjects:output_type -> scheduler.SchedulerV2StatusObjectsResponse + 14, // 17: scheduler.SchedulerV2.Install:output_type -> scheduler.SchedulerV2InstallResponse + 15, // 18: scheduler.SchedulerV2.Upgrade:output_type -> scheduler.SchedulerV2UpgradeResponse + 16, // 19: scheduler.SchedulerV2.Uninstall:output_type -> scheduler.SchedulerV2UninstallResponse + 17, // 20: scheduler.SchedulerV2.Test:output_type -> scheduler.SchedulerV2TestResponse + 18, // 21: scheduler.SchedulerV2.DiscoverAPIResources:output_type -> scheduler.SchedulerV2DiscoverAPIResourcesResponse + 19, // 22: scheduler.SchedulerV2.DiscoverAPIResource:output_type -> scheduler.SchedulerV2DiscoverAPIResourceResponse + 20, // 23: scheduler.SchedulerV2.KubernetesGet:output_type -> scheduler.SchedulerV2KubernetesGetResponse + 12, // [12:24] is the sub-list for method output_type + 0, // [0:12] 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_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..284d1bf51 --- /dev/null +++ b/integrations/scheduler/v2/definition/definition.proto @@ -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 by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES 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/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); +} + 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..75805fdf8 --- /dev/null +++ b/integrations/scheduler/v2/definition/definition_grpc.pb.go @@ -0,0 +1,526 @@ +// 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) +} + +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 +} + +// 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) + 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) 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) +} + +// 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, + }, + }, + Streams: []grpc.StreamDesc{}, + 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..195b36596 --- /dev/null +++ b/integrations/scheduler/v2/definition/helm.pb.go @@ -0,0 +1,1642 @@ +// +// 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"` +} + +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 +} + +// 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"` +} + +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 +} + +// 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 +} + +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} +} + +// 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, + 0xae, 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, 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, + 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, 0xae, 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, 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, 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, 0x24, 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, 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[10].OneofWrappers = []interface{}{} + file_integrations_scheduler_v2_definition_helm_proto_msgTypes[11].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[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..3b1aad2dc --- /dev/null +++ b/integrations/scheduler/v2/definition/helm.proto @@ -0,0 +1,186 @@ +// +// 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; +} + +// 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; +} + +// 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 { +} + +// 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..4bac86284 --- /dev/null +++ b/integrations/scheduler/v2/definition/helpers.go @@ -0,0 +1,178 @@ +// +// 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 + +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 + }) + } + + 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 + }) + } + + 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] + + 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..c1bee3050 --- /dev/null +++ b/integrations/scheduler/v2/definition/kubernetes.pb.go @@ -0,0 +1,721 @@ +// +// 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 +} + +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, 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, 7) +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 + (*SchedulerV2ReleaseInfoResource)(nil), // 7: scheduler.SchedulerV2ReleaseInfoResource + (*SchedulerV2ReleaseInfoResourceObject)(nil), // 8: 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 + 7, // 2: scheduler.SchedulerV2KubernetesGetRequest.resources:type_name -> scheduler.SchedulerV2ReleaseInfoResource + 8, // 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[3].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: 7, + 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..34248f77e --- /dev/null +++ b/integrations/scheduler/v2/definition/kubernetes.proto @@ -0,0 +1,93 @@ +// +// 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; +} \ 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 From ac0a2567353477022f744559d1dc3ba716e46213 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 18 Oct 2024 15:16:20 +0200 Subject: [PATCH 09/69] [Maintenance] Lint Protos (#1748) --- CHANGELOG.md | 1 + Makefile | 2 +- .../config/v1/definition/config.pb.go | 75 +++++++++---------- .../config/v1/definition/config.proto | 7 +- .../config/v1/definition/config_grpc.pb.go | 6 ++ integrations/config/v1/impl_darwin.go | 4 +- integrations/config/v1/impl_linux.go | 4 +- integrations/pong/v1/definition/pong.proto | 1 + .../pong/v1/definition/pong_grpc.pb.go | 2 + .../scheduler/v1/definition/common.proto | 4 +- .../scheduler/v1/definition/cronjob.pb.go | 14 ++-- .../scheduler/v1/definition/cronjob.proto | 2 +- .../scheduler/v1/definition/definition.proto | 4 +- .../scheduler/v1/definition/deployment.proto | 2 +- 14 files changed, 70 insertions(+), 58 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 230c6ce3f..d9aa5826b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - (Feature) Helm Client Support - (Feature) Helm Client Extension - (Feature) (Integration) SchedulerV2 Definition +- (Maintenance) Proto Lint ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/Makefile b/Makefile index 2c0837535..f987cc762 100644 --- a/Makefile +++ b/Makefile @@ -939,6 +939,6 @@ sync-charts: 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 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/pong/v1/definition/pong.proto b/integrations/pong/v1/definition/pong.proto index ecd4505f6..e6a1bf7aa 100644 --- a/integrations/pong/v1/definition/pong.proto +++ b/integrations/pong/v1/definition/pong.proto @@ -30,6 +30,7 @@ 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); } diff --git a/integrations/pong/v1/definition/pong_grpc.pb.go b/integrations/pong/v1/definition/pong_grpc.pb.go index 9e3a04386..6d418f034 100644 --- a/integrations/pong/v1/definition/pong_grpc.pb.go +++ b/integrations/pong/v1/definition/pong_grpc.pb.go @@ -23,6 +23,7 @@ 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) } @@ -47,6 +48,7 @@ func (c *pongV1Client) Ping(ctx context.Context, in *definition.Empty, opts ...g // All implementations must embed UnimplementedPongV1Server // for forward compatibility type PongV1Server interface { + // Sends ping to the server Ping(context.Context, *definition.Empty) (*PongV1PingResponse, error) mustEmbedUnimplementedPongV1Server() } 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; From 846b6218af62c9f4c669f6348a825fe377dce147 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 18 Oct 2024 17:19:57 +0200 Subject: [PATCH 10/69] [Feature] [Integration] SchedulerV2 (#1744) --- CHANGELOG.md | 1 + integrations/scheduler/v2/configuration.go | 59 ++++ integrations/scheduler/v2/consts.go | 25 ++ integrations/scheduler/v2/helm.go | 222 ++++++++++++++ integrations/scheduler/v2/implementation.go | 76 +++++ .../scheduler/v2/implementation_test.go | 277 ++++++++++++++++++ integrations/scheduler/v2/kubernetes.go | 102 +++++++ integrations/scheduler/v2/logger.go | 25 ++ integrations/scheduler/v2/suite.go | 128 ++++++++ .../scheduler/v2/suite/example-1.0.0.tgz | Bin 0 -> 588 bytes integrations/scheduler/v2/suite_test.go | 82 ++++++ pkg/deployment/resources/arango_profiles.go | 8 +- pkg/integrations/scheduler_v2.go | 81 +++++ pkg/integrations/sidecar/integration.go | 10 +- .../sidecar/integration.scheduler.v2.go | 73 +++++ pkg/util/constants/profiles.go | 3 + 16 files changed, 1169 insertions(+), 3 deletions(-) create mode 100644 integrations/scheduler/v2/configuration.go create mode 100644 integrations/scheduler/v2/consts.go create mode 100644 integrations/scheduler/v2/helm.go create mode 100644 integrations/scheduler/v2/implementation.go create mode 100644 integrations/scheduler/v2/implementation_test.go create mode 100644 integrations/scheduler/v2/kubernetes.go create mode 100644 integrations/scheduler/v2/logger.go create mode 100644 integrations/scheduler/v2/suite.go create mode 100644 integrations/scheduler/v2/suite/example-1.0.0.tgz create mode 100644 integrations/scheduler/v2/suite_test.go create mode 100644 pkg/integrations/scheduler_v2.go create mode 100644 pkg/integrations/sidecar/integration.scheduler.v2.go diff --git a/CHANGELOG.md b/CHANGELOG.md index d9aa5826b..f8566290b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - (Feature) Helm Client Extension - (Feature) (Integration) SchedulerV2 Definition - (Maintenance) Proto Lint +- (Feature) (Integration) SchedulerV2 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/integrations/scheduler/v2/configuration.go b/integrations/scheduler/v2/configuration.go new file mode 100644 index 000000000..9c278c829 --- /dev/null +++ b/integrations/scheduler/v2/configuration.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 v2 + +import "github.com/pkg/errors" + +type Mod func(c Configuration) Configuration + +func NewConfiguration() Configuration { + return Configuration{ + Namespace: "default", + } +} + +type Configuration struct { + Namespace string + + Deployment string +} + +func (c Configuration) Validate() error { + if c.Deployment == "" { + return errors.Errorf("Invalid empty name of deployment") + } + + 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/integrations/scheduler/v2/consts.go b/integrations/scheduler/v2/consts.go new file mode 100644 index 000000000..04f4f5840 --- /dev/null +++ b/integrations/scheduler/v2/consts.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 + +const ( + LabelArangoDBDeploymentName = "deployment.arangodb.com/name" +) 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..149466ed3 --- /dev/null +++ b/integrations/scheduler/v2/implementation.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 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/svc" +) + +var _ pbSchedulerV2.SchedulerV2Server = &implementation{} +var _ svc.Handler = &implementation{} + +func New(client helm.Client, cfg Configuration) (svc.Handler, error) { + return newInternal(client, cfg) +} + +func newInternal(client helm.Client, c Configuration) (*implementation, error) { + if err := c.Validate(); err != nil { + return nil, err + } + + return &implementation{ + cfg: c, + client: client, + }, nil +} + +type implementation struct { + cfg Configuration + + 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..db4f83679 --- /dev/null +++ b/integrations/scheduler/v2/implementation_test.go @@ -0,0 +1,277 @@ +// +// 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" + "testing" + + "github.com/stretchr/testify/require" + "helm.sh/helm/v3/pkg/action" + + "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/tests" +) + +func cleanup(t *testing.T, 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) + }) + } + }) + + 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_Implementation(t *testing.T) { + ctx, c := context.WithCancel(context.Background()) + defer c() + + scheduler, h := Client(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, 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(), &definition.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(), &definition.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(), &definition.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(), &definition.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(), &definition.SchedulerV2ListRequest{}) + require.NoError(t, err) + + require.Len(t, status.GetReleases(), 0) + }) + + t.Run("Install", func(t *testing.T) { + status, err := scheduler.Install(context.Background(), &definition.SchedulerV2InstallRequest{ + Name: "test", + Values: nil, + Chart: 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(), &definition.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(), 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(), &definition.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(), &definition.SchedulerV2InstallRequest{ + Name: "test-x", + Values: nil, + Chart: example_1_0_0, + Options: &definition.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(), 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(), &definition.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(), &definition.SchedulerV2ListRequest{ + Options: &definition.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(), &definition.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(), &definition.SchedulerV2UpgradeRequest{ + Name: "test", + Values: values, + Chart: 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("Check - Version 2", func(t *testing.T) { + status, err := scheduler.Status(context.Background(), &definition.SchedulerV2StatusRequest{ + Name: "test", + }) + require.NoError(t, err) + + require.NotNil(t, status.GetRelease()) + + require.EqualValues(t, 2, 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(), &definition.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(), &definition.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..cb49ed026 --- /dev/null +++ b/integrations/scheduler/v2/kubernetes.go @@ -0,0 +1,102 @@ +// +// 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" + "k8s.io/apimachinery/pkg/runtime/schema" + + pbSchedulerV2 "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/helm" +) + +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, status.Errorf(codes.Internal, "Unable to run action: KubernetesGet: %s", err.Error()) + } + + return &pbSchedulerV2.SchedulerV2KubernetesGetResponse{ + Objects: newReleaseInfoResourceObjectsFromResourceObjects(resp), + }, 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/example-1.0.0.tgz b/integrations/scheduler/v2/suite/example-1.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c12100f2b635d307804e91629b3ea140cca5d81f GIT binary patch literal 588 zcmV-S0<--eiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI##kDD+I?lZr_s_t>n(59_~w5NOC>9k4r?t<4wg@h#mt>XCa z6A(0wcI&3Gb|>+@AjO{(+wx~jUop#5T09<5+u(#*IvX8~F}C5n{W8XeU&hva7V<4y zalTwH`HY3j&5F%{jUUQ63S&{v*k8XjOzw>UbMZpj2qhyZLr-Ex5xA!C%H9$NEMVTf zW1TQQdi|G}7G(a-0Jy6Ea6QofifvYt{%--__dPE`ixE`yy@Q!>bM*SRl;tT}GK)AH zdkS3B|8_alKM%Lzr2kuB@c%ywnMClYr)5F@@+o z1TWn`xM4Nys%i=F3SSCk30^_SgrtQ{UAOnQj=i;Y@PTAf|H&Lb*S{rW7r9Etn*vw$ zzupe?zh3ca|Gxi=0Kzo&e^X_iUYEy130iog{FrBoKJP|{Up-lus`>Ns~ilT+N7 zV Date: Wed, 23 Oct 2024 11:42:32 +0200 Subject: [PATCH 11/69] [Feature] [Integration] Basic Envs (#1749) --- CHANGELOG.md | 1 + docs/integration-sidecar.md | 28 ++++++++++++ pkg/deployment/resources/arango_profiles.go | 50 +++++++++++++++++++-- 3 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 docs/integration-sidecar.md diff --git a/CHANGELOG.md b/CHANGELOG.md index f8566290b..f8b164aa8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - (Feature) (Integration) SchedulerV2 Definition - (Maintenance) Proto Lint - (Feature) (Integration) SchedulerV2 +- (Feature) (Integration) Basic Envs ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/docs/integration-sidecar.md b/docs/integration-sidecar.md new file mode 100644 index 000000000..671483eed --- /dev/null +++ b/docs/integration-sidecar.md @@ -0,0 +1,28 @@ +# Integration + +## Profile + +## 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) + +### Envs + +#### ARANGO_DEPLOYMENT_NAME + +ArangoDeployment name. + +Example: `deployment` + +#### ARANGO_DEPLOYMENT_ENDPOINT + +HTTP/S Endpoint of the ArangoDeployment Internal Service. + +Example: `https://deployment.default.svc:8529` diff --git a/pkg/deployment/resources/arango_profiles.go b/pkg/deployment/resources/arango_profiles.go index 51b358f66..4328dc427 100644 --- a/pkg/deployment/resources/arango_profiles.go +++ b/pkg/deployment/resources/arango_profiles.go @@ -25,11 +25,15 @@ import ( "fmt" "time" + core "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/equality" meta "k8s.io/apimachinery/pkg/apis/meta/v1" + api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" 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" + 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" @@ -109,7 +113,7 @@ func (r *Resources) EnsureArangoProfiles(ctx context.Context, cachedStatus inspe integration, err := sidecar.NewIntegration(&schedulerContainerResourcesApi.Image{ Image: util.NewType(r.context.GetOperatorImage()), - }, spec.Integration.GetSidecar(), r.arangoDeploymentProfileTemplate()) + }, spec.Integration.GetSidecar(), r.arangoDeploymentProfileTemplate(cachedStatus)) if err != nil { return "", nil, err } @@ -144,8 +148,48 @@ func (r *Resources) EnsureArangoProfiles(ctx context.Context, cachedStatus inspe return reconcileRequired.Reconcile(ctx) } -func (r *Resources) arangoDeploymentProfileTemplate() *schedulerApi.ProfileTemplate { - return nil +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() + + return &schedulerApi.ProfileTemplate{ + Container: &schedulerApi.ProfileContainerTemplate{ + All: &schedulerContainerApi.Generic{ + Environments: &schedulerContainerResourcesApi.Environments{ + Env: []core.EnvVar{ + { + Name: "ARANGO_DEPLOYMENT_NAME", + Value: deploymentName, + }, + { + Name: "ARANGO_DEPLOYMENT_ENDPOINT", + Value: r.arangoDeploymentInternalAddress(cachedStatus), + }, + }, + }, + }, + }, + } } func (r *Resources) ensureArangoProfilesFactory(ctx context.Context, cachedStatus inspectorInterface.Inspector, expected ...func() (string, *schedulerApi.ArangoProfile, error)) (bool, error) { From 87d14d510bc66bd39b108727cec1dd97ea40946a Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Thu, 31 Oct 2024 13:05:01 +0100 Subject: [PATCH 12/69] [Maintenance] Inspector Generics (#1752) --- CHANGELOG.md | 1 + README.md | 2 +- cmd/admin.go | 6 +- docs/cli/arangodb_operator.md | 2 +- docs/cli/arangodb_operator_integration.md | 5 + pkg/api/jwt.go | 9 +- ...graphanalyticsengine.schema.generated.yaml | 38 ++ pkg/crd/crds/apps-job.schema.generated.yaml | 75 ++- .../database-deployment.schema.generated.yaml | 597 ++++++++++++++++++ .../database-member.schema.generated.yaml | 124 +++- .../crds/ml-extension.schema.generated.yaml | 443 +++++++++++++ .../crds/ml-job-batch.schema.generated.yaml | 75 ++- .../crds/ml-job-cron.schema.generated.yaml | 75 ++- pkg/crd/crds/ml-storage.schema.generated.yaml | 11 + .../scheduler-batchjob.schema.generated.yaml | 75 ++- .../scheduler-cronjob.schema.generated.yaml | 75 ++- ...scheduler-deployment.schema.generated.yaml | 60 +- .../crds/scheduler-pod.schema.generated.yaml | 60 +- .../scheduler-profile.schema.generated.yaml | 58 ++ .../generators/kubernetes/lister.go | 53 +- pkg/deployment/cleanup.go | 7 +- pkg/deployment/context_impl.go | 24 +- pkg/deployment/deployment_pod_tls_sni_test.go | 4 +- pkg/deployment/deployment_run_test.go | 3 +- pkg/deployment/pod/encryption.go | 4 +- pkg/deployment/reconcile/action_pvc_resize.go | 3 +- .../reconcile/condition_member_recreation.go | 6 +- .../reconcile/plan_builder_storage.go | 5 +- pkg/deployment/reconcile/plan_builder_test.go | 28 +- pkg/deployment/reconcile/utils_timezone.go | 8 +- .../resources/certificates_client_auth.go | 5 +- pkg/deployment/resources/certificates_tls.go | 7 +- .../resources/config_map_gateway.go | 4 +- .../resources/config_maps_member.go | 4 +- pkg/deployment/resources/inspector/acs.go | 104 +-- pkg/deployment/resources/inspector/acs_gvk.go | 10 +- pkg/deployment/resources/inspector/acs_mod.go | 5 +- pkg/deployment/resources/inspector/acs_v1.go | 138 ---- pkg/deployment/resources/inspector/am.go | 100 +-- pkg/deployment/resources/inspector/am_gvk.go | 10 +- pkg/deployment/resources/inspector/am_mod.go | 5 +- pkg/deployment/resources/inspector/am_v1.go | 126 ---- pkg/deployment/resources/inspector/ap.go | 104 +-- pkg/deployment/resources/inspector/ap_gvk.go | 8 - pkg/deployment/resources/inspector/ap_mod.go | 3 +- .../resources/inspector/ap_v1beta1.go | 138 ---- pkg/deployment/resources/inspector/ar.go | 104 +-- pkg/deployment/resources/inspector/ar_gvk.go | 8 - pkg/deployment/resources/inspector/ar_mod.go | 3 +- .../resources/inspector/ar_v1alpha1.go | 138 ---- pkg/deployment/resources/inspector/at.go | 104 +-- pkg/deployment/resources/inspector/at_gvk.go | 10 +- pkg/deployment/resources/inspector/at_mod.go | 5 +- pkg/deployment/resources/inspector/at_v1.go | 138 ---- .../resources/inspector/configmaps.go | 99 +-- .../resources/inspector/configmaps_gvk.go | 8 - .../resources/inspector/configmaps_mod.go | 3 +- .../resources/inspector/configmaps_v1.go | 118 ---- .../resources/inspector/endpoints.go | 103 +-- .../resources/inspector/endpoints_gvk.go | 10 +- .../resources/inspector/endpoints_mod.go | 5 +- .../resources/inspector/endpoints_v1.go | 138 ---- pkg/deployment/resources/inspector/generic.go | 154 +++++ .../resources/inspector/inspector.go | 6 +- pkg/deployment/resources/inspector/nodes.go | 103 +-- .../resources/inspector/nodes_gvk.go | 10 +- .../resources/inspector/nodes_v1.go | 122 ---- pkg/deployment/resources/inspector/pdbs.go | 106 +--- .../resources/inspector/pdbs_gvk.go | 10 +- .../resources/inspector/pdbs_mod.go | 5 +- pkg/deployment/resources/inspector/pdbs_v1.go | 122 ---- pkg/deployment/resources/inspector/pods.go | 100 +-- .../resources/inspector/pods_gvk.go | 10 +- .../resources/inspector/pods_mod.go | 5 +- pkg/deployment/resources/inspector/pods_v1.go | 119 ---- pkg/deployment/resources/inspector/pvcs.go | 99 +-- .../resources/inspector/pvcs_gvk.go | 10 +- .../resources/inspector/pvcs_mod.go | 5 +- pkg/deployment/resources/inspector/pvcs_v1.go | 118 ---- pkg/deployment/resources/inspector/pvs.go | 103 +-- pkg/deployment/resources/inspector/pvs_gvk.go | 10 +- pkg/deployment/resources/inspector/pvs_v1.go | 122 ---- pkg/deployment/resources/inspector/sa.go | 99 +-- pkg/deployment/resources/inspector/sa_gvk.go | 10 +- pkg/deployment/resources/inspector/sa_mod.go | 5 +- pkg/deployment/resources/inspector/sa_v1.go | 118 ---- pkg/deployment/resources/inspector/secrets.go | 99 +-- .../resources/inspector/secrets_gvk.go | 10 +- .../resources/inspector/secrets_mod.go | 5 +- .../resources/inspector/secrets_v1.go | 118 ---- .../resources/inspector/services.go | 99 +-- .../resources/inspector/services_gvk.go | 10 +- .../resources/inspector/services_mod.go | 5 +- .../resources/inspector/services_v1.go | 109 ---- pkg/deployment/resources/inspector/sm.go | 99 +-- pkg/deployment/resources/inspector/sm_gvk.go | 10 +- pkg/deployment/resources/inspector/sm_mod.go | 5 +- pkg/deployment/resources/inspector/sm_v1.go | 122 ---- pkg/deployment/resources/member_cleanup.go | 7 +- pkg/deployment/resources/pod_cleanup.go | 6 +- pkg/deployment/resources/pod_creator.go | 4 +- pkg/deployment/resources/pod_inspector.go | 4 +- pkg/deployment/resources/pvc_inspector.go | 4 +- pkg/deployment/resources/secrets.go | 24 +- pkg/deployment/resources/services.go | 7 +- pkg/handlers/policy/handler.go | 20 +- pkg/scheduler/profiles.go | 15 +- pkg/storage/pv_inspector.go | 15 +- .../configmap/v1/loader.go => base/base.go} | 21 +- pkg/util/k8sutil/configmaps.go | 4 +- .../definition.go | 19 +- .../generic.go} | 36 +- .../arangoclustersynchronization/v1/loader.go | 53 -- .../arangoclustersynchronization/v1/reader.go | 50 -- .../inspector/arangomember/definition.go | 19 +- .../arangomember/{v1/reader.go => generic.go} | 29 +- .../inspector/arangoprofile/definition.go | 17 +- .../{v1beta1/loader.go => generic.go} | 36 +- .../inspector/arangoprofile/v1beta1/reader.go | 50 -- .../inspector/arangoroute/definition.go | 17 +- .../{v1alpha1/loader.go => generic.go} | 36 +- .../inspector/arangoroute/v1alpha1/reader.go | 50 -- .../inspector/arangotask/definition.go | 19 +- .../v1/loader.go => arangotask/generic.go} | 29 +- .../k8sutil/inspector/arangotask/v1/reader.go | 50 -- .../k8sutil/inspector/configmap/definition.go | 18 +- .../k8sutil/inspector/configmap/generic.go | 44 ++ .../k8sutil/inspector/configmap/v1/reader.go | 48 -- .../k8sutil/inspector/endpoints/definition.go | 20 +- .../k8sutil/inspector/endpoints/generic.go | 44 ++ .../k8sutil/inspector/endpoints/v1/reader.go | 48 -- .../v1/filters.go => generic/inspector.go} | 20 +- .../loader.go => generic/inspector_filter.go} | 44 +- pkg/util/k8sutil/inspector/generic/mod.go | 3 +- pkg/util/k8sutil/inspector/mods/mods.go | 50 +- pkg/util/k8sutil/inspector/node/definition.go | 20 +- .../node/{v1/loader.go => generic.go} | 29 +- pkg/util/k8sutil/inspector/node/v1/reader.go | 38 -- .../inspector/persistentvolume/definition.go | 20 +- .../inspector/persistentvolume/generic.go | 44 ++ .../inspector/persistentvolume/v1/reader.go | 38 -- .../persistentvolumeclaim/definition.go | 20 +- .../persistentvolumeclaim/generic.go | 44 ++ .../persistentvolumeclaim/v1/filters.go | 42 -- .../persistentvolumeclaim/v1/reader.go | 48 -- pkg/util/k8sutil/inspector/pod/definition.go | 20 +- .../v1/loader.go => pod/generic.go} | 29 +- pkg/util/k8sutil/inspector/pod/v1/filters.go | 42 -- pkg/util/k8sutil/inspector/pod/v1/loader.go | 39 -- pkg/util/k8sutil/inspector/pod/v1/reader.go | 47 -- .../poddisruptionbudget/definition.go | 20 +- .../{v1/loader.go => generic.go} | 28 +- .../poddisruptionbudget/v1/reader.go | 48 -- .../k8sutil/inspector/secret/definition.go | 20 +- .../v1/loader.go => secret/generic.go} | 29 +- .../k8sutil/inspector/secret/v1/loader.go | 40 -- .../k8sutil/inspector/secret/v1/reader.go | 48 -- .../k8sutil/inspector/service/definition.go | 20 +- pkg/util/k8sutil/inspector/service/generic.go | 44 ++ .../k8sutil/inspector/service/v1/loader.go | 38 -- .../k8sutil/inspector/service/v1/reader.go | 48 -- .../inspector/serviceaccount/definition.go | 20 +- .../inspector/serviceaccount/generic.go | 44 ++ .../inspector/serviceaccount/v1/loader.go | 38 -- .../inspector/serviceaccount/v1/reader.go | 52 -- .../inspector/servicemonitor/definition.go | 20 +- .../{v1/loader.go => generic.go} | 28 +- .../inspector/servicemonitor/v1/reader.go | 52 -- pkg/util/k8sutil/list.go | 46 -- pkg/util/k8sutil/list/list.go | 79 +++ pkg/util/k8sutil/pods.go | 10 +- pkg/util/k8sutil/pvc.go | 4 +- pkg/util/k8sutil/secrets.go | 34 +- pkg/util/k8sutil/services.go | 10 +- pkg/util/kclient/mod.go | 48 +- pkg/util/list.go | 10 + pkg/util/refs.go | 9 + 177 files changed, 3052 insertions(+), 5298 deletions(-) delete mode 100644 pkg/deployment/resources/inspector/acs_v1.go delete mode 100644 pkg/deployment/resources/inspector/am_v1.go delete mode 100644 pkg/deployment/resources/inspector/ap_v1beta1.go delete mode 100644 pkg/deployment/resources/inspector/ar_v1alpha1.go delete mode 100644 pkg/deployment/resources/inspector/at_v1.go delete mode 100644 pkg/deployment/resources/inspector/configmaps_v1.go delete mode 100644 pkg/deployment/resources/inspector/endpoints_v1.go create mode 100644 pkg/deployment/resources/inspector/generic.go delete mode 100644 pkg/deployment/resources/inspector/nodes_v1.go delete mode 100644 pkg/deployment/resources/inspector/pdbs_v1.go delete mode 100644 pkg/deployment/resources/inspector/pods_v1.go delete mode 100644 pkg/deployment/resources/inspector/pvcs_v1.go delete mode 100644 pkg/deployment/resources/inspector/pvs_v1.go delete mode 100644 pkg/deployment/resources/inspector/sa_v1.go delete mode 100644 pkg/deployment/resources/inspector/secrets_v1.go delete mode 100644 pkg/deployment/resources/inspector/services_v1.go delete mode 100644 pkg/deployment/resources/inspector/sm_v1.go rename pkg/util/k8sutil/{inspector/configmap/v1/loader.go => base/base.go} (71%) rename pkg/util/k8sutil/inspector/{arangotask/v1/loader.go => arangoclustersynchronization/generic.go} (57%) delete mode 100644 pkg/util/k8sutil/inspector/arangoclustersynchronization/v1/loader.go delete mode 100644 pkg/util/k8sutil/inspector/arangoclustersynchronization/v1/reader.go rename pkg/util/k8sutil/inspector/arangomember/{v1/reader.go => generic.go} (61%) rename pkg/util/k8sutil/inspector/arangoprofile/{v1beta1/loader.go => generic.go} (55%) delete mode 100644 pkg/util/k8sutil/inspector/arangoprofile/v1beta1/reader.go rename pkg/util/k8sutil/inspector/arangoroute/{v1alpha1/loader.go => generic.go} (56%) delete mode 100644 pkg/util/k8sutil/inspector/arangoroute/v1alpha1/reader.go rename pkg/util/k8sutil/inspector/{arangomember/v1/loader.go => arangotask/generic.go} (62%) delete mode 100644 pkg/util/k8sutil/inspector/arangotask/v1/reader.go create mode 100644 pkg/util/k8sutil/inspector/configmap/generic.go delete mode 100644 pkg/util/k8sutil/inspector/configmap/v1/reader.go create mode 100644 pkg/util/k8sutil/inspector/endpoints/generic.go delete mode 100644 pkg/util/k8sutil/inspector/endpoints/v1/reader.go rename pkg/util/k8sutil/inspector/{arangomember/v1/filters.go => generic/inspector.go} (65%) rename pkg/util/k8sutil/inspector/{endpoints/v1/loader.go => generic/inspector_filter.go} (51%) rename pkg/util/k8sutil/inspector/node/{v1/loader.go => generic.go} (63%) delete mode 100644 pkg/util/k8sutil/inspector/node/v1/reader.go create mode 100644 pkg/util/k8sutil/inspector/persistentvolume/generic.go delete mode 100644 pkg/util/k8sutil/inspector/persistentvolume/v1/reader.go create mode 100644 pkg/util/k8sutil/inspector/persistentvolumeclaim/generic.go delete mode 100644 pkg/util/k8sutil/inspector/persistentvolumeclaim/v1/filters.go delete mode 100644 pkg/util/k8sutil/inspector/persistentvolumeclaim/v1/reader.go rename pkg/util/k8sutil/inspector/{persistentvolume/v1/loader.go => pod/generic.go} (64%) delete mode 100644 pkg/util/k8sutil/inspector/pod/v1/filters.go delete mode 100644 pkg/util/k8sutil/inspector/pod/v1/loader.go delete mode 100644 pkg/util/k8sutil/inspector/pod/v1/reader.go rename pkg/util/k8sutil/inspector/poddisruptionbudget/{v1/loader.go => generic.go} (58%) delete mode 100644 pkg/util/k8sutil/inspector/poddisruptionbudget/v1/reader.go rename pkg/util/k8sutil/inspector/{persistentvolumeclaim/v1/loader.go => secret/generic.go} (62%) delete mode 100644 pkg/util/k8sutil/inspector/secret/v1/loader.go delete mode 100644 pkg/util/k8sutil/inspector/secret/v1/reader.go create mode 100644 pkg/util/k8sutil/inspector/service/generic.go delete mode 100644 pkg/util/k8sutil/inspector/service/v1/loader.go delete mode 100644 pkg/util/k8sutil/inspector/service/v1/reader.go create mode 100644 pkg/util/k8sutil/inspector/serviceaccount/generic.go delete mode 100644 pkg/util/k8sutil/inspector/serviceaccount/v1/loader.go delete mode 100644 pkg/util/k8sutil/inspector/serviceaccount/v1/reader.go rename pkg/util/k8sutil/inspector/servicemonitor/{v1/loader.go => generic.go} (60%) delete mode 100644 pkg/util/k8sutil/inspector/servicemonitor/v1/reader.go delete mode 100644 pkg/util/k8sutil/list.go create mode 100644 pkg/util/k8sutil/list/list.go diff --git a/CHANGELOG.md b/CHANGELOG.md index f8b164aa8..8028ddec7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - (Maintenance) Proto Lint - (Feature) (Integration) SchedulerV2 - (Feature) (Integration) Basic Envs +- (Maintenance) Inspector Generics ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/README.md b/README.md index f19fd9497..0edb27155 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,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, 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.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 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/docs/cli/arangodb_operator.md b/docs/cli/arangodb_operator.md index 390ac513b..6702a4a1f 100644 --- a/docs/cli/arangodb_operator.md +++ b/docs/cli/arangodb_operator.md @@ -80,7 +80,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, 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.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 diff --git a/docs/cli/arangodb_operator_integration.md b/docs/cli/arangodb_operator_integration.md index f0bbe9a5c..5412debd9 100644 --- a/docs/cli/arangodb_operator_integration.md +++ b/docs/cli/arangodb_operator_integration.md @@ -51,6 +51,11 @@ Flags: --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.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) 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/crd/crds/analytics-graphanalyticsengine.schema.generated.yaml b/pkg/crd/crds/analytics-graphanalyticsengine.schema.generated.yaml index 2c3f7244f..eff820c4c 100644 --- a/pkg/crd/crds/analytics-graphanalyticsengine.schema.generated.yaml +++ b/pkg/crd/crds/analytics-graphanalyticsengine.schema.generated.yaml @@ -619,6 +619,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -655,6 +662,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -769,6 +778,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -786,6 +797,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -962,6 +980,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1348,6 +1368,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -1991,6 +2018,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -2006,6 +2035,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2137,6 +2173,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..3974be78d 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: @@ -842,6 +857,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -859,6 +876,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1009,6 +1033,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1383,6 +1409,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1400,6 +1428,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1552,6 +1587,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1930,6 +1967,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1947,6 +1986,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2097,6 +2143,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2141,13 +2189,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 +2210,13 @@ v1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2201,6 +2253,8 @@ v1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2674,6 +2728,13 @@ v1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: diff --git a/pkg/crd/crds/database-deployment.schema.generated.yaml b/pkg/crd/crds/database-deployment.schema.generated.yaml index 76649f8de..8286063a4 100644 --- a/pkg/crd/crds/database-deployment.schema.generated.yaml +++ b/pkg/crd/crds/database-deployment.schema.generated.yaml @@ -695,6 +695,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -712,6 +714,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -862,6 +871,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1168,6 +1179,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1625,6 +1638,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1642,6 +1657,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1792,6 +1814,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2052,6 +2076,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2914,6 +2940,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -2931,6 +2959,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -3081,6 +3116,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -3387,6 +3424,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -3844,6 +3883,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -3861,6 +3902,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -4011,6 +4059,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -4271,6 +4321,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -5051,6 +5103,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -5068,6 +5122,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -5218,6 +5279,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -5524,6 +5587,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -5981,6 +6046,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -5998,6 +6065,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -6148,6 +6222,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -6408,6 +6484,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -7270,6 +7348,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -7287,6 +7367,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -7437,6 +7524,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -7743,6 +7832,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -8200,6 +8291,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -8217,6 +8310,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -8367,6 +8467,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -8627,6 +8729,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -9071,6 +9175,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -9543,6 +9649,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -9558,6 +9666,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -9689,6 +9804,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -9737,6 +9854,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -9798,6 +9917,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -10583,6 +10704,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -10600,6 +10723,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -10750,6 +10880,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -11056,6 +11188,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -11513,6 +11647,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -11530,6 +11666,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -11680,6 +11823,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -11940,6 +12085,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -12863,6 +13010,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -12880,6 +13029,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -13030,6 +13186,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -13336,6 +13494,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -13793,6 +13953,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -13810,6 +13972,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -13960,6 +14129,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -14220,6 +14391,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -14993,6 +15166,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -15010,6 +15185,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -15160,6 +15342,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -15466,6 +15650,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -15923,6 +16109,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -15940,6 +16128,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -16090,6 +16285,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -16350,6 +16547,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -17223,6 +17422,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -17240,6 +17441,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -17390,6 +17598,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -17696,6 +17906,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -18153,6 +18365,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -18170,6 +18384,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -18320,6 +18541,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -18580,6 +18803,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -19442,6 +19667,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -19459,6 +19686,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -19609,6 +19843,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -19915,6 +20151,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -20372,6 +20610,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -20389,6 +20629,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -20539,6 +20786,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -20799,6 +21048,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -21579,6 +21830,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -21596,6 +21849,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -21746,6 +22006,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -22052,6 +22314,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -22509,6 +22773,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -22526,6 +22792,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -22676,6 +22949,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -22936,6 +23211,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -23798,6 +24075,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -23815,6 +24094,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -23965,6 +24251,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -24271,6 +24559,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -24728,6 +25018,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -24745,6 +25037,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -24895,6 +25194,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -25155,6 +25456,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -25599,6 +25902,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -26071,6 +26376,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -26086,6 +26393,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -26217,6 +26531,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -26265,6 +26581,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -26326,6 +26644,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -27111,6 +27431,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -27128,6 +27450,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -27278,6 +27607,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -27584,6 +27915,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -28041,6 +28374,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -28058,6 +28393,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -28208,6 +28550,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -28468,6 +28812,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -29391,6 +29737,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -29408,6 +29756,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -29558,6 +29913,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -29864,6 +30221,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -30321,6 +30680,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -30338,6 +30699,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -30488,6 +30856,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -30748,6 +31118,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -31521,6 +31893,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -31538,6 +31912,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -31688,6 +32069,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -31994,6 +32377,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -32451,6 +32836,8 @@ v1alpha: properties: name: type: string + request: + type: string type: object type: array limits: @@ -32468,6 +32855,13 @@ v1alpha: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -32618,6 +33012,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -32878,6 +33274,8 @@ v1alpha: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -33751,6 +34149,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -33768,6 +34168,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -33918,6 +34325,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -34224,6 +34633,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -34681,6 +35092,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -34698,6 +35111,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -34848,6 +35268,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -35108,6 +35530,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -35970,6 +36394,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -35987,6 +36413,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -36137,6 +36570,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -36443,6 +36878,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -36900,6 +37337,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -36917,6 +37356,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -37067,6 +37513,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -37327,6 +37775,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -38107,6 +38557,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -38124,6 +38576,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -38274,6 +38733,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -38580,6 +39041,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -39037,6 +39500,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -39054,6 +39519,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -39204,6 +39676,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -39464,6 +39938,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -40326,6 +40802,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -40343,6 +40821,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -40493,6 +40978,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -40799,6 +41286,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -41256,6 +41745,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -41273,6 +41764,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -41423,6 +41921,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -41683,6 +42183,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -42127,6 +42629,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -42599,6 +43103,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -42614,6 +43120,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -42745,6 +43258,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -42793,6 +43308,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -42854,6 +43371,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -43639,6 +44158,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -43656,6 +44177,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -43806,6 +44334,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -44112,6 +44642,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -44569,6 +45101,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -44586,6 +45120,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -44736,6 +45277,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -44996,6 +45539,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -45919,6 +46464,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -45936,6 +46483,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -46086,6 +46640,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -46392,6 +46948,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -46849,6 +47407,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -46866,6 +47426,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -47016,6 +47583,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -47276,6 +47845,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -48049,6 +48620,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -48066,6 +48639,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -48216,6 +48796,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -48522,6 +49104,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -48979,6 +49563,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -48996,6 +49582,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -49146,6 +49739,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -49406,6 +50001,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: diff --git a/pkg/crd/crds/database-member.schema.generated.yaml b/pkg/crd/crds/database-member.schema.generated.yaml index 0582ff8ca..54c387a9b 100644 --- a/pkg/crd/crds/database-member.schema.generated.yaml +++ b/pkg/crd/crds/database-member.schema.generated.yaml @@ -29,6 +29,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1005,6 +1007,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1022,6 +1026,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1172,6 +1183,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1546,6 +1559,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1563,6 +1578,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1715,6 +1737,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2093,6 +2117,8 @@ v1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -2110,6 +2136,13 @@ v1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2260,6 +2293,8 @@ v1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2304,13 +2339,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 +2360,13 @@ v1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2364,6 +2403,8 @@ v1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2837,6 +2878,13 @@ v1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -3180,6 +3228,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -4156,6 +4206,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -4173,6 +4225,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -4323,6 +4382,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -4697,6 +4758,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -4714,6 +4777,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -4866,6 +4936,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -5244,6 +5316,8 @@ v2alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -5261,6 +5335,13 @@ v2alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -5411,6 +5492,8 @@ v2alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -5455,13 +5538,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 +5559,13 @@ v2alpha1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -5515,6 +5602,8 @@ v2alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -5988,6 +6077,13 @@ v2alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: diff --git a/pkg/crd/crds/ml-extension.schema.generated.yaml b/pkg/crd/crds/ml-extension.schema.generated.yaml index 17e450dfe..e5ff82aa6 100644 --- a/pkg/crd/crds/ml-extension.schema.generated.yaml +++ b/pkg/crd/crds/ml-extension.schema.generated.yaml @@ -620,6 +620,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -656,6 +663,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -774,6 +783,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -791,6 +802,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -967,6 +985,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1353,6 +1373,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -2270,6 +2297,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2306,6 +2340,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2416,6 +2452,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -2433,6 +2471,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2584,6 +2629,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2970,6 +3017,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -3893,6 +3947,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -3929,6 +3990,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -4039,6 +4102,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -4056,6 +4121,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -4207,6 +4279,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -4593,6 +4667,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -5510,6 +5591,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -5546,6 +5634,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -5656,6 +5746,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -5673,6 +5765,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -5824,6 +5923,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -6210,6 +6311,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -7131,6 +7239,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -7167,6 +7282,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -7277,6 +7394,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -7294,6 +7413,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -7445,6 +7571,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -7831,6 +7959,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -8748,6 +8883,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -8784,6 +8926,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -8894,6 +9038,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -8911,6 +9057,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -9062,6 +9215,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -9448,6 +9603,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -10369,6 +10531,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -10405,6 +10574,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -10515,6 +10686,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -10532,6 +10705,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -10683,6 +10863,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -11069,6 +11251,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -11986,6 +12175,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -12022,6 +12218,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -12132,6 +12330,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -12149,6 +12349,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -12300,6 +12507,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -12686,6 +12895,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -13649,6 +13865,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -13685,6 +13908,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -13801,6 +14026,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -13818,6 +14045,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -13985,6 +14219,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -14371,6 +14607,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -15289,6 +15532,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -15325,6 +15575,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -15435,6 +15687,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -15452,6 +15706,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -15603,6 +15864,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -15989,6 +16252,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -16628,6 +16898,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -16643,6 +16915,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -16774,6 +17053,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -17402,6 +17683,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -17438,6 +17726,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -17548,6 +17838,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -17565,6 +17857,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -17716,6 +18015,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -18102,6 +18403,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -19020,6 +19328,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -19056,6 +19371,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -19166,6 +19483,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -19183,6 +19502,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -19334,6 +19660,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -19720,6 +20048,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -20641,6 +20976,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -20677,6 +21019,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -20787,6 +21131,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -20804,6 +21150,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -20955,6 +21308,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -21341,6 +21696,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -22259,6 +22621,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -22295,6 +22664,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -22405,6 +22776,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -22422,6 +22795,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -22573,6 +22953,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -22959,6 +23341,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -23880,6 +24269,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -23916,6 +24312,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -24026,6 +24424,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -24043,6 +24443,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -24194,6 +24601,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -24580,6 +24989,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -25498,6 +25914,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -25534,6 +25957,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -25644,6 +26069,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -25661,6 +26088,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -25812,6 +26246,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -26198,6 +26634,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: diff --git a/pkg/crd/crds/ml-job-batch.schema.generated.yaml b/pkg/crd/crds/ml-job-batch.schema.generated.yaml index c3710170e..241368011 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: @@ -836,6 +851,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -853,6 +870,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1003,6 +1027,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1377,6 +1403,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1394,6 +1422,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1546,6 +1581,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1924,6 +1961,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1941,6 +1980,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2091,6 +2137,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2135,13 +2183,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 +2204,13 @@ v1alpha1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2195,6 +2247,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2668,6 +2722,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: diff --git a/pkg/crd/crds/ml-job-cron.schema.generated.yaml b/pkg/crd/crds/ml-job-cron.schema.generated.yaml index daf4b5fe8..7873cad9e 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: @@ -921,6 +936,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -938,6 +955,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1088,6 +1112,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1462,6 +1488,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1479,6 +1507,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1631,6 +1666,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2009,6 +2046,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -2026,6 +2065,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2176,6 +2222,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2220,13 +2268,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 +2289,13 @@ v1alpha1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2280,6 +2332,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2753,6 +2807,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: diff --git a/pkg/crd/crds/ml-storage.schema.generated.yaml b/pkg/crd/crds/ml-storage.schema.generated.yaml index 1a235f2a7..ba6474cfd 100644 --- a/pkg/crd/crds/ml-storage.schema.generated.yaml +++ b/pkg/crd/crds/ml-storage.schema.generated.yaml @@ -408,6 +408,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -423,6 +425,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -554,6 +563,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: diff --git a/pkg/crd/crds/scheduler-batchjob.schema.generated.yaml b/pkg/crd/crds/scheduler-batchjob.schema.generated.yaml index ffa23976a..eeaf58df4 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: @@ -82,6 +84,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: @@ -840,6 +855,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -857,6 +874,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1007,6 +1031,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1381,6 +1407,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1398,6 +1426,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1550,6 +1585,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1928,6 +1965,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1945,6 +1984,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2095,6 +2141,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2139,13 +2187,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 +2208,13 @@ v1beta1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2199,6 +2251,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2672,6 +2726,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: diff --git a/pkg/crd/crds/scheduler-cronjob.schema.generated.yaml b/pkg/crd/crds/scheduler-cronjob.schema.generated.yaml index a37961c59..1913cbbcf 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: @@ -921,6 +936,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -938,6 +955,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1088,6 +1112,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1462,6 +1488,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1479,6 +1507,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1631,6 +1666,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2009,6 +2046,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -2026,6 +2065,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2176,6 +2222,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2220,13 +2268,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 +2289,13 @@ v1beta1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2280,6 +2332,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2753,6 +2807,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: diff --git a/pkg/crd/crds/scheduler-deployment.schema.generated.yaml b/pkg/crd/crds/scheduler-deployment.schema.generated.yaml index 7956b594d..b05cef7ad 100644 --- a/pkg/crd/crds/scheduler-deployment.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-deployment.schema.generated.yaml @@ -811,6 +811,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -828,6 +830,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -978,6 +987,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1352,6 +1363,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1369,6 +1382,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1521,6 +1541,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1899,6 +1921,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1916,6 +1940,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2066,6 +2097,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2110,13 +2143,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 +2164,13 @@ v1beta1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2170,6 +2207,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2643,6 +2682,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: diff --git a/pkg/crd/crds/scheduler-pod.schema.generated.yaml b/pkg/crd/crds/scheduler-pod.schema.generated.yaml index d38077167..ff933e2f7 100644 --- a/pkg/crd/crds/scheduler-pod.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-pod.schema.generated.yaml @@ -679,6 +679,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -696,6 +698,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -846,6 +855,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1220,6 +1231,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1237,6 +1250,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1389,6 +1409,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1767,6 +1789,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -1784,6 +1808,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -1934,6 +1965,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -1982,13 +2015,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 +2036,13 @@ v1beta1: type: array securityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2042,6 +2079,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -2515,6 +2554,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: diff --git a/pkg/crd/crds/scheduler-profile.schema.generated.yaml b/pkg/crd/crds/scheduler-profile.schema.generated.yaml index 04ddea193..32d5ca1dd 100644 --- a/pkg/crd/crds/scheduler-profile.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-profile.schema.generated.yaml @@ -113,6 +113,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -449,6 +451,8 @@ v1alpha1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -464,6 +468,13 @@ v1alpha1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -595,6 +606,8 @@ v1alpha1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -982,6 +995,13 @@ v1alpha1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -1018,6 +1038,8 @@ v1alpha1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -1441,6 +1463,13 @@ v1alpha1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: @@ -1864,6 +1893,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2202,6 +2233,8 @@ v1beta1: properties: name: type: string + request: + type: string type: object type: array limits: @@ -2217,6 +2250,13 @@ v1beta1: properties: allowPrivilegeEscalation: type: boolean + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object capabilities: properties: add: @@ -2348,6 +2388,8 @@ v1beta1: type: string readOnly: type: boolean + recursiveReadOnly: + type: string subPath: type: string subPathExpr: @@ -2735,6 +2777,13 @@ v1beta1: type: array podSecurityContext: properties: + appArmorProfile: + properties: + localhostProfile: + type: string + type: + type: string + type: object fsGroup: format: int64 type: integer @@ -2771,6 +2820,8 @@ v1beta1: format: int64 type: integer type: array + supplementalGroupsPolicy: + type: string sysctls: items: properties: @@ -3194,6 +3245,13 @@ v1beta1: type: type: string type: object + image: + properties: + pullPolicy: + type: string + reference: + type: string + type: object iscsi: properties: chapAuthDiscovery: diff --git a/pkg/debug_package/generators/kubernetes/lister.go b/pkg/debug_package/generators/kubernetes/lister.go index bbde1f949..e580d3643 100644 --- a/pkg/debug_package/generators/kubernetes/lister.go +++ b/pkg/debug_package/generators/kubernetes/lister.go @@ -24,60 +24,11 @@ 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) - - objects[obj.GetUID()] = obj - } - - 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 list.APIList[L, T](ctx, k, meta.ListOptions{}, extract) } 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/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/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_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..7adb522c8 100644 --- a/pkg/deployment/reconcile/plan_builder_test.go +++ b/pkg/deployment/reconcile/plan_builder_test.go @@ -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") } 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/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..8efaf7d51 100644 --- a/pkg/deployment/resources/config_map_gateway.go +++ b/pkg/deployment/resources/config_map_gateway.go @@ -40,11 +40,11 @@ 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" - 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 { +func (r *Resources) ensureGatewayConfig(ctx context.Context, cachedStatus inspectorInterface.Inspector, configMaps generic.ModClient[*core.ConfigMap]) error { deploymentName := r.context.GetAPIObject().GetName() configMapName := GetGatewayConfigMapName(deploymentName) diff --git a/pkg/deployment/resources/config_maps_member.go b/pkg/deployment/resources/config_maps_member.go index f65dc2bec..90bd1117d 100644 --- a/pkg/deployment/resources/config_maps_member.go +++ b/pkg/deployment/resources/config_maps_member.go @@ -33,7 +33,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" - 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" ) @@ -49,7 +49,7 @@ const ( 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") 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/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..cea92e378 100644 --- a/pkg/deployment/resources/inspector/inspector.go +++ b/pkg/deployment/resources/inspector/inspector.go @@ -174,7 +174,7 @@ 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)) } @@ -346,10 +346,6 @@ func (i *inspectorState) ArangoProfile() arangoprofile.Definition { return i.arangoProfiles } -func (i *inspectorState) ArangoProfiles() arangoprofile.Definition { - return i.arangoProfiles -} - func (i *inspectorState) Refresh(ctx context.Context) error { return i.refresh(ctx, inspectorLoadersList...) } 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/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/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..50a322062 100644 --- a/pkg/deployment/resources/pod_creator.go +++ b/pkg/deployment/resources/pod_creator.go @@ -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" @@ -715,7 +715,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 { 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/handlers/policy/handler.go b/pkg/handlers/policy/handler.go index cc9201d50..94c669faa 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-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. @@ -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 ( @@ -222,12 +222,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 +235,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/scheduler/profiles.go b/pkg/scheduler/profiles.go index 25cb34af2..c6adef1bb 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) } 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/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/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/loader.go b/pkg/util/k8sutil/inspector/arangoclustersynchronization/v1/loader.go deleted file mode 100644 index 5432e5f1f..000000000 --- a/pkg/util/k8sutil/inspector/arangoclustersynchronization/v1/loader.go +++ /dev/null @@ -1,53 +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 ( - api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk" -) - -type Inspector 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 -} - -type Filter func(acs *api.ArangoClusterSynchronization) bool -type Action func(acs *api.ArangoClusterSynchronization) error - -func FilterObject(acs *api.ArangoClusterSynchronization, filters ...Filter) bool { - for _, f := range filters { - if f == nil { - continue - } - - if !f(acs) { - return false - } - } - - 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/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/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/arangomember/v1/filters.go b/pkg/util/k8sutil/inspector/generic/inspector.go similarity index 65% rename from pkg/util/k8sutil/inspector/arangomember/v1/filters.go rename to pkg/util/k8sutil/inspector/generic/inspector.go index 13510eda5..54251c12a 100644 --- a/pkg/util/k8sutil/inspector/arangomember/v1/filters.go +++ b/pkg/util/k8sutil/inspector/generic/inspector.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,16 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package generic -import ( - "k8s.io/apimachinery/pkg/types" +import meta "k8s.io/apimachinery/pkg/apis/meta/v1" - api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" -) +type InspectorInterface[S meta.Object] interface { + ModClient[S] + ReadClient[S] +} -func FilterByDeploymentUID(uid types.UID) Filter { - return func(pod *api.ArangoMember) bool { - return pod.Spec.DeploymentUID == "" || pod.Spec.DeploymentUID == uid - } +type InspectorStatusInterface[S meta.Object] interface { + ModStatusClient[S] + ReadClient[S] } diff --git a/pkg/util/k8sutil/inspector/endpoints/v1/loader.go b/pkg/util/k8sutil/inspector/generic/inspector_filter.go similarity index 51% rename from pkg/util/k8sutil/inspector/endpoints/v1/loader.go rename to pkg/util/k8sutil/inspector/generic/inspector_filter.go index 6d6067124..d3f65b4bf 100644 --- a/pkg/util/k8sutil/inspector/endpoints/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,37 +18,55 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package v1 +package generic import ( - core "k8s.io/api/core/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() []*core.Endpoints - GetSimple(name string) (*core.Endpoints, bool) - Filter(filters ...Filter) []*core.Endpoints - 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(at *core.Endpoints) bool -type Action func(at *core.Endpoints) error +type Filter[S meta.Object] func(obj S) bool +type Action[S meta.Object] func(obj S) error -func FilterObject(at *core.Endpoints, filters ...Filter) bool { +func FilterObject[S meta.Object](obj S, filters ...Filter[S]) bool { for _, f := range filters { if f == nil { continue } - if !f(at) { + 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..93da1457d 100644 --- a/pkg/util/k8sutil/inspector/generic/mod.go +++ b/pkg/util/k8sutil/inspector/generic/mod.go @@ -31,6 +31,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) } @@ -67,7 +69,6 @@ type ModClient[S meta.Object] interface { CreateInterface[S] UpdateInterface[S] PatchInterface[S] - PatchInterface[S] DeleteInterface[S] } diff --git a/pkg/util/k8sutil/inspector/mods/mods.go b/pkg/util/k8sutil/inspector/mods/mods.go index 62eeb6295..09c622437 100644 --- a/pkg/util/k8sutil/inspector/mods/mods.go +++ b/pkg/util/k8sutil/inspector/mods/mods.go @@ -21,76 +21,70 @@ 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" + 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 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 { 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/persistentvolume/v1/reader.go b/pkg/util/k8sutil/inspector/persistentvolume/v1/reader.go deleted file mode 100644 index fa8348d90..000000000 --- a/pkg/util/k8sutil/inspector/persistentvolume/v1/reader.go +++ /dev/null @@ -1,38 +0,0 @@ -// -// DISCLAIMER -// -// Copyright 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" -) - -// Interface has methods to work with PersistentVolume resources. -type Interface interface { - ReadInterface -} - -// 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) -} 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/filters.go b/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1/filters.go deleted file mode 100644 index 2741880db..000000000 --- a/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1/filters.go +++ /dev/null @@ -1,42 +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" -) - -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 - } - - if v != value { - return false - } - } - - return true - } -} 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/filters.go b/pkg/util/k8sutil/inspector/pod/v1/filters.go deleted file mode 100644 index 201242799..000000000 --- a/pkg/util/k8sutil/inspector/pod/v1/filters.go +++ /dev/null @@ -1,42 +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" -) - -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 - } - - if v != value { - return false - } - } - - return true - } -} 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/list.go b/pkg/util/k8sutil/list.go deleted file mode 100644 index 8202f5d1a..000000000 --- a/pkg/util/k8sutil/list.go +++ /dev/null @@ -1,46 +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 k8sutil - -import ( - "context" - - meta "k8s.io/apimachinery/pkg/apis/meta/v1" - - "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 - } - - if c := result.GetContinue(); c == "" { - return nil - } else { - result, err = api.List(ctx, meta.ListOptions{ - Continue: result.GetContinue(), - }) - } - } -} 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/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/list.go b/pkg/util/list.go index 1d1e76ce7..30e438d7d 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) { diff --git a/pkg/util/refs.go b/pkg/util/refs.go index f32cac7ce..33578874f 100644 --- a/pkg/util/refs.go +++ b/pkg/util/refs.go @@ -188,3 +188,12 @@ func JSONRemarshal[A, B any](in A) (B, error) { return o, nil } + +func InitOptional[T any](in *T, ok bool) *T { + if ok { + return in + } + + var z T + return &z +} From 0a339b413c492159a9c222cda64aa2293d76fcc9 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Thu, 31 Oct 2024 14:18:05 +0100 Subject: [PATCH 13/69] [Bugfix] Fix Gateway Options (#1753) --- CHANGELOG.md | 1 + .../templates/deployment-operator/role.yaml | 3 - .../templates/networking-operator/role.yaml | 57 ++----------- pkg/apis/networking/v1alpha1/route_spec.go | 2 +- .../resources/gateway/gateway_config.go | 8 +- .../gateway/gateway_config_destination.go | 26 ++++++ .../resources/gateway/gateway_config_sni.go | 4 +- .../resources/gateway/gateway_config_test.go | 83 ++++++++++++++++++- pkg/deployment/resources/gateway/marshal.go | 10 +++ pkg/scheduler/profiles.go | 10 ++- 10 files changed, 143 insertions(+), 61 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8028ddec7..9b288f17a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - (Feature) (Integration) SchedulerV2 - (Feature) (Integration) Basic Envs - (Maintenance) Inspector Generics +- (Bugfix) Fix Gateway Options ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/chart/kube-arangodb/templates/deployment-operator/role.yaml b/chart/kube-arangodb/templates/deployment-operator/role.yaml index 18d5e8582..ad6fd3796 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"] 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/pkg/apis/networking/v1alpha1/route_spec.go b/pkg/apis/networking/v1alpha1/route_spec.go index 6f4fc16e5..85bb6348f 100644 --- a/pkg/apis/networking/v1alpha1/route_spec.go +++ b/pkg/apis/networking/v1alpha1/route_spec.go @@ -34,7 +34,7 @@ type ArangoRouteSpec struct { } func (s *ArangoRouteSpec) GetDeployment() string { - if s == nil || s.Destination == nil { + if s == nil || s.Deployment == nil { return "" } diff --git a/pkg/deployment/resources/gateway/gateway_config.go b/pkg/deployment/resources/gateway/gateway_config.go index e7c360e61..eb61cd463 100644 --- a/pkg/deployment/resources/gateway/gateway_config.go +++ b/pkg/deployment/resources/gateway/gateway_config.go @@ -170,7 +170,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), + }, + }, }, }, }, diff --git a/pkg/deployment/resources/gateway/gateway_config_destination.go b/pkg/deployment/resources/gateway/gateway_config_destination.go index 3139b3f31..83c8b709e 100644 --- a/pkg/deployment/resources/gateway/gateway_config_destination.go +++ b/pkg/deployment/resources/gateway/gateway_config_destination.go @@ -24,8 +24,12 @@ import ( "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" + upstreamHttpApi "github.com/envoyproxy/go-control-plane/envoy/extensions/upstreams/http/v3" + "github.com/golang/protobuf/ptypes/any" + "google.golang.org/protobuf/types/known/anypb" "google.golang.org/protobuf/types/known/durationpb" shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" @@ -115,6 +119,25 @@ func (c *ConfigDestination) RenderRoute(name, prefix string) (*routeAPI.Route, e } func (c *ConfigDestination) RenderCluster(name string) (*clusterAPI.Cluster, error) { + hpo, err := anypb.New(&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), + }, + }, + }, + }, + }, + }) + if err != nil { + return nil, err + } + cluster := &clusterAPI.Cluster{ Name: name, ConnectTimeout: durationpb.New(time.Second), @@ -127,6 +150,9 @@ func (c *ConfigDestination) RenderCluster(name string) (*clusterAPI.Cluster, err }, }, }, + TypedExtensionProtocolOptions: map[string]*any.Any{ + "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": hpo, + }, } if t, err := c.Type.RenderUpstreamTransportSocket(); err != nil { 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..99ba60384 100644 --- a/pkg/deployment/resources/gateway/gateway_config_test.go +++ b/pkg/deployment/resources/gateway/gateway_config_test.go @@ -21,6 +21,7 @@ package gateway import ( + "fmt" "testing" bootstrapAPI "github.com/envoyproxy/go-control-plane/envoy/config/bootstrap/v3" @@ -29,14 +30,18 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util" ) -func renderAndPrintGatewayConfig(t *testing.T, cfg Config) *bootstrapAPI.Bootstrap { +func renderAndPrintGatewayConfig(t *testing.T, cfg Config, validates ...func(t *testing.T, b *bootstrapAPI.Bootstrap)) { 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 +55,27 @@ 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("Default", func(t *testing.T) { renderAndPrintGatewayConfig(t, Config{ DefaultDestination: ConfigDestination{ @@ -69,6 +93,7 @@ func Test_GatewayConfig(t *testing.T) { }, }) }) + t.Run("Default", func(t *testing.T) { renderAndPrintGatewayConfig(t, Config{ DefaultDestination: ConfigDestination{ @@ -87,6 +112,7 @@ func Test_GatewayConfig(t *testing.T) { }, }) }) + t.Run("Default", func(t *testing.T) { renderAndPrintGatewayConfig(t, Config{ DefaultDestination: ConfigDestination{ @@ -117,6 +143,38 @@ 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", + }, + 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{ @@ -133,6 +191,17 @@ func Test_GatewayConfig(t *testing.T) { CertificatePath: "/test", PrivateKeyPath: "/test12", }, + SNI: []ConfigSNI{ + { + ConfigTLS: ConfigTLS{ + CertificatePath: "/cp", + PrivateKeyPath: "/pp", + }, + ServerNames: []string{ + "example.com", + }, + }, + }, Destinations: ConfigDestinations{ "/_test/": { Targets: []ConfigDestinationTarget{ @@ -147,6 +216,7 @@ func Test_GatewayConfig(t *testing.T) { }, }) }) + t.Run("Default", func(t *testing.T) { renderAndPrintGatewayConfig(t, Config{ DefaultDestination: ConfigDestination{ @@ -173,6 +243,15 @@ func Test_GatewayConfig(t *testing.T) { "example.com", }, }, + { + ConfigTLS: ConfigTLS{ + CertificatePath: "/c2", + PrivateKeyPath: "/p2", + }, + ServerNames: []string{ + "2.example.com", + }, + }, }, Destinations: ConfigDestinations{ "/_test/": { 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/scheduler/profiles.go b/pkg/scheduler/profiles.go index c6adef1bb..68230f2e1 100644 --- a/pkg/scheduler/profiles.go +++ b/pkg/scheduler/profiles.go @@ -81,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 From 4a87f8a85660be81a6d987f6a899096941eb2e9d Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 1 Nov 2024 12:09:36 +0100 Subject: [PATCH 14/69] [Feature] StorageV2 Integration Service Definition (#1754) --- CHANGELOG.md | 1 + integrations/storage/v2/definition/consts.go | 25 + .../storage/v2/definition/storage.pb.go | 1025 +++++++++++++++++ .../storage/v2/definition/storage.proto | 129 +++ .../storage/v2/definition/storage_grpc.pb.go | 338 ++++++ 5 files changed, 1518 insertions(+) create mode 100644 integrations/storage/v2/definition/consts.go create mode 100644 integrations/storage/v2/definition/storage.pb.go create mode 100644 integrations/storage/v2/definition/storage.proto create mode 100644 integrations/storage/v2/definition/storage_grpc.pb.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b288f17a..e5a78b005 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - (Feature) (Integration) Basic Envs - (Maintenance) Inspector Generics - (Bugfix) Fix Gateway Options +- (Feature) StorageV2 Integration Service Definition ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/integrations/storage/v2/definition/consts.go b/integrations/storage/v2/definition/consts.go new file mode 100644 index 000000000..e90744d98 --- /dev/null +++ b/integrations/storage/v2/definition/consts.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 definition + +const ( + Name = "storage.v2" +) diff --git a/integrations/storage/v2/definition/storage.pb.go b/integrations/storage/v2/definition/storage.pb.go new file mode 100644 index 000000000..c72fc2c7e --- /dev/null +++ b/integrations/storage/v2/definition/storage.pb.go @@ -0,0 +1,1025 @@ +// +// 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) +) + +type StorageV2Path struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + 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 "" +} + +type StorageV2Object struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path *StorageV2Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + 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 +} + +type StorageV2ObjectInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Size uint64 `protobuf:"varint,1,opt,name=size,proto3" json:"size,omitempty"` + 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 +} + +type StorageV2ReadObjectRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + 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[3] + 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[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 StorageV2ReadObjectRequest.ProtoReflect.Descriptor instead. +func (*StorageV2ReadObjectRequest) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{3} +} + +func (x *StorageV2ReadObjectRequest) GetPath() *StorageV2Path { + if x != nil { + return x.Path + } + return nil +} + +type StorageV2ReadObjectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + 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[4] + 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[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 StorageV2ReadObjectResponse.ProtoReflect.Descriptor instead. +func (*StorageV2ReadObjectResponse) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{4} +} + +func (x *StorageV2ReadObjectResponse) GetChunk() []byte { + if x != nil { + return x.Chunk + } + return nil +} + +type StorageV2WriteObjectRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path *StorageV2Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + 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[5] + 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[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 StorageV2WriteObjectRequest.ProtoReflect.Descriptor instead. +func (*StorageV2WriteObjectRequest) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{5} +} + +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 +} + +type StorageV2WriteObjectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Bytes int64 `protobuf:"varint,1,opt,name=bytes,proto3" json:"bytes,omitempty"` + 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[6] + 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[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 StorageV2WriteObjectResponse.ProtoReflect.Descriptor instead. +func (*StorageV2WriteObjectResponse) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{6} +} + +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 "" +} + +type StorageV2HeadObjectRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + 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[7] + 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[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 StorageV2HeadObjectRequest.ProtoReflect.Descriptor instead. +func (*StorageV2HeadObjectRequest) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{7} +} + +func (x *StorageV2HeadObjectRequest) GetPath() *StorageV2Path { + if x != nil { + return x.Path + } + return nil +} + +type StorageV2HeadObjectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + 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[8] + 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[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 StorageV2HeadObjectResponse.ProtoReflect.Descriptor instead. +func (*StorageV2HeadObjectResponse) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{8} +} + +func (x *StorageV2HeadObjectResponse) GetInfo() *StorageV2ObjectInfo { + if x != nil { + return x.Info + } + return nil +} + +type StorageV2DeleteObjectRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + 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[9] + 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[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 StorageV2DeleteObjectRequest.ProtoReflect.Descriptor instead. +func (*StorageV2DeleteObjectRequest) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{9} +} + +func (x *StorageV2DeleteObjectRequest) GetPath() *StorageV2Path { + if x != nil { + return x.Path + } + return nil +} + +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[10] + 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[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 StorageV2DeleteObjectResponse.ProtoReflect.Descriptor instead. +func (*StorageV2DeleteObjectResponse) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{10} +} + +type StorageV2ListObjectsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + 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[11] + 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[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 StorageV2ListObjectsRequest.ProtoReflect.Descriptor instead. +func (*StorageV2ListObjectsRequest) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{11} +} + +func (x *StorageV2ListObjectsRequest) GetPath() *StorageV2Path { + if x != nil { + return x.Path + } + return nil +} + +type StorageV2ListObjectsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + 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[12] + 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[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 StorageV2ListObjectsResponse.ProtoReflect.Descriptor instead. +func (*StorageV2ListObjectsResponse) Descriptor() ([]byte, []int) { + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{12} +} + +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, 0x08, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x71, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x12, 0x31, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, + 0x49, 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, 0x2b, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, + 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, + 0x60, 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, 0x2b, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, + 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x49, 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, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x56, 0x32, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x50, + 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, 0x31, 0x0a, + 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x68, + 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x4b, 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, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x4a, + 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, 0x2b, 0x0a, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, + 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, + 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x4f, 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, 0x2f, 0x0a, 0x05, 0x66, 0x69, + 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x68, 0x75, 0x74, + 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x32, 0xe4, 0x03, 0x0a, 0x09, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x12, 0x5b, 0x0a, 0x0a, 0x52, 0x65, 0x61, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, + 0x77, 0x6e, 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, 0x25, 0x2e, + 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x5e, 0x0a, 0x0b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x25, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, + 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, 0x26, 0x2e, 0x73, + 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x59, 0x0a, 0x0a, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x25, 0x2e, 0x73, 0x68, 0x75, + 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x5f, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x26, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x27, 0x2e, 0x73, 0x68, 0x75, 0x74, + 0x64, 0x6f, 0x77, 0x6e, 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, 0x5e, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x12, 0x25, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x26, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, + 0x6f, 0x77, 0x6e, 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, 13) +var file_integrations_storage_v2_definition_storage_proto_goTypes = []interface{}{ + (*StorageV2Path)(nil), // 0: shutdown.StorageV2Path + (*StorageV2Object)(nil), // 1: shutdown.StorageV2Object + (*StorageV2ObjectInfo)(nil), // 2: shutdown.StorageV2ObjectInfo + (*StorageV2ReadObjectRequest)(nil), // 3: shutdown.StorageV2ReadObjectRequest + (*StorageV2ReadObjectResponse)(nil), // 4: shutdown.StorageV2ReadObjectResponse + (*StorageV2WriteObjectRequest)(nil), // 5: shutdown.StorageV2WriteObjectRequest + (*StorageV2WriteObjectResponse)(nil), // 6: shutdown.StorageV2WriteObjectResponse + (*StorageV2HeadObjectRequest)(nil), // 7: shutdown.StorageV2HeadObjectRequest + (*StorageV2HeadObjectResponse)(nil), // 8: shutdown.StorageV2HeadObjectResponse + (*StorageV2DeleteObjectRequest)(nil), // 9: shutdown.StorageV2DeleteObjectRequest + (*StorageV2DeleteObjectResponse)(nil), // 10: shutdown.StorageV2DeleteObjectResponse + (*StorageV2ListObjectsRequest)(nil), // 11: shutdown.StorageV2ListObjectsRequest + (*StorageV2ListObjectsResponse)(nil), // 12: shutdown.StorageV2ListObjectsResponse + (*timestamppb.Timestamp)(nil), // 13: google.protobuf.Timestamp +} +var file_integrations_storage_v2_definition_storage_proto_depIdxs = []int32{ + 0, // 0: shutdown.StorageV2Object.path:type_name -> shutdown.StorageV2Path + 2, // 1: shutdown.StorageV2Object.info:type_name -> shutdown.StorageV2ObjectInfo + 13, // 2: shutdown.StorageV2ObjectInfo.last_updated:type_name -> google.protobuf.Timestamp + 0, // 3: shutdown.StorageV2ReadObjectRequest.path:type_name -> shutdown.StorageV2Path + 0, // 4: shutdown.StorageV2WriteObjectRequest.path:type_name -> shutdown.StorageV2Path + 0, // 5: shutdown.StorageV2HeadObjectRequest.path:type_name -> shutdown.StorageV2Path + 2, // 6: shutdown.StorageV2HeadObjectResponse.info:type_name -> shutdown.StorageV2ObjectInfo + 0, // 7: shutdown.StorageV2DeleteObjectRequest.path:type_name -> shutdown.StorageV2Path + 0, // 8: shutdown.StorageV2ListObjectsRequest.path:type_name -> shutdown.StorageV2Path + 1, // 9: shutdown.StorageV2ListObjectsResponse.files:type_name -> shutdown.StorageV2Object + 3, // 10: shutdown.StorageV2.ReadObject:input_type -> shutdown.StorageV2ReadObjectRequest + 5, // 11: shutdown.StorageV2.WriteObject:input_type -> shutdown.StorageV2WriteObjectRequest + 7, // 12: shutdown.StorageV2.HeadObject:input_type -> shutdown.StorageV2HeadObjectRequest + 9, // 13: shutdown.StorageV2.DeleteObject:input_type -> shutdown.StorageV2DeleteObjectRequest + 11, // 14: shutdown.StorageV2.ListObjects:input_type -> shutdown.StorageV2ListObjectsRequest + 4, // 15: shutdown.StorageV2.ReadObject:output_type -> shutdown.StorageV2ReadObjectResponse + 6, // 16: shutdown.StorageV2.WriteObject:output_type -> shutdown.StorageV2WriteObjectResponse + 8, // 17: shutdown.StorageV2.HeadObject:output_type -> shutdown.StorageV2HeadObjectResponse + 10, // 18: shutdown.StorageV2.DeleteObject:output_type -> shutdown.StorageV2DeleteObjectResponse + 12, // 19: shutdown.StorageV2.ListObjects:output_type -> shutdown.StorageV2ListObjectsResponse + 15, // [15:20] is the sub-list for method output_type + 10, // [10:15] 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.(*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[4].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[5].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[6].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[7].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[8].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[9].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[10].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[11].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[12].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 + } + } + } + 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: 13, + 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..98de6f51c --- /dev/null +++ b/integrations/storage/v2/definition/storage.proto @@ -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 +// + +syntax = "proto3"; + +package shutdown; + +import "google/protobuf/timestamp.proto"; + +option go_package = "github.com/arangodb/kube-arangodb/integrations/storage/v2/definition"; + +// Defines StorageV2 Service +service StorageV2 { + // 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 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..2f8e92dee --- /dev/null +++ b/integrations/storage/v2/definition/storage_grpc.pb.go @@ -0,0 +1,338 @@ +// 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 { + ReadObject(ctx context.Context, in *StorageV2ReadObjectRequest, opts ...grpc.CallOption) (StorageV2_ReadObjectClient, error) + WriteObject(ctx context.Context, opts ...grpc.CallOption) (StorageV2_WriteObjectClient, error) + HeadObject(ctx context.Context, in *StorageV2HeadObjectRequest, opts ...grpc.CallOption) (*StorageV2HeadObjectResponse, error) + DeleteObject(ctx context.Context, in *StorageV2DeleteObjectRequest, opts ...grpc.CallOption) (*StorageV2DeleteObjectResponse, error) + 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) ReadObject(ctx context.Context, in *StorageV2ReadObjectRequest, opts ...grpc.CallOption) (StorageV2_ReadObjectClient, error) { + stream, err := c.cc.NewStream(ctx, &StorageV2_ServiceDesc.Streams[0], "/shutdown.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], "/shutdown.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, "/shutdown.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, "/shutdown.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], "/shutdown.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 { + ReadObject(*StorageV2ReadObjectRequest, StorageV2_ReadObjectServer) error + WriteObject(StorageV2_WriteObjectServer) error + HeadObject(context.Context, *StorageV2HeadObjectRequest) (*StorageV2HeadObjectResponse, error) + DeleteObject(context.Context, *StorageV2DeleteObjectRequest) (*StorageV2DeleteObjectResponse, error) + ListObjects(*StorageV2ListObjectsRequest, StorageV2_ListObjectsServer) error + mustEmbedUnimplementedStorageV2Server() +} + +// UnimplementedStorageV2Server must be embedded to have forward compatible implementations. +type UnimplementedStorageV2Server struct { +} + +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_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: "/shutdown.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: "/shutdown.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: "shutdown.StorageV2", + HandlerType: (*StorageV2Server)(nil), + Methods: []grpc.MethodDesc{ + { + 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", +} From d69678b8fb5437cd4356e7ffb0d5467ddc3e5065 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 1 Nov 2024 13:27:30 +0100 Subject: [PATCH 15/69] [Feature] AWS Client (#1755) --- CHANGELOG.md | 1 + go.mod | 2 + go.sum | 7 ++ pkg/util/aws/config.go | 89 +++++++++++++++++++++++++ pkg/util/aws/file.go | 86 ++++++++++++++++++++++++ pkg/util/aws/http.go | 44 +++++++++++++ pkg/util/aws/impersonate.go | 89 +++++++++++++++++++++++++ pkg/util/aws/provider.go | 127 ++++++++++++++++++++++++++++++++++++ pkg/util/aws/tls.go | 58 ++++++++++++++++ pkg/util/file.go | 26 ++++++++ 10 files changed, 529 insertions(+) create mode 100644 pkg/util/aws/config.go create mode 100644 pkg/util/aws/file.go create mode 100644 pkg/util/aws/http.go create mode 100644 pkg/util/aws/impersonate.go create mode 100644 pkg/util/aws/provider.go create mode 100644 pkg/util/aws/tls.go diff --git a/CHANGELOG.md b/CHANGELOG.md index e5a78b005..d35fbb8ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - (Maintenance) Inspector Generics - (Bugfix) Fix Gateway Options - (Feature) StorageV2 Integration Service Definition +- (Feature) AWS Client ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/go.mod b/go.mod index a859e606c..7ef2eef63 100644 --- a/go.mod +++ b/go.mod @@ -88,6 +88,7 @@ require ( 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/aws/aws-sdk-go v1.55.5 // 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 @@ -146,6 +147,7 @@ require ( 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 diff --git a/go.sum b/go.sum index 7e8ef8b29..dc872b988 100644 --- a/go.sum +++ b/go.sum @@ -50,6 +50,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd 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= @@ -104,6 +106,7 @@ 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= @@ -268,6 +271,9 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 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/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= @@ -432,6 +438,7 @@ 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/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 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= 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..e8678ebc1 --- /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 credentials.Value{}, 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/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() +} From 77fc964af5d7bf4f97190f07ce52437920e05b3e Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Mon, 4 Nov 2024 09:48:21 +0100 Subject: [PATCH 16/69] [Feature] [Platform] Storage V1Alpha1 (#1756) --- CHANGELOG.md | 1 + Makefile | 12 +- .../templates/deployment-operator/role.yaml | 6 +- .../templates/networking-operator/role.yaml | 57 +--- .../templates/deployment-operator/role.yaml | 6 +- .../templates/networking-operator/role.yaml | 57 +--- .../templates/deployment-operator/role.yaml | 6 +- .../templates/networking-operator/role.yaml | 57 +--- .../templates/deployment-operator/role.yaml | 3 + docs/api/ArangoPlatformStorage.V1Alpha1.md | 126 +++++++++ go.mod | 6 +- .../storage/v2/definition/storage.pb.go | 39 ++- .../storage/v2/definition/storage_grpc.pb.go | 10 + internal/cr_validation_test.go | 10 + internal/docs_test.go | 13 + pkg/apis/platform/definitions.go | 29 ++ pkg/apis/platform/v1alpha1/conditions.go | 28 ++ pkg/apis/platform/v1alpha1/doc.go | 23 ++ pkg/apis/platform/v1alpha1/register.go | 55 ++++ pkg/apis/platform/v1alpha1/storage.go | 69 +++++ pkg/apis/platform/v1alpha1/storage_spec.go | 62 +++++ .../platform/v1alpha1/storage_spec_backend.go | 50 ++++ .../v1alpha1/storage_spec_backend_s3.go | 132 +++++++++ .../platform/v1alpha1/storage_spec_mode.go | 60 ++++ .../v1alpha1/storage_spec_mode_sidecar.go | 24 ++ .../platform/v1alpha1/storage_spec_test.go | 51 ++++ pkg/apis/platform/v1alpha1/storage_status.go | 35 +++ .../v1alpha1/zz_generated.deepcopy.go | 256 ++++++++++++++++++ pkg/crd/crds/crds.go | 3 + pkg/crd/crds/crds_test.go | 1 + pkg/crd/crds/platform-storage.go | 51 ++++ .../platform-storage.schema.generated.yaml | 79 ++++++ pkg/crd/crds/platform-storage.yaml | 22 ++ pkg/crd/platform.go | 40 +++ pkg/deployment/resources/inspector/aps.go | 126 +++++++++ .../resources/inspector/aps_anonymous.go | 45 +++ pkg/deployment/resources/inspector/aps_gvk.go | 35 +++ pkg/deployment/resources/inspector/aps_mod.go | 46 ++++ .../resources/inspector/inspector.go | 15 + .../resources/inspector/inspector_test.go | 4 +- .../resources/inspector/pdbs_version_test.go | 2 +- .../resources/inspector/throttles.go | 1 + pkg/deployment/resources/pod_creator.go | 11 +- .../clientset/versioned/clientset.go | 13 + .../versioned/fake/clientset_generated.go | 7 + .../clientset/versioned/fake/register.go | 2 + .../clientset/versioned/scheme/register.go | 2 + .../v1alpha1/arangoplatformstorage.go | 73 +++++ .../versioned/typed/platform/v1alpha1/doc.go | 24 ++ .../typed/platform/v1alpha1/fake/doc.go | 24 ++ .../fake/fake_arangoplatformstorage.go | 151 +++++++++++ .../v1alpha1/fake/fake_platform_client.go | 44 +++ .../platform/v1alpha1/generated_expansion.go | 25 ++ .../platform/v1alpha1/platform_client.go | 111 ++++++++ .../informers/externalversions/factory.go | 6 + .../informers/externalversions/generic.go | 5 + .../externalversions/platform/interface.go | 50 ++++ .../v1alpha1/arangoplatformstorage.go | 94 +++++++ .../platform/v1alpha1/interface.go | 49 ++++ .../v1alpha1/arangoplatformstorage.go | 74 +++++ .../platform/v1alpha1/expansion_generated.go | 31 +++ .../arangoplatformstorage/definition.go | 45 +++ .../arangoplatformstorage/generic.go | 43 +++ .../inspector/constants/aps_constants.go | 66 +++++ .../inspector/definitions/components.go | 2 + pkg/util/k8sutil/inspector/inspector.go | 2 + pkg/util/k8sutil/inspector/mods/mods.go | 6 + .../k8sutil/inspector/throttle/throttle.go | 14 +- pkg/util/tests/kubernetes.go | 48 ++++ pkg/util/tests/kubernetes_test.go | 2 + 70 files changed, 2589 insertions(+), 188 deletions(-) create mode 100644 docs/api/ArangoPlatformStorage.V1Alpha1.md create mode 100644 pkg/apis/platform/definitions.go create mode 100644 pkg/apis/platform/v1alpha1/conditions.go create mode 100644 pkg/apis/platform/v1alpha1/doc.go create mode 100644 pkg/apis/platform/v1alpha1/register.go create mode 100644 pkg/apis/platform/v1alpha1/storage.go create mode 100644 pkg/apis/platform/v1alpha1/storage_spec.go create mode 100644 pkg/apis/platform/v1alpha1/storage_spec_backend.go create mode 100644 pkg/apis/platform/v1alpha1/storage_spec_backend_s3.go create mode 100644 pkg/apis/platform/v1alpha1/storage_spec_mode.go create mode 100644 pkg/apis/platform/v1alpha1/storage_spec_mode_sidecar.go create mode 100644 pkg/apis/platform/v1alpha1/storage_spec_test.go create mode 100644 pkg/apis/platform/v1alpha1/storage_status.go create mode 100644 pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go create mode 100644 pkg/crd/crds/platform-storage.go create mode 100644 pkg/crd/crds/platform-storage.schema.generated.yaml create mode 100644 pkg/crd/crds/platform-storage.yaml create mode 100644 pkg/crd/platform.go create mode 100644 pkg/deployment/resources/inspector/aps.go create mode 100644 pkg/deployment/resources/inspector/aps_anonymous.go create mode 100644 pkg/deployment/resources/inspector/aps_gvk.go create mode 100644 pkg/deployment/resources/inspector/aps_mod.go create mode 100644 pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformstorage.go create mode 100644 pkg/generated/clientset/versioned/typed/platform/v1alpha1/doc.go create mode 100644 pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/doc.go create mode 100644 pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformstorage.go create mode 100644 pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_platform_client.go create mode 100644 pkg/generated/clientset/versioned/typed/platform/v1alpha1/generated_expansion.go create mode 100644 pkg/generated/clientset/versioned/typed/platform/v1alpha1/platform_client.go create mode 100644 pkg/generated/informers/externalversions/platform/interface.go create mode 100644 pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformstorage.go create mode 100644 pkg/generated/informers/externalversions/platform/v1alpha1/interface.go create mode 100644 pkg/generated/listers/platform/v1alpha1/arangoplatformstorage.go create mode 100644 pkg/generated/listers/platform/v1alpha1/expansion_generated.go create mode 100644 pkg/util/k8sutil/inspector/arangoplatformstorage/definition.go create mode 100644 pkg/util/k8sutil/inspector/arangoplatformstorage/generic.go create mode 100644 pkg/util/k8sutil/inspector/constants/aps_constants.go diff --git a/CHANGELOG.md b/CHANGELOG.md index d35fbb8ae..5435f1734 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ - (Bugfix) Fix Gateway Options - (Feature) StorageV2 Integration Service Definition - (Feature) AWS Client +- (Feature) (Platform) Storage V1Alpha1 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/Makefile b/Makefile index f987cc762..73284b149 100644 --- a/Makefile +++ b/Makefile @@ -927,14 +927,14 @@ 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 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/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-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/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/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/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/templates/deployment-operator/role.yaml b/chart/kube-arangodb/templates/deployment-operator/role.yaml index ad6fd3796..1452d38b5 100644 --- a/chart/kube-arangodb/templates/deployment-operator/role.yaml +++ b/chart/kube-arangodb/templates/deployment-operator/role.yaml @@ -38,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/docs/api/ArangoPlatformStorage.V1Alpha1.md b/docs/api/ArangoPlatformStorage.V1Alpha1.md new file mode 100644 index 000000000..b02be87b2 --- /dev/null +++ b/docs/api/ArangoPlatformStorage.V1Alpha1.md @@ -0,0 +1,126 @@ +--- +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.43/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.43/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.43/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.43/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.43/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.43/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.43/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.43/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.43/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.43/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.43/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.43/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.43/pkg/apis/platform/v1alpha1/storage_spec_backend_s3.go#L55) + +Region defines the availability zone name. + +Default Value: `""` + +*** + +### .spec.deployment + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/platform/v1alpha1/storage_spec.go#L29) + +Deployment specifies the ArangoDeployment object name + diff --git a/go.mod b/go.mod index 7ef2eef63..f4a3326d4 100644 --- a/go.mod +++ b/go.mod @@ -72,7 +72,10 @@ require ( sigs.k8s.io/yaml v1.4.0 ) -require helm.sh/helm/v3 v3.16.2 +require ( + github.com/aws/aws-sdk-go v1.55.5 + helm.sh/helm/v3 v3.16.2 +) require ( cel.dev/expr v0.15.0 // indirect @@ -88,7 +91,6 @@ require ( 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/aws/aws-sdk-go v1.55.5 // 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 diff --git a/integrations/storage/v2/definition/storage.pb.go b/integrations/storage/v2/definition/storage.pb.go index c72fc2c7e..58b9c71dc 100644 --- a/integrations/storage/v2/definition/storage.pb.go +++ b/integrations/storage/v2/definition/storage.pb.go @@ -41,11 +41,13 @@ const ( _ = 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"` } @@ -88,12 +90,15 @@ func (x *StorageV2Path) GetPath() string { return "" } +// Defines Object Details type StorageV2Object struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Path *StorageV2Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + // 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"` } @@ -143,12 +148,15 @@ func (x *StorageV2Object) GetInfo() *StorageV2ObjectInfo { return nil } +// Defines Object Info type StorageV2ObjectInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Size uint64 `protobuf:"varint,1,opt,name=size,proto3" json:"size,omitempty"` + // 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"` } @@ -198,11 +206,13 @@ func (x *StorageV2ObjectInfo) GetLastUpdated() *timestamppb.Timestamp { return nil } +// 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"` } @@ -245,11 +255,13 @@ func (x *StorageV2ReadObjectRequest) GetPath() *StorageV2Path { 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"` } @@ -292,13 +304,16 @@ func (x *StorageV2ReadObjectResponse) GetChunk() []byte { return nil } +// StorageV2 WriteObject Request type StorageV2WriteObjectRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Path *StorageV2Path `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - Chunk []byte `protobuf:"bytes,2,opt,name=chunk,proto3" json:"chunk,omitempty"` + // 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() { @@ -347,12 +362,15 @@ func (x *StorageV2WriteObjectRequest) GetChunk() []byte { return nil } +// StorageV2 WriteObject Response type StorageV2WriteObjectResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Bytes int64 `protobuf:"varint,1,opt,name=bytes,proto3" json:"bytes,omitempty"` + // 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"` } @@ -402,11 +420,13 @@ func (x *StorageV2WriteObjectResponse) GetChecksum() string { 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"` } @@ -449,11 +469,13 @@ func (x *StorageV2HeadObjectRequest) GetPath() *StorageV2Path { 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"` } @@ -496,11 +518,13 @@ func (x *StorageV2HeadObjectResponse) GetInfo() *StorageV2ObjectInfo { 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"` } @@ -543,6 +567,7 @@ func (x *StorageV2DeleteObjectRequest) GetPath() *StorageV2Path { return nil } +// StorageV2 DeleteObject Response type StorageV2DeleteObjectResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -581,11 +606,13 @@ func (*StorageV2DeleteObjectResponse) Descriptor() ([]byte, []int) { return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{10} } +// 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"` } @@ -628,11 +655,13 @@ func (x *StorageV2ListObjectsRequest) GetPath() *StorageV2Path { 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"` } diff --git a/integrations/storage/v2/definition/storage_grpc.pb.go b/integrations/storage/v2/definition/storage_grpc.pb.go index 2f8e92dee..dce0ef1eb 100644 --- a/integrations/storage/v2/definition/storage_grpc.pb.go +++ b/integrations/storage/v2/definition/storage_grpc.pb.go @@ -22,10 +22,15 @@ 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 StorageV2Client interface { + // 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) } @@ -157,10 +162,15 @@ func (x *storageV2ListObjectsClient) Recv() (*StorageV2ListObjectsResponse, erro // All implementations must embed UnimplementedStorageV2Server // for forward compatibility type StorageV2Server interface { + // 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() } diff --git a/internal/cr_validation_test.go b/internal/cr_validation_test.go index c376d4c4d..d8b4c0bc6 100644 --- a/internal/cr_validation_test.go +++ b/internal/cr_validation_test.go @@ -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" @@ -329,6 +330,15 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, }, + "platform-storage": { + fmt.Sprintf("%s/pkg/apis/platform/v1alpha1", root): { + "v1alpha1": { + objects: map[string]interface{}{ + "spec": platformApi.ArangoPlatformStorage{}.Spec, + }, + }, + }, + }, } for filePrefix, packagesToVersion := range input { diff --git a/internal/docs_test.go b/internal/docs_test.go index 291fce799..eb0a1f027 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,18 @@ func Test_GenerateAPIDocs(t *testing.T) { }, }, }, + "platform": map[string]inputPackage{ + "v1alpha1": { + Types: inputPackageTypes{ + "ArangoPlatformStorage.V1Alpha1": { + "Spec": platformApi.ArangoPlatformStorage{}.Spec, + }, + }, + Shared: []string{ + "shared/v1", + }, + }, + }, } for name, versions := range input { diff --git a/pkg/apis/platform/definitions.go b/pkg/apis/platform/definitions.go new file mode 100644 index 000000000..00c51f4cf --- /dev/null +++ b/pkg/apis/platform/definitions.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 platform + +const ( + ArangoPlatformStorageCRDName = ArangoPlatformStorageResourcePlural + "." + ArangoPlatformGroupName + ArangoPlatformStorageResourceKind = "ArangoPlatformStorage" + ArangoPlatformStorageResourcePlural = "arangoplatformstorages" + + ArangoPlatformGroupName = "platform.arangodb.com" +) diff --git a/pkg/apis/platform/v1alpha1/conditions.go b/pkg/apis/platform/v1alpha1/conditions.go new file mode 100644 index 000000000..74773f62c --- /dev/null +++ b/pkg/apis/platform/v1alpha1/conditions.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 v1alpha1 + +import api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + +const ( + 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..9dc2ac7a0 --- /dev/null +++ b/pkg/apis/platform/v1alpha1/register.go @@ -0,0 +1,55 @@ +// +// 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/networking" +) + +const ( + ArangoPlatformVersion = "v1alpha1" +) + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme + + SchemeGroupVersion = schema.GroupVersion{Group: networking.ArangoNetworkingGroupName, 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{}, + ) + 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..95ce3ae73 --- /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/networking" +) + +// +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: networking.ArangoRouteResourceKind, + 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..44e1c6014 --- /dev/null +++ b/pkg/apis/platform/v1alpha1/storage_spec.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 v1alpha1 + +import ( + shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" +) + +type ArangoPlatformStorageSpec struct { + // Deployment specifies the ArangoDeployment object name + Deployment *string `json:"deployment,omitempty"` + + // Backend defines how storage is implemented + Backend *ArangoPlatformStorageSpecBackend `json:"backend,omitempty"` +} + +func (s *ArangoPlatformStorageSpec) GetDeployment() string { + if s == nil || s.Deployment == nil { + return "" + } + + return *s.Deployment +} + +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/apis/platform/v1alpha1/storage_status.go b/pkg/apis/platform/v1alpha1/storage_status.go new file mode 100644 index 000000000..1b9f473c9 --- /dev/null +++ b/pkg/apis/platform/v1alpha1/storage_status.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 v1alpha1 + +import ( + api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" + sharedApi "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1" +) + +type ArangoPlatformStorageStatus struct { + // Conditions specific to the entire storage + // +doc/type: api.Conditions + Conditions api.ConditionList `json:"conditions,omitempty"` + + // Deployment keeps the ArangoDeployment reference + Deployment *sharedApi.Object `json:"deployment,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..9f6b3c8c4 --- /dev/null +++ b/pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,256 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +// +// 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 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 *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.Deployment != nil { + in, out := &in.Deployment, &out.Deployment + *out = new(string) + **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]) + } + } + if in.Deployment != nil { + in, out := &in.Deployment, &out.Deployment + *out = new(v1.Object) + (*in).DeepCopyInto(*out) + } + 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 +} diff --git a/pkg/crd/crds/crds.go b/pkg/crd/crds/crds.go index 7bc20920b..cd7de36ac 100644 --- a/pkg/crd/crds/crds.go +++ b/pkg/crd/crds/crds.go @@ -97,6 +97,9 @@ func AllDefinitions() []Definition { // Networking NetworkingRouteDefinitionWithOptions(), + + // Platform + PlatformStorageDefinitionWithOptions(), } } diff --git a/pkg/crd/crds/crds_test.go b/pkg/crd/crds/crds_test.go index e5d4f425f..5fde00236 100644 --- a/pkg/crd/crds/crds_test.go +++ b/pkg/crd/crds/crds_test.go @@ -153,6 +153,7 @@ func Test_CRDGetters(t *testing.T) { SchedulerCronJobWithOptions, AnalyticsGAEWithOptions, NetworkingRouteWithOptions, + PlatformStorageWithOptions, } require.Equal(t, len(AllDefinitions()), len(getters)) 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..13b5fce6b --- /dev/null +++ b/pkg/crd/crds/platform-storage.schema.generated.yaml @@ -0,0 +1,79 @@ +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 + deployment: + description: Deployment specifies the ArangoDeployment object name + 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-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/platform.go b/pkg/crd/platform.go new file mode 100644 index 000000000..50ed29256 --- /dev/null +++ b/pkg/crd/platform.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 crd + +import ( + "github.com/arangodb/kube-arangodb/pkg/crd/crds" +) + +func init() { + defs := []func(...func(options *crds.CRDOptions)) crds.Definition{ + crds.PlatformStorageDefinitionWithOptions, + } + 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/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/inspector.go b/pkg/deployment/resources/inspector/inspector.go index cea92e378..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 @@ -178,6 +180,10 @@ func (i *inspectorState) RegisterInformers(k8s informers.SharedInformerFactory, 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,6 +352,10 @@ func (i *inspectorState) ArangoProfile() arangoprofile.Definition { return i.arangoProfiles } +func (i *inspectorState) ArangoPlatformStorage() arangoplatformstorage.Definition { + return i.arangoPlatformStorages +} + func (i *inspectorState) Refresh(ctx context.Context) error { return i.refresh(ctx, inspectorLoadersList...) } @@ -505,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 } @@ -539,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/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/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/pod_creator.go b/pkg/deployment/resources/pod_creator.go index 50a322062..64b2f00b7 100644 --- a/pkg/deployment/resources/pod_creator.go +++ b/pkg/deployment/resources/pod_creator.go @@ -754,7 +754,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") @@ -784,19 +783,15 @@ func (r *Resources) EnsurePods(ctx context.Context, cachedStatus inspectorInterf 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/generated/clientset/versioned/clientset.go b/pkg/generated/clientset/versioned/clientset.go index a4de07d21..ee030d823 100644 --- a/pkg/generated/clientset/versioned/clientset.go +++ b/pkg/generated/clientset/versioned/clientset.go @@ -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 2a0c5afa2..279d9943b 100644 --- a/pkg/generated/clientset/versioned/fake/clientset_generated.go +++ b/pkg/generated/clientset/versioned/fake/clientset_generated.go @@ -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" @@ -151,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/register.go b/pkg/generated/clientset/versioned/fake/register.go index 1804338cb..ebd2e5994 100644 --- a/pkg/generated/clientset/versioned/fake/register.go +++ b/pkg/generated/clientset/versioned/fake/register.go @@ -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/register.go b/pkg/generated/clientset/versioned/scheme/register.go index 3e5ad3944..adb58206b 100644 --- a/pkg/generated/clientset/versioned/scheme/register.go +++ b/pkg/generated/clientset/versioned/scheme/register.go @@ -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/platform/v1alpha1/arangoplatformstorage.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformstorage.go new file mode 100644 index 000000000..11034f8e1 --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformstorage.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 +// + +// 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..f45dab6c5 --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/doc.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 +// + +// 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..cc487d814 --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/doc.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 +// + +// 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_arangoplatformstorage.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformstorage.go new file mode 100644 index 000000000..746fdf899 --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformstorage.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 +// + +// 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..285ad792a --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_platform_client.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 +// + +// 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) 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..6cf12f503 --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/generated_expansion.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 +// + +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +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..51a078236 --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/platform_client.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 +// + +// 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 + ArangoPlatformStoragesGetter +} + +// PlatformV1alpha1Client is used to interact with features provided by the platform.arangodb.com group. +type PlatformV1alpha1Client struct { + restClient rest.Interface +} + +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/informers/externalversions/factory.go b/pkg/generated/informers/externalversions/factory.go index 93b1f88ba..a557b93a2 100644 --- a/pkg/generated/informers/externalversions/factory.go +++ b/pkg/generated/informers/externalversions/factory.go @@ -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" @@ -272,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 @@ -301,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..1dac5ea7c 100644 --- a/pkg/generated/informers/externalversions/generic.go +++ b/pkg/generated/informers/externalversions/generic.go @@ -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,10 @@ 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("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/platform/interface.go b/pkg/generated/informers/externalversions/platform/interface.go new file mode 100644 index 000000000..8b92b8640 --- /dev/null +++ b/pkg/generated/informers/externalversions/platform/interface.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 +// + +// 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/arangoplatformstorage.go b/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformstorage.go new file mode 100644 index 000000000..5458fb7df --- /dev/null +++ b/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformstorage.go @@ -0,0 +1,94 @@ +// +// 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 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..991fdb0f3 --- /dev/null +++ b/pkg/generated/informers/externalversions/platform/v1alpha1/interface.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 +// + +// 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 { + // 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} +} + +// 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/listers/platform/v1alpha1/arangoplatformstorage.go b/pkg/generated/listers/platform/v1alpha1/arangoplatformstorage.go new file mode 100644 index 000000000..30318f3eb --- /dev/null +++ b/pkg/generated/listers/platform/v1alpha1/arangoplatformstorage.go @@ -0,0 +1,74 @@ +// +// 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 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..4a27a39b2 --- /dev/null +++ b/pkg/generated/listers/platform/v1alpha1/expansion_generated.go @@ -0,0 +1,31 @@ +// +// 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 lister-gen. DO NOT EDIT. + +package v1alpha1 + +// 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/util/k8sutil/inspector/arangoplatformstorage/definition.go b/pkg/util/k8sutil/inspector/arangoplatformstorage/definition.go new file mode 100644 index 000000000..b6d8a8364 --- /dev/null +++ b/pkg/util/k8sutil/inspector/arangoplatformstorage/definition.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 arangoplatformstorage + +import ( + 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 { + ArangoPlatformStorage() Definition +} + +type Definition interface { + refresh.Inspector + + gvk.GK + anonymous.Impl + + Version() version.Version + + V1Alpha1() (generic.Inspector[*platformApi.ArangoPlatformStorage], error) +} diff --git a/pkg/util/k8sutil/inspector/arangoplatformstorage/generic.go b/pkg/util/k8sutil/inspector/arangoplatformstorage/generic.go new file mode 100644 index 000000000..4eb46f852 --- /dev/null +++ b/pkg/util/k8sutil/inspector/arangoplatformstorage/generic.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 arangoplatformstorage + +import ( + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/generic" +) + +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)) + + 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/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/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 09c622437..4532967dd 100644 --- a/pkg/util/k8sutil/inspector/mods/mods.go +++ b/pkg/util/k8sutil/inspector/mods/mods.go @@ -27,6 +27,7 @@ import ( 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" ) @@ -71,6 +72,10 @@ type ArangoMemberMods interface { V1() generic.ModStatusClient[*api.ArangoMember] } +type ArangoPlatformStorageMods interface { + V1Alpha1() generic.ModStatusClient[*platformApi.ArangoPlatformStorage] +} + type ArangoTaskMods interface { V1() generic.ModStatusClient[*api.ArangoTask] } @@ -103,4 +108,5 @@ type Mods interface { ArangoClusterSynchronizationModInterface() ArangoClusterSynchronizationMods ArangoRouteModInterface() ArangoRouteMods ArangoProfileModInterface() ArangoProfileMods + ArangoPlatformStorageModInterface() ArangoPlatformStorageMods } 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/tests/kubernetes.go b/pkg/util/tests/kubernetes.go index ba3d8d203..e19faa137 100644 --- a/pkg/util/tests/kubernetes.go +++ b/pkg/util/tests/kubernetes.go @@ -47,6 +47,8 @@ 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" @@ -299,6 +301,12 @@ 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) default: require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String())) } @@ -506,6 +514,12 @@ 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) default: require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String())) } @@ -679,6 +693,11 @@ 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{})) default: require.Fail(t, fmt.Sprintf("Unable to delete object: %s", reflect.TypeOf(v).String())) } @@ -1170,6 +1189,21 @@ 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 + } default: require.Fail(t, fmt.Sprintf("Unable to get object: %s", reflect.TypeOf(v).String())) } @@ -1414,6 +1448,14 @@ 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())) default: require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String())) } @@ -1643,6 +1685,12 @@ 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, + } 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 82e5b7bed..b47653fe7 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" @@ -98,4 +99,5 @@ func Test_NewMetaObject(t *testing.T) { NewMetaObjectRun[*schedulerApi.ArangoSchedulerCronJob](t) NewMetaObjectRun[*analyticsApi.GraphAnalyticsEngine](t) NewMetaObjectRun[*networkingApi.ArangoRoute](t) + NewMetaObjectRun[*platformApi.ArangoPlatformStorage](t) } From bfd6c8e63d3cac92cb7ab242cd9cd04bc79758a0 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Mon, 4 Nov 2024 14:51:16 +0100 Subject: [PATCH 17/69] [Feature] StorageV2 Integration Service Implementation (#1757) --- CHANGELOG.md | 1 + integrations/shared/v1/definition/kv.go | 76 +++ integrations/shared/v1/definition/kv.pb.go | 179 +++++++ integrations/shared/v1/definition/kv.proto | 34 ++ integrations/storage/v2/configuration.go | 70 +++ integrations/storage/v2/logger.go | 25 + integrations/storage/v2/shared/consts.go | 34 ++ integrations/storage/v2/shared/io.go | 63 +++ .../storage/v2/shared/s3/configuration.go | 57 ++ integrations/storage/v2/shared/s3/delete.go | 44 ++ integrations/storage/v2/shared/s3/errors.go | 49 ++ integrations/storage/v2/shared/s3/head.go | 48 ++ integrations/storage/v2/shared/s3/io.go | 66 +++ integrations/storage/v2/shared/s3/io_test.go | 121 +++++ integrations/storage/v2/shared/s3/list.go | 101 ++++ integrations/storage/v2/shared/s3/read.go | 151 ++++++ .../storage/v2/shared/s3/wr_offset.go | 57 ++ integrations/storage/v2/shared/s3/write.go | 142 +++++ integrations/storage/v2/storage.go | 279 ++++++++++ integrations/storage/v2/storage_test.go | 487 ++++++++++++++++++ integrations/storage/v2/suite_test.go | 110 ++++ pkg/util/errors/errors.go | 37 ++ pkg/util/errors/grpc.go | 74 +++ pkg/util/parallel.go | 36 +- pkg/util/refs.go | 5 + 25 files changed, 2345 insertions(+), 1 deletion(-) create mode 100644 integrations/shared/v1/definition/kv.go create mode 100644 integrations/shared/v1/definition/kv.pb.go create mode 100644 integrations/shared/v1/definition/kv.proto create mode 100644 integrations/storage/v2/configuration.go create mode 100644 integrations/storage/v2/logger.go create mode 100644 integrations/storage/v2/shared/consts.go create mode 100644 integrations/storage/v2/shared/io.go create mode 100644 integrations/storage/v2/shared/s3/configuration.go create mode 100644 integrations/storage/v2/shared/s3/delete.go create mode 100644 integrations/storage/v2/shared/s3/errors.go create mode 100644 integrations/storage/v2/shared/s3/head.go create mode 100644 integrations/storage/v2/shared/s3/io.go create mode 100644 integrations/storage/v2/shared/s3/io_test.go create mode 100644 integrations/storage/v2/shared/s3/list.go create mode 100644 integrations/storage/v2/shared/s3/read.go create mode 100644 integrations/storage/v2/shared/s3/wr_offset.go create mode 100644 integrations/storage/v2/shared/s3/write.go create mode 100644 integrations/storage/v2/storage.go create mode 100644 integrations/storage/v2/storage_test.go create mode 100644 integrations/storage/v2/suite_test.go create mode 100644 pkg/util/errors/grpc.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 5435f1734..48fa04464 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - (Feature) StorageV2 Integration Service Definition - (Feature) AWS Client - (Feature) (Platform) Storage V1Alpha1 +- (Feature) StorageV2 Integration Service Implementation ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD 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/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/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/io.go b/integrations/storage/v2/shared/io.go new file mode 100644 index 000000000..aafa3f1d9 --- /dev/null +++ b/integrations/storage/v2/shared/io.go @@ -0,0 +1,63 @@ +// +// 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 { + 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/io.go b/integrations/storage/v2/shared/s3/io.go new file mode 100644 index 000000000..6059d66a5 --- /dev/null +++ b/integrations/storage/v2/shared/s3/io.go @@ -0,0 +1,66 @@ +// +// 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" + "fmt" + + "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(key string) string { + return fmt.Sprintf("%s%s", i.config.BucketPrefix, 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..999d71bc7 --- /dev/null +++ b/integrations/storage/v2/shared/s3/io_test.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 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" + 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 getClient(t *testing.T) pbImplStorageV2Shared.IO { + v, ok := TestAwsProfile.Lookup() + if !ok { + t.Skipf("Client does not exists") + } + + b, ok := TestAWSBucket.Lookup() + if !ok { + t.Skipf("Bucket does not exists") + } + + var c awsHelper.Config + c.Region = "eu-central-1" + + c.Provider.Config = awsHelper.ProviderConfig{ + Profile: v, + } + + r, ok := TestAwsRole.Lookup() + if ok { + c.Provider.Impersonate = awsHelper.ProviderImpersonate{ + Role: r, + Name: "Test", + } + } + + var cfg Configuration + + cfg.Client = c + cfg.BucketName = b + 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) +} diff --git a/integrations/storage/v2/shared/s3/list.go b/integrations/storage/v2/shared/s3/list.go new file mode 100644 index 000000000..9ecbedc27 --- /dev/null +++ b/integrations/storage/v2/shared/s3/list.go @@ -0,0 +1,101 @@ +// +// 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" + "io" + "strings" + "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: strings.TrimPrefix(*obj.Key, l.parent.key(l.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..79bf2a2fa --- /dev/null +++ b/integrations/storage/v2/storage.go @@ -0,0 +1,279 @@ +// +// 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" + "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() + if path == "" { + return status.Errorf(codes.InvalidArgument, "path missing") + } + + 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 + } + } +} diff --git a/integrations/storage/v2/storage_test.go b/integrations/storage/v2/storage_test.go new file mode 100644 index 000000000..70b849a79 --- /dev/null +++ b/integrations/storage/v2/storage_test.go @@ -0,0 +1,487 @@ +// +// 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 ( + "bytes" + "context" + "crypto/rand" + "fmt" + "io" + "sort" + "strings" + "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 listAllFilesHelper(t *testing.T, ctx context.Context, h pbStorageV2.StorageV2Client, prefix string) []*pbStorageV2.StorageV2Object { + var r []*pbStorageV2.StorageV2Object + + res, err := h.ListObjects(ctx, &pbStorageV2.StorageV2ListObjectsRequest{ + Path: &pbStorageV2.StorageV2Path{ + Path: prefix, + }, + }) + require.NoError(t, err) + + for { + files, err := res.Recv() + if errors.Is(err, io.EOF) { + break + } + require.NoError(t, err) + + r = append(r, files.GetFiles()...) + } + + return r +} + +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) { + wr, err := h.WriteObject(ctx) + require.NoError(t, err) + + buff := make([]byte, 1024) + + cf := bytes.NewReader(data) + + for { + n, err := cf.Read(buff) + if err != nil { + if errors.Is(err, io.EOF) { + break + } + + require.NoError(t, err) + } + + require.NoError(t, wr.Send(&pbStorageV2.StorageV2WriteObjectRequest{ + Path: &pbStorageV2.StorageV2Path{ + Path: in, + }, + Chunk: buff[:n], + })) + } + + ds, err := wr.CloseAndRecv() + 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 := listAllFilesHelper(t, ctx, h, prefix) + + require.Len(t, revcFiles, len(files)) + + for id := range files { + require.EqualValues(t, strings.TrimPrefix(files[id], prefix), revcFiles[id].GetPath().GetPath()) + require.EqualValues(t, revcFiles[id].GetInfo().GetSize(), len(data)) + } + }) + + t.Run("ListSubFolder", func(t *testing.T) { + revcFiles := listAllFilesHelper(t, ctx, h, fmt.Sprintf("%spath0000/", prefix)) + + require.Len(t, revcFiles, 1) + + require.EqualValues(t, "file", revcFiles[0].GetPath().GetPath()) + require.EqualValues(t, len(data), revcFiles[0].GetInfo().GetSize()) + }) + + t.Run("ListMisSubFolder", func(t *testing.T) { + revcFiles := listAllFilesHelper(t, ctx, h, fmt.Sprintf("%snon-existent/", prefix)) + + 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) { + wr, err := h.WriteObject(ctx) + require.NoError(t, err) + + buff := make([]byte, 1024) + + cf := bytes.NewReader(dataOne) + + for { + n, err := cf.Read(buff) + if err != nil { + if errors.Is(err, io.EOF) { + break + } + + require.NoError(t, err) + } + + require.NoError(t, wr.Send(&pbStorageV2.StorageV2WriteObjectRequest{ + Path: &pbStorageV2.StorageV2Path{ + Path: name, + }, + Chunk: buff[:n], + })) + } + + ds, err := wr.CloseAndRecv() + 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) { + wr, err := h.ReadObject(ctx, &pbStorageV2.StorageV2ReadObjectRequest{ + Path: &pbStorageV2.StorageV2Path{Path: name}, + }) + require.NoError(t, err) + + data := bytes.NewBuffer(nil) + + for { + resp, err := wr.Recv() + if errors.Is(err, io.EOF) { + break + } + require.NoError(t, err) + + _, err = util.WriteAll(data, resp.GetChunk()) + require.NoError(t, err) + } + + 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) { + wr, err := h.WriteObject(ctx) + require.NoError(t, err) + + buff := make([]byte, 1024) + + cf := bytes.NewReader(dataTwo) + + for { + n, err := cf.Read(buff) + if err != nil { + if errors.Is(err, io.EOF) { + break + } + + require.NoError(t, err) + } + + require.NoError(t, wr.Send(&pbStorageV2.StorageV2WriteObjectRequest{ + Path: &pbStorageV2.StorageV2Path{ + Path: name, + }, + Chunk: buff[:n], + })) + } + + ds, err := wr.CloseAndRecv() + 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 := listAllFilesHelper(t, ctx, h, prefix) + + t.Logf("Size: %d", len(revcFiles)) + }) + + t.Run("Send Second Object", func(t *testing.T) { + wr, err := h.WriteObject(ctx) + require.NoError(t, err) + + buff := make([]byte, 1024) + + cf := bytes.NewReader(dataOne) + + for { + n, err := cf.Read(buff) + if err != nil { + if errors.Is(err, io.EOF) { + break + } + + require.NoError(t, err) + } + + require.NoError(t, wr.Send(&pbStorageV2.StorageV2WriteObjectRequest{ + Path: &pbStorageV2.StorageV2Path{ + Path: nameTwo, + }, + Chunk: buff[:n], + })) + } + + ds, err := wr.CloseAndRecv() + 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) { + wr, err := h.ReadObject(ctx, &pbStorageV2.StorageV2ReadObjectRequest{ + Path: &pbStorageV2.StorageV2Path{Path: name}, + }) + require.NoError(t, err) + + data := bytes.NewBuffer(nil) + + for { + resp, err := wr.Recv() + if errors.Is(err, io.EOF) { + break + } + require.NoError(t, err) + + _, err = util.WriteAll(data, resp.GetChunk()) + require.NoError(t, err) + } + + 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..6b72cf374 --- /dev/null +++ b/integrations/storage/v2/suite_test.go @@ -0,0 +1,110 @@ +// +// 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" + _ "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" + awsHelper "github.com/arangodb/kube-arangodb/pkg/util/aws" + "github.com/arangodb/kube-arangodb/pkg/util/svc" + "github.com/arangodb/kube-arangodb/pkg/util/tests/tgrpc" +) + +const ( + TestAwsProfile util.EnvironmentVariable = "TEST_AWS_PROFILE" + TestAwsRole util.EnvironmentVariable = "TEST_AWS_ROLE" + TestAWSBucket util.EnvironmentVariable = "TEST_AWS_BUCKET" +) + +func getClient(t *testing.T, mods ...Mod) Configuration { + v, ok := TestAwsProfile.Lookup() + if !ok { + t.Skipf("Client does not exists") + } + + b, ok := TestAWSBucket.Lookup() + if !ok { + t.Skipf("Bucket 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", + } + } + + var scfg pbImplStorageV2SharedS3.Configuration + + scfg.Client = c + scfg.BucketName = b + 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/pkg/util/errors/errors.go b/pkg/util/errors/errors.go index 221b8948a..a0917b264 100644 --- a/pkg/util/errors/errors.go +++ b/pkg/util/errors/errors.go @@ -51,6 +51,43 @@ func CauseWithNil(err error) error { } } +func ExtractCause[T error](err error) (T, bool) { + var d T + + if err == nil { + return d, true + } + + 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 ExtractCauseHelper[T error](err error, extr func(err error) (T, bool)) (T, bool) { + var d T + + if err == nil { + return d, true + } + + if v, ok := extr(err); ok { + return v, true + } + + if err := CauseWithNil(err); err != nil { + return ExtractCauseHelper[T](err, extr) + } + + return d, false +} + func New(message string) error { return errors.New(message) } diff --git a/pkg/util/errors/grpc.go b/pkg/util/errors/grpc.go new file mode 100644 index 000000000..94b1315f1 --- /dev/null +++ b/pkg/util/errors/grpc.go @@ -0,0 +1,74 @@ +// +// 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 ( + "errors" + + "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 := ExtractCauseHelper[grpcError](err, func(err error) (grpcError, bool) { + var gs grpcError + if errors.As(err, &gs) { + return gs, true + } + + return nil, false + }) + + 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/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/refs.go b/pkg/util/refs.go index 33578874f..8926181de 100644 --- a/pkg/util/refs.go +++ b/pkg/util/refs.go @@ -21,6 +21,7 @@ package util import ( + "context" "encoding/json" "reflect" ) @@ -197,3 +198,7 @@ func InitOptional[T any](in *T, ok bool) *T { var z T return &z } + +type NextIterator[T any] interface { + Next(ctx context.Context) (T, error) +} From 70ba9f95b3e9dfd818801a6a48e6a4ab0ad29b35 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Tue, 5 Nov 2024 10:52:01 +0100 Subject: [PATCH 18/69] [Feature] [Platform] Storage V1Alpha1 RC (#1758) --- CHANGELOG.md | 1 + Makefile | 24 ++-- README.md | 3 +- .../crds/platform-storage.yaml | 22 ++++ .../templates/deployment.yaml | 3 + .../cluster-role-binding.yaml | 26 ++++ .../platform-operator/cluster-role.yaml | 22 ++++ .../platform-operator/role-binding.yaml | 25 ++++ .../templates/platform-operator/role.yaml | 23 ++++ .../crds/platform-storage.yaml | 22 ++++ .../templates/deployment.yaml | 3 + .../cluster-role-binding.yaml | 26 ++++ .../platform-operator/cluster-role.yaml | 22 ++++ .../platform-operator/role-binding.yaml | 25 ++++ .../templates/platform-operator/role.yaml | 23 ++++ .../crds/platform-storage.yaml | 22 ++++ .../templates/deployment.yaml | 3 + .../cluster-role-binding.yaml | 26 ++++ .../platform-operator/cluster-role.yaml | 22 ++++ .../platform-operator/role-binding.yaml | 25 ++++ .../templates/platform-operator/role.yaml | 23 ++++ .../kube-arangodb/crds/platform-storage.yaml | 22 ++++ chart/kube-arangodb/templates/deployment.yaml | 3 + .../cluster-role-binding.yaml | 26 ++++ .../platform-operator/cluster-role.yaml | 22 ++++ .../platform-operator/role-binding.yaml | 25 ++++ .../templates/platform-operator/role.yaml | 23 ++++ chart/kube-arangodb/values.yaml | 1 + cmd/cmd.go | 28 +++- docs/cli/arangodb_operator.md | 3 +- pkg/handlers/platform/storage/handler.go | 120 ++++++++++++++++++ .../platform/storage/handler_deployment.go | 79 ++++++++++++ pkg/handlers/platform/storage/handler_test.go | 59 +++++++++ pkg/handlers/platform/storage/local.go | 38 ++++++ pkg/handlers/platform/storage/register.go | 55 ++++++++ pkg/handlers/platform/storage/suite_test.go | 59 +++++++++ pkg/operator/operator.go | 32 +++++ pkg/operatorV2/update_wraps.go | 5 + pkg/server/server.go | 5 + pkg/util/constants/constants.go | 1 + 40 files changed, 981 insertions(+), 16 deletions(-) create mode 100644 chart/kube-arangodb-arm64/crds/platform-storage.yaml create mode 100644 chart/kube-arangodb-arm64/templates/platform-operator/cluster-role-binding.yaml create mode 100644 chart/kube-arangodb-arm64/templates/platform-operator/cluster-role.yaml create mode 100644 chart/kube-arangodb-arm64/templates/platform-operator/role-binding.yaml create mode 100644 chart/kube-arangodb-arm64/templates/platform-operator/role.yaml create mode 100644 chart/kube-arangodb-enterprise-arm64/crds/platform-storage.yaml create mode 100644 chart/kube-arangodb-enterprise-arm64/templates/platform-operator/cluster-role-binding.yaml create mode 100644 chart/kube-arangodb-enterprise-arm64/templates/platform-operator/cluster-role.yaml create mode 100644 chart/kube-arangodb-enterprise-arm64/templates/platform-operator/role-binding.yaml create mode 100644 chart/kube-arangodb-enterprise-arm64/templates/platform-operator/role.yaml create mode 100644 chart/kube-arangodb-enterprise/crds/platform-storage.yaml create mode 100644 chart/kube-arangodb-enterprise/templates/platform-operator/cluster-role-binding.yaml create mode 100644 chart/kube-arangodb-enterprise/templates/platform-operator/cluster-role.yaml create mode 100644 chart/kube-arangodb-enterprise/templates/platform-operator/role-binding.yaml create mode 100644 chart/kube-arangodb-enterprise/templates/platform-operator/role.yaml create mode 100644 chart/kube-arangodb/crds/platform-storage.yaml create mode 100644 chart/kube-arangodb/templates/platform-operator/cluster-role-binding.yaml create mode 100644 chart/kube-arangodb/templates/platform-operator/cluster-role.yaml create mode 100644 chart/kube-arangodb/templates/platform-operator/role-binding.yaml create mode 100644 chart/kube-arangodb/templates/platform-operator/role.yaml create mode 100644 pkg/handlers/platform/storage/handler.go create mode 100644 pkg/handlers/platform/storage/handler_deployment.go create mode 100644 pkg/handlers/platform/storage/handler_test.go create mode 100644 pkg/handlers/platform/storage/local.go create mode 100644 pkg/handlers/platform/storage/register.go create mode 100644 pkg/handlers/platform/storage/suite_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 48fa04464..f9d590a18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ - (Feature) AWS Client - (Feature) (Platform) Storage V1Alpha1 - (Feature) StorageV2 Integration Service Implementation +- (Feature) (Platform) Storage V1Alpha1 RC ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/Makefile b/Makefile index 73284b149..4d11c1118 100644 --- a/Makefile +++ b/Makefile @@ -527,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" \ @@ -539,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" \ @@ -551,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" \ @@ -563,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" \ @@ -575,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" \ @@ -587,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" \ @@ -599,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" \ @@ -611,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 diff --git a/README.md b/README.md index 0edb27155..cf253eb3a 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,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, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, 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, integrations, k8s-client, kubernetes-informer, monitor, networking-route-operator, operator, operator-arangojob-handler, operator-v2, operator-v2-event, operator-v2-worker, panics, 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 (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 +207,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/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/templates/deployment.yaml b/chart/kube-arangodb-arm64/templates/deployment.yaml index 3488df768..99826580f 100644 --- a/chart/kube-arangodb-arm64/templates/deployment.yaml +++ b/chart/kube-arangodb-arm64/templates/deployment.yaml @@ -123,6 +123,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 }} 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..c97eec0cb --- /dev/null +++ b/chart/kube-arangodb-arm64/templates/platform-operator/role.yaml @@ -0,0 +1,23 @@ +{{ 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"] + 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/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/templates/deployment.yaml b/chart/kube-arangodb-enterprise-arm64/templates/deployment.yaml index 3488df768..99826580f 100644 --- a/chart/kube-arangodb-enterprise-arm64/templates/deployment.yaml +++ b/chart/kube-arangodb-enterprise-arm64/templates/deployment.yaml @@ -123,6 +123,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 }} 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..c97eec0cb --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/role.yaml @@ -0,0 +1,23 @@ +{{ 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"] + 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/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/templates/deployment.yaml b/chart/kube-arangodb-enterprise/templates/deployment.yaml index 3488df768..99826580f 100644 --- a/chart/kube-arangodb-enterprise/templates/deployment.yaml +++ b/chart/kube-arangodb-enterprise/templates/deployment.yaml @@ -123,6 +123,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 }} 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..c97eec0cb --- /dev/null +++ b/chart/kube-arangodb-enterprise/templates/platform-operator/role.yaml @@ -0,0 +1,23 @@ +{{ 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"] + verbs: ["*"] + - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] +{{- end }} +{{- end }} \ No newline at end of file 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/templates/deployment.yaml b/chart/kube-arangodb/templates/deployment.yaml index 3488df768..99826580f 100644 --- a/chart/kube-arangodb/templates/deployment.yaml +++ b/chart/kube-arangodb/templates/deployment.yaml @@ -123,6 +123,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 }} 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..c97eec0cb --- /dev/null +++ b/chart/kube-arangodb/templates/platform-operator/role.yaml @@ -0,0 +1,23 @@ +{{ 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"] + verbs: ["*"] + - apiGroups: [""] + resources: ["pods", "services", "endpoints"] + verbs: ["get", "list", "watch"] +{{- end }} +{{- end }} \ No newline at end of file diff --git a/chart/kube-arangodb/values.yaml b/chart/kube-arangodb/values.yaml index eb822d04b..7c6018afd 100644 --- a/chart/kube-arangodb/values.yaml +++ b/chart/kube-arangodb/values.yaml @@ -36,6 +36,7 @@ operator: analytics: false networking: true scheduler: true + platform: true tolerations: [] rbac: enabled: true diff --git a/cmd/cmd.go b/cmd/cmd.go index 023e89a99..3ec498d70 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -120,6 +120,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 +188,7 @@ var ( mlProbe probe.ReadyProbe analyticsProbe probe.ReadyProbe networkingProbe probe.ReadyProbe + platformProbe probe.ReadyProbe schedulerProbe probe.ReadyProbe k2KClusterSyncProbe probe.ReadyProbe ) @@ -215,6 +217,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 +353,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 +514,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 +607,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 +630,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/docs/cli/arangodb_operator.md b/docs/cli/arangodb_operator.md index 6702a4a1f..530742822 100644 --- a/docs/cli/arangodb_operator.md +++ b/docs/cli/arangodb_operator.md @@ -80,7 +80,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, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, 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, integrations, k8s-client, kubernetes-informer, monitor, networking-route-operator, operator, operator-arangojob-handler, operator-v2, operator-v2-event, operator-v2-worker, panics, 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 (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 +92,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/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..6229aa1c4 --- /dev/null +++ b/pkg/handlers/platform/storage/handler_deployment.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 storage + +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" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + sharedApi "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1" + 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) { + var name = util.WithDefault(extension.Spec.Deployment) + + if status.Deployment != nil { + name = status.Deployment.GetName() + } + + deployment, err := util.WithKubernetesContextTimeoutP2A2(ctx, h.client.DatabaseV1().ArangoDeployments(item.Namespace).Get, name, meta.GetOptions{}) + if err != nil { + if apiErrors.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"), + ) { + return true, operator.Reconcile("Conditions updated") + } + return false, nil + } + + return false, err + } + + if status.Deployment == nil { + status.Deployment = util.NewType(sharedApi.NewObject(deployment)) + return true, operator.Reconcile("Deployment saved") + } else if !status.Deployment.Equals(deployment) { + if util.Or( + status.Conditions.Update(networkingApi.DeploymentFoundCondition, false, "ArangoDeployment changed", "ArangoDeployment changed"), + ) { + return true, operator.Reconcile("Conditions updated") + } + + return false, operator.Stop("ArangoDeployment Changed") + } + + // Condition for Found should be set to true + + if status.Conditions.Update(networkingApi.DeploymentFoundCondition, true, "ArangoDeployment found", "ArangoDeployment found") { + 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..a26500750 --- /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/ml" + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" +) + +func Kind() string { + return ml.ArangoMLStorageResourceKind +} + +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/operator/operator.go b/pkg/operator/operator.go index 659509e4b..a27b81c37 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,7 @@ 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" + 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 +82,7 @@ const ( mlOperator operatorV2type = "ml" analyticsOperator operatorV2type = "analytics" networkingOperator operatorV2type = "networking" + platformOperator operatorV2type = "platform" schedulerOperator operatorV2type = "scheduler" appsOperator operatorV2type = "apps" ) @@ -113,6 +116,7 @@ type Config struct { EnableML bool EnableAnalytics bool EnableNetworking bool + EnablePlatform bool EnableScheduler bool EnableBackup bool EnableApps bool @@ -137,6 +141,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 +218,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 +307,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 +348,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) + o.Dependencies.PlatformProbe.SetReady() case schedulerOperator: o.onStartOperatorV2Scheduler(operator, eventRecorder, o.Client.Arango(), o.Client.Kubernetes(), arangoInformer, kubeInformer) o.Dependencies.SchedulerProbe.SetReady() @@ -377,6 +397,18 @@ 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) { + 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) + } +} + 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/update_wraps.go b/pkg/operatorV2/update_wraps.go index f2f3c53e1..4b3513e18 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,7 @@ 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) +} diff --git a/pkg/server/server.go b/pkg/server/server.go index 61f67bd0b..4757d029f 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -71,6 +71,7 @@ type Dependencies struct { ML OperatorDependency Analytics OperatorDependency Networking OperatorDependency + Platform OperatorDependency Scheduler OperatorDependency ClusterSync OperatorDependency Operators Operators @@ -200,6 +201,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) 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" From 52087c1546f4dc8171623a03d1f3171542b960da Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Tue, 5 Nov 2024 12:05:21 +0100 Subject: [PATCH 19/69] [Feature] [Networking] ArangoRotue WebSocket Support (#1759) --- CHANGELOG.md | 1 + docs/api/ArangoRoute.V1Alpha1.md | 19 +++ pkg/apis/networking/v1alpha1/route_spec.go | 4 + .../networking/v1alpha1/route_spec_options.go | 42 ++++++ .../v1alpha1/route_spec_options_upgrade.go | 48 +++++++ .../networking/v1alpha1/route_upgrade_type.go | 38 +++++ .../v1alpha1/zz_generated.deepcopy.go | 62 ++++++++ pkg/apis/shared/validate.go | 11 ++ .../networking-route.schema.generated.yaml | 18 +++ .../gateway/gateway_config_destination.go | 14 +- .../gateway_config_destination_upgrade.go | 72 ++++++++++ .../resources/gateway/gateway_config_test.go | 134 ++++++++++++++++++ pkg/util/grpc.go | 10 ++ pkg/util/tests/tgrpc/grpc.go | 6 + 14 files changed, 478 insertions(+), 1 deletion(-) create mode 100644 pkg/apis/networking/v1alpha1/route_spec_options.go create mode 100644 pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go create mode 100644 pkg/apis/networking/v1alpha1/route_upgrade_type.go create mode 100644 pkg/deployment/resources/gateway/gateway_config_destination_upgrade.go diff --git a/CHANGELOG.md b/CHANGELOG.md index f9d590a18..aa3ef40f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ - (Feature) (Platform) Storage V1Alpha1 - (Feature) StorageV2 Integration Service Implementation - (Feature) (Platform) Storage V1Alpha1 RC +- (Feature) (Networking) ArangoRotue WebSocket Support ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/docs/api/ArangoRoute.V1Alpha1.md b/docs/api/ArangoRoute.V1Alpha1.md index a2398a1e7..2c358b396 100644 --- a/docs/api/ArangoRoute.V1Alpha1.md +++ b/docs/api/ArangoRoute.V1Alpha1.md @@ -145,6 +145,25 @@ Insecure allows Insecure traffic *** +### .spec.options.upgrade\[int\].enabled + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go#L37) + +Enabled defines if upgrade option is enabled + +*** + +### .spec.options.upgrade\[int\].type + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go#L34) + +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) diff --git a/pkg/apis/networking/v1alpha1/route_spec.go b/pkg/apis/networking/v1alpha1/route_spec.go index 85bb6348f..dfc945c7a 100644 --- a/pkg/apis/networking/v1alpha1/route_spec.go +++ b/pkg/apis/networking/v1alpha1/route_spec.go @@ -31,6 +31,9 @@ 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 { @@ -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_options.go b/pkg/apis/networking/v1alpha1/route_spec_options.go new file mode 100644 index 000000000..9b7505c90 --- /dev/null +++ b/pkg/apis/networking/v1alpha1/route_spec_options.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 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) 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..bb0d2fb2a --- /dev/null +++ b/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.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 v1alpha1 + +import shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" + +type ArangoRouteSpecOptionsUpgrade []ArangoRouteSpecOptionUpgrade + +func (a ArangoRouteSpecOptionsUpgrade) Validate() error { + return shared.ValidateInterfaceList(a) +} + +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) 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_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..39ad7add0 100644 --- a/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go @@ -111,6 +111,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 } @@ -269,6 +274,63 @@ 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 + 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)) + copy(*out, *in) + } + 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)) + copy(*out, *in) + 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 diff --git a/pkg/apis/shared/validate.go b/pkg/apis/shared/validate.go index b9da30205..59e5c139b 100644 --- a/pkg/apis/shared/validate.go +++ b/pkg/apis/shared/validate.go @@ -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)) diff --git a/pkg/crd/crds/networking-route.schema.generated.yaml b/pkg/crd/crds/networking-route.schema.generated.yaml index 9d82639de..2544f6324 100644 --- a/pkg/crd/crds/networking-route.schema.generated.yaml +++ b/pkg/crd/crds/networking-route.schema.generated.yaml @@ -80,6 +80,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/deployment/resources/gateway/gateway_config_destination.go b/pkg/deployment/resources/gateway/gateway_config_destination.go index 83c8b709e..d17e80089 100644 --- a/pkg/deployment/resources/gateway/gateway_config_destination.go +++ b/pkg/deployment/resources/gateway/gateway_config_destination.go @@ -67,6 +67,8 @@ type ConfigDestination struct { Path *string `json:"path,omitempty"` AuthExtension *ConfigAuthZExtension `json:"authExtension,omitempty"` + + UpgradeConfigs ConfigDestinationsUpgrade `json:"upgradeConfigs,omitempty"` } func (c *ConfigDestination) Validate() error { @@ -78,6 +80,7 @@ func (c *ConfigDestination) Validate() error { shared.PrefixResourceError("type", c.Type.Validate()), shared.PrefixResourceError("path", shared.ValidateAPIPath(c.GetPath())), shared.PrefixResourceError("authExtension", c.AuthExtension.Validate()), + shared.PrefixResourceError("upgradeConfigs", c.UpgradeConfigs.Validate()), ) } @@ -111,13 +114,22 @@ func (c *ConfigDestination) RenderRoute(name, prefix string) (*routeAPI.Route, e ClusterSpecifier: &routeAPI.RouteAction_Cluster{ Cluster: name, }, - PrefixRewrite: c.GetPath(), + UpgradeConfigs: c.getUpgradeConfigs().render(), + PrefixRewrite: c.GetPath(), }, }, TypedPerFilterConfig: tc, }, nil } +func (c *ConfigDestination) getUpgradeConfigs() ConfigDestinationsUpgrade { + if c == nil { + return nil + } + + return c.UpgradeConfigs +} + func (c *ConfigDestination) RenderCluster(name string) (*clusterAPI.Cluster, error) { hpo, err := anypb.New(&upstreamHttpApi.HttpProtocolOptions{ UpstreamProtocolOptions: &upstreamHttpApi.HttpProtocolOptions_ExplicitHttpConfig_{ 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_test.go b/pkg/deployment/resources/gateway/gateway_config_test.go index 99ba60384..05fcfd119 100644 --- a/pkg/deployment/resources/gateway/gateway_config_test.go +++ b/pkg/deployment/resources/gateway/gateway_config_test.go @@ -25,12 +25,16 @@ import ( "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, validates ...func(t *testing.T, b *bootstrapAPI.Bootstrap)) { + require.NoError(t, cfg.Validate()) + data, checksum, obj, err := cfg.RenderYAML() require.NoError(t, err) @@ -75,6 +79,136 @@ func Test_GatewayConfig(t *testing.T) { 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{ diff --git a/pkg/util/grpc.go b/pkg/util/grpc.go index 254887b16..b5c1f9685 100644 --- a/pkg/util/grpc.go +++ b/pkg/util/grpc.go @@ -25,11 +25,13 @@ import ( "crypto/tls" "io" + any1 "github.com/golang/protobuf/ptypes/any" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/metadata" + proto "google.golang.org/protobuf/proto" pbPongV1 "github.com/arangodb/kube-arangodb/integrations/pong/v1/definition" pbSharedV1 "github.com/arangodb/kube-arangodb/integrations/shared/v1/definition" @@ -133,3 +135,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 *any1.Any, v T) error { + if err := in.UnmarshalTo(v); err != nil { + return err + } + + return nil +} diff --git a/pkg/util/tests/tgrpc/grpc.go b/pkg/util/tests/tgrpc/grpc.go index 7145aa842..a977c22c0 100644 --- a/pkg/util/tests/tgrpc/grpc.go +++ b/pkg/util/tests/tgrpc/grpc.go @@ -25,10 +25,12 @@ import ( "fmt" "testing" + any1 "github.com/golang/protobuf/ptypes/any" "github.com/stretchr/testify/require" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" + proto "google.golang.org/protobuf/proto" "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/svc" @@ -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 *any1.Any, v T) { + require.NoError(t, util.GRPCAnyCastAs[T](in, v)) +} From a09403d4c2a1b7b44efce9f6e94804d4557e0b7e Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Thu, 7 Nov 2024 12:30:32 +0100 Subject: [PATCH 20/69] [Feature] [Scheduler] Helm Driver Param (#1760) --- CHANGELOG.md | 1 + pkg/integrations/scheduler_v2.go | 4 ++ pkg/util/k8sutil/helm/client.go | 3 +- pkg/util/k8sutil/helm/configuration.go | 6 +++ pkg/util/k8sutil/helm/configuration_driver.go | 48 +++++++++++++++++++ pkg/util/kclient/rest.go | 20 -------- 6 files changed, 60 insertions(+), 22 deletions(-) create mode 100644 pkg/util/k8sutil/helm/configuration_driver.go diff --git a/CHANGELOG.md b/CHANGELOG.md index aa3ef40f3..c742cf5ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ - (Feature) StorageV2 Integration Service Implementation - (Feature) (Platform) Storage V1Alpha1 RC - (Feature) (Networking) ArangoRotue WebSocket Support +- (Feature) (Scheduler) Helm Driver Param ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/pkg/integrations/scheduler_v2.go b/pkg/integrations/scheduler_v2.go index 452dd7438..b610c86b4 100644 --- a/pkg/integrations/scheduler_v2.go +++ b/pkg/integrations/scheduler_v2.go @@ -27,6 +27,7 @@ import ( 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" @@ -42,6 +43,7 @@ func init() { type schedulerV2 struct { Configuration pbImplSchedulerV2.Configuration + Driver string } func (b *schedulerV2) Name() string { @@ -56,6 +58,7 @@ 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"), ) } @@ -68,6 +71,7 @@ func (b *schedulerV2) Handler(ctx context.Context, cmd *cobra.Command) (svc.Hand helm, err := helm.NewClient(helm.Configuration{ Namespace: b.Configuration.Namespace, Client: client, + Driver: (*helm.ConfigurationDriver)(util.NewType(b.Driver)), }) if err != nil { return nil, errors.Wrapf(err, "Unable to create Helm Client") diff --git a/pkg/util/k8sutil/helm/client.go b/pkg/util/k8sutil/helm/client.go index ab9cbaa0a..40ca7d1be 100644 --- a/pkg/util/k8sutil/helm/client.go +++ b/pkg/util/k8sutil/helm/client.go @@ -39,7 +39,6 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util" "github.com/arangodb/kube-arangodb/pkg/util/kclient" - "github.com/arangodb/kube-arangodb/pkg/util/tests" ) func NewClient(cfg Configuration) (Client, error) { @@ -49,7 +48,7 @@ func NewClient(cfg Configuration) (Client, error) { var helm action.Configuration - if err := helm.Init(kclient.NewRESTClientGetter(tests.FakeNamespace, nil, cfg.Client.Config()), cfg.Namespace, "configmap", func(format string, v ...interface{}) { + if err := helm.Init(kclient.NewRESTClientGetter(cfg.Namespace, nil, cfg.Client.Config()), cfg.Namespace, string(cfg.Driver.Get()), func(format string, v ...interface{}) { logger.Debug(format, v...) }); err != nil { return nil, err diff --git a/pkg/util/k8sutil/helm/configuration.go b/pkg/util/k8sutil/helm/configuration.go index 7511e4295..c01833d08 100644 --- a/pkg/util/k8sutil/helm/configuration.go +++ b/pkg/util/k8sutil/helm/configuration.go @@ -29,6 +29,8 @@ type Configuration struct { Namespace string Client kclient.Client + + Driver *ConfigurationDriver } func (c *Configuration) Validate() error { @@ -44,5 +46,9 @@ func (c *Configuration) Validate() error { return errors.Errorf("Namespace cannot be empty") } + 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/kclient/rest.go b/pkg/util/kclient/rest.go index 2117cddac..3340d0baa 100644 --- a/pkg/util/kclient/rest.go +++ b/pkg/util/kclient/rest.go @@ -21,8 +21,6 @@ package kclient import ( - "time" - "k8s.io/apimachinery/pkg/api/meta" "k8s.io/client-go/discovery" "k8s.io/client-go/discovery/cached/memory" @@ -34,24 +32,6 @@ import ( // RESTClientOption is a function that can be used to set the RESTClientOptions of a HelmClient. type RESTClientOption func(*rest.Config) -// Timeout specifies the timeout for a RESTClient as a RESTClientOption. -// The default (if unspecified) is 32 seconds. -// See [1] for reference. -// [^1]: https://github.com/kubernetes/client-go/blob/c6bd30b9ec5f668df191bc268c6f550c37726edb/discovery/discovery_client.go#L52 -func Timeout(d time.Duration) RESTClientOption { - return func(r *rest.Config) { - r.Timeout = d - } -} - -// Maximum burst for throttle -// the created RESTClient will use DefaultBurst: 100. -func Burst(v int) RESTClientOption { - return func(r *rest.Config) { - r.Burst = v - } -} - // RESTClientGetter defines the values of a helm REST client. type RESTClientGetter struct { namespace string From ed068680f29bacc5bb69092d1583b7b81f7e7c58 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Thu, 7 Nov 2024 13:00:49 +0100 Subject: [PATCH 21/69] [Feature] [Integration] Services Endpoint (#1761) --- CHANGELOG.md | 1 + integrations/pong/v1/definition/pong.pb.go | 203 ++++++++++++++++-- integrations/pong/v1/definition/pong.proto | 19 ++ .../pong/v1/definition/pong_grpc.pb.go | 38 ++++ integrations/pong/v1/impl.go | 54 ++++- integrations/pong/v1/service_test.go | 40 +++- pkg/integrations/clients/pong_v1.go | 12 ++ pkg/integrations/integration.go | 1 + pkg/integrations/register.go | 26 ++- 9 files changed, 363 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c742cf5ec..f495fdab1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ - (Feature) (Platform) Storage V1Alpha1 RC - (Feature) (Networking) ArangoRotue WebSocket Support - (Feature) (Scheduler) Helm Driver Param +- (Feature) (Integration) Services Endpoint ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD 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 e6a1bf7aa..810dcc45b 100644 --- a/integrations/pong/v1/definition/pong.proto +++ b/integrations/pong/v1/definition/pong.proto @@ -32,6 +32,9 @@ option go_package = "github.com/arangodb/kube-arangodb/integrations/pong/v1/defi 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 @@ -41,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 6d418f034..90822e623 100644 --- a/integrations/pong/v1/definition/pong_grpc.pb.go +++ b/integrations/pong/v1/definition/pong_grpc.pb.go @@ -25,6 +25,8 @@ const _ = grpc.SupportPackageIsVersion7 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 { @@ -44,12 +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() } @@ -60,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. @@ -91,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) @@ -102,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/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/integration.go b/pkg/integrations/integration.go index 9e756c22c..cb1dcd9b4 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 diff --git a/pkg/integrations/register.go b/pkg/integrations/register.go index c5d0ae7ec..d3fdd1564 100644 --- a/pkg/integrations/register.go +++ b/pkg/integrations/register.go @@ -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)) } From 4b2f20d1e6c431eec14d41eb4d03fe8d7936bad3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 13:20:50 +0100 Subject: [PATCH 22/69] Bump cookie and express in /dashboard (#1742) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dashboard/package-lock.json | 191 ++++++++++++++++++++---------------- 1 file changed, 108 insertions(+), 83 deletions(-) diff --git a/dashboard/package-lock.json b/dashboard/package-lock.json index c28667e7b..e89a0c9e9 100644 --- a/dashboard/package-lock.json +++ b/dashboard/package-lock.json @@ -5200,12 +5200,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", @@ -6752,9 +6746,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 +6756,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 +6790,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,84 +6811,23 @@ "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" - } } } }, @@ -7042,6 +6968,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", @@ -12070,6 +12034,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", From 446266954741129ee4b82efcfb6ff4207041e3fa Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 8 Nov 2024 11:34:29 +0100 Subject: [PATCH 23/69] [Feature] [Platform] Storage V2 (#1750) --- .golangci.yaml | 10 + CHANGELOG.md | 1 + README.md | 2 +- docs/api/ArangoPlatformStorage.V1Alpha1.md | 8 - docs/cli/arangodb_operator.md | 2 +- docs/cli/arangodb_operator_integration.md | 129 +++--- integrations/storage/v2/definition/helpers.go | 109 +++++ .../storage/v2/definition/storage.pb.go | 417 ++++++++++++------ .../storage/v2/definition/storage.proto | 13 + .../storage/v2/definition/storage_grpc.pb.go | 38 ++ integrations/storage/v2/shared/init.go | 33 ++ integrations/storage/v2/shared/io.go | 1 + integrations/storage/v2/shared/s3/init.go | 50 +++ integrations/storage/v2/storage.go | 10 + integrations/storage/v2/storage_test.go | 146 +----- .../v1alpha1/zz_generated.deepcopy.go | 13 +- pkg/apis/platform/v1alpha1/conditions.go | 5 +- pkg/apis/platform/v1alpha1/register.go | 4 +- pkg/apis/platform/v1alpha1/storage.go | 4 +- pkg/apis/platform/v1alpha1/storage_spec.go | 11 - pkg/apis/platform/v1alpha1/storage_status.go | 4 - .../v1alpha1/zz_generated.deepcopy.go | 10 - .../platform-storage.schema.generated.yaml | 3 - pkg/debug_package/generator.go | 1 + .../generators/kubernetes/arango_platform.go | 47 ++ .../kubernetes/arango_platform_s.go | 73 +++ pkg/deployment/resources/arango_profiles.go | 42 +- pkg/deployment/resources/pod_creator.go | 5 + .../platform/storage/handler_deployment.go | 28 +- .../scheduler/batchjob/handler_manage_test.go | 23 +- .../scheduler/cronjob/handler_manage_test.go | 22 +- pkg/handlers/scheduler/deployment/handler.go | 4 +- .../deployment/handler_manage_test.go | 24 +- .../scheduler/pod/handler_manage_test.go | 22 +- pkg/integrations/flags.go | 122 ++++- pkg/integrations/integration.go | 14 + pkg/integrations/register.go | 2 +- .../sidecar/integration.storage.v2.go | 173 ++++++++ pkg/integrations/storage_v1.go | 4 + pkg/integrations/storage_v2.go | 75 ++++ pkg/util/aws/file.go | 2 +- pkg/util/constants/profiles.go | 9 +- pkg/util/refs.go | 9 + 43 files changed, 1273 insertions(+), 451 deletions(-) create mode 100644 integrations/storage/v2/definition/helpers.go create mode 100644 integrations/storage/v2/shared/init.go create mode 100644 integrations/storage/v2/shared/s3/init.go create mode 100644 pkg/debug_package/generators/kubernetes/arango_platform.go create mode 100644 pkg/debug_package/generators/kubernetes/arango_platform_s.go create mode 100644 pkg/integrations/sidecar/integration.storage.v2.go create mode 100644 pkg/integrations/storage_v2.go diff --git a/.golangci.yaml b/.golangci.yaml index 506e35a75..64b90f524 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -53,6 +53,14 @@ linters-settings: pkg: github.com/arangodb/kube-arangodb/integrations/shutdown/v1 - alias: pbShutdownV1 pkg: github.com/arangodb/kube-arangodb/integrations/shutdown/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 +69,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 diff --git a/CHANGELOG.md b/CHANGELOG.md index f495fdab1..d26b5cbdc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ - (Feature) (Networking) ArangoRotue WebSocket Support - (Feature) (Scheduler) Helm Driver Param - (Feature) (Integration) Services Endpoint +- (Feature) (Platform) Storage ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/README.md b/README.md index cf253eb3a..f2833c9dc 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,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, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, integrations, k8s-client, kubernetes-informer, monitor, networking-route-operator, operator, operator-arangojob-handler, operator-v2, operator-v2-event, operator-v2-worker, panics, 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 (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-v2, integrations, k8s-client, kubernetes-informer, monitor, networking-route-operator, operator, operator-arangojob-handler, operator-v2, operator-v2-event, operator-v2-worker, panics, 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 (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 diff --git a/docs/api/ArangoPlatformStorage.V1Alpha1.md b/docs/api/ArangoPlatformStorage.V1Alpha1.md index b02be87b2..520718511 100644 --- a/docs/api/ArangoPlatformStorage.V1Alpha1.md +++ b/docs/api/ArangoPlatformStorage.V1Alpha1.md @@ -116,11 +116,3 @@ Region defines the availability zone name. Default Value: `""` -*** - -### .spec.deployment - -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/platform/v1alpha1/storage_spec.go#L29) - -Deployment specifies the ArangoDeployment object name - diff --git a/docs/cli/arangodb_operator.md b/docs/cli/arangodb_operator.md index 530742822..2d0ae283b 100644 --- a/docs/cli/arangodb_operator.md +++ b/docs/cli/arangodb_operator.md @@ -80,7 +80,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, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, integrations, k8s-client, kubernetes-informer, monitor, networking-route-operator, operator, operator-arangojob-handler, operator-v2, operator-v2-event, operator-v2-worker, panics, 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 (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-v2, integrations, k8s-client, kubernetes-informer, monitor, networking-route-operator, operator, operator-arangojob-handler, operator-v2, operator-v2-event, operator-v2-worker, panics, 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 (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 diff --git a/docs/cli/arangodb_operator_integration.md b/docs/cli/arangodb_operator_integration.md index 5412debd9..3ddc53781 100644 --- a/docs/cli/arangodb_operator_integration.md +++ b/docs/cli/arangodb_operator_integration.md @@ -18,70 +18,71 @@ 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.scheduler.v2 SchedulerV2 Integration (Env: INTEGRATION_SCHEDULER_V2) - --integration.scheduler.v2.deployment string ArangoDeployment Name (Env: INTEGRATION_SCHEDULER_V2_DEPLOYMENT) - --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.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.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/integrations/storage/v2/definition/helpers.go b/integrations/storage/v2/definition/helpers.go new file mode 100644 index 000000000..c964d3759 --- /dev/null +++ b/integrations/storage/v2/definition/helpers.go @@ -0,0 +1,109 @@ +// +// 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 + +import ( + "context" + "io" + + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +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 + } + + for { + n, err := in.Read(cache) + if err != nil { + if errors.Is(err, io.EOF) { + break + } + + if cerr := wr.CloseSend(); cerr != nil { + return nil, errors.Errors(err, cerr) + } + + return nil, err + } + + if err := wr.Send(&StorageV2WriteObjectRequest{ + Path: &StorageV2Path{ + Path: key, + }, + Chunk: cache[:n], + }); err != nil { + if cerr := wr.CloseSend(); cerr != nil { + return nil, errors.Errors(err, cerr) + } + + return nil, err + } + } + + return wr.CloseAndRecv() +} + +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 + + for { + resp, err := wr.Recv() + if err != nil { + if errors.Is(err, io.EOF) { + break + } + + if cerr := wr.CloseSend(); cerr != nil { + return 0, errors.Errors(err, cerr) + } + + return 0, err + } + + n, err := util.WriteAll(out, resp.GetChunk()) + if err != nil { + if cerr := wr.CloseSend(); cerr != nil { + return 0, errors.Errors(err, cerr) + } + + return 0, err + } + + bytes += n + } + + return bytes, nil +} diff --git a/integrations/storage/v2/definition/storage.pb.go b/integrations/storage/v2/definition/storage.pb.go index 58b9c71dc..8f3d45f8f 100644 --- a/integrations/storage/v2/definition/storage.pb.go +++ b/integrations/storage/v2/definition/storage.pb.go @@ -206,6 +206,94 @@ func (x *StorageV2ObjectInfo) GetLastUpdated() *timestamppb.Timestamp { 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 @@ -219,7 +307,7 @@ type StorageV2ReadObjectRequest struct { func (x *StorageV2ReadObjectRequest) Reset() { *x = StorageV2ReadObjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[3] + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -232,7 +320,7 @@ func (x *StorageV2ReadObjectRequest) String() string { func (*StorageV2ReadObjectRequest) ProtoMessage() {} func (x *StorageV2ReadObjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[3] + 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 { @@ -245,7 +333,7 @@ func (x *StorageV2ReadObjectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageV2ReadObjectRequest.ProtoReflect.Descriptor instead. func (*StorageV2ReadObjectRequest) Descriptor() ([]byte, []int) { - return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{3} + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{5} } func (x *StorageV2ReadObjectRequest) GetPath() *StorageV2Path { @@ -268,7 +356,7 @@ type StorageV2ReadObjectResponse struct { func (x *StorageV2ReadObjectResponse) Reset() { *x = StorageV2ReadObjectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[4] + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -281,7 +369,7 @@ func (x *StorageV2ReadObjectResponse) String() string { func (*StorageV2ReadObjectResponse) ProtoMessage() {} func (x *StorageV2ReadObjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[4] + 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 { @@ -294,7 +382,7 @@ func (x *StorageV2ReadObjectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageV2ReadObjectResponse.ProtoReflect.Descriptor instead. func (*StorageV2ReadObjectResponse) Descriptor() ([]byte, []int) { - return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{4} + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{6} } func (x *StorageV2ReadObjectResponse) GetChunk() []byte { @@ -319,7 +407,7 @@ type StorageV2WriteObjectRequest struct { func (x *StorageV2WriteObjectRequest) Reset() { *x = StorageV2WriteObjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[5] + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -332,7 +420,7 @@ func (x *StorageV2WriteObjectRequest) String() string { func (*StorageV2WriteObjectRequest) ProtoMessage() {} func (x *StorageV2WriteObjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[5] + 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 { @@ -345,7 +433,7 @@ func (x *StorageV2WriteObjectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageV2WriteObjectRequest.ProtoReflect.Descriptor instead. func (*StorageV2WriteObjectRequest) Descriptor() ([]byte, []int) { - return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{5} + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{7} } func (x *StorageV2WriteObjectRequest) GetPath() *StorageV2Path { @@ -377,7 +465,7 @@ type StorageV2WriteObjectResponse struct { func (x *StorageV2WriteObjectResponse) Reset() { *x = StorageV2WriteObjectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[6] + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -390,7 +478,7 @@ func (x *StorageV2WriteObjectResponse) String() string { func (*StorageV2WriteObjectResponse) ProtoMessage() {} func (x *StorageV2WriteObjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[6] + 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 { @@ -403,7 +491,7 @@ func (x *StorageV2WriteObjectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageV2WriteObjectResponse.ProtoReflect.Descriptor instead. func (*StorageV2WriteObjectResponse) Descriptor() ([]byte, []int) { - return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{6} + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{8} } func (x *StorageV2WriteObjectResponse) GetBytes() int64 { @@ -433,7 +521,7 @@ type StorageV2HeadObjectRequest struct { func (x *StorageV2HeadObjectRequest) Reset() { *x = StorageV2HeadObjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[7] + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -446,7 +534,7 @@ func (x *StorageV2HeadObjectRequest) String() string { func (*StorageV2HeadObjectRequest) ProtoMessage() {} func (x *StorageV2HeadObjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[7] + 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 { @@ -459,7 +547,7 @@ func (x *StorageV2HeadObjectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageV2HeadObjectRequest.ProtoReflect.Descriptor instead. func (*StorageV2HeadObjectRequest) Descriptor() ([]byte, []int) { - return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{7} + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{9} } func (x *StorageV2HeadObjectRequest) GetPath() *StorageV2Path { @@ -482,7 +570,7 @@ type StorageV2HeadObjectResponse struct { func (x *StorageV2HeadObjectResponse) Reset() { *x = StorageV2HeadObjectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[8] + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -495,7 +583,7 @@ func (x *StorageV2HeadObjectResponse) String() string { func (*StorageV2HeadObjectResponse) ProtoMessage() {} func (x *StorageV2HeadObjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[8] + 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 { @@ -508,7 +596,7 @@ func (x *StorageV2HeadObjectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageV2HeadObjectResponse.ProtoReflect.Descriptor instead. func (*StorageV2HeadObjectResponse) Descriptor() ([]byte, []int) { - return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{8} + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{10} } func (x *StorageV2HeadObjectResponse) GetInfo() *StorageV2ObjectInfo { @@ -531,7 +619,7 @@ type StorageV2DeleteObjectRequest struct { func (x *StorageV2DeleteObjectRequest) Reset() { *x = StorageV2DeleteObjectRequest{} if protoimpl.UnsafeEnabled { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[9] + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -544,7 +632,7 @@ func (x *StorageV2DeleteObjectRequest) String() string { func (*StorageV2DeleteObjectRequest) ProtoMessage() {} func (x *StorageV2DeleteObjectRequest) ProtoReflect() protoreflect.Message { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[9] + 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 { @@ -557,7 +645,7 @@ func (x *StorageV2DeleteObjectRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageV2DeleteObjectRequest.ProtoReflect.Descriptor instead. func (*StorageV2DeleteObjectRequest) Descriptor() ([]byte, []int) { - return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{9} + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{11} } func (x *StorageV2DeleteObjectRequest) GetPath() *StorageV2Path { @@ -577,7 +665,7 @@ type StorageV2DeleteObjectResponse struct { func (x *StorageV2DeleteObjectResponse) Reset() { *x = StorageV2DeleteObjectResponse{} if protoimpl.UnsafeEnabled { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[10] + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -590,7 +678,7 @@ func (x *StorageV2DeleteObjectResponse) String() string { func (*StorageV2DeleteObjectResponse) ProtoMessage() {} func (x *StorageV2DeleteObjectResponse) ProtoReflect() protoreflect.Message { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[10] + 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 { @@ -603,7 +691,7 @@ func (x *StorageV2DeleteObjectResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageV2DeleteObjectResponse.ProtoReflect.Descriptor instead. func (*StorageV2DeleteObjectResponse) Descriptor() ([]byte, []int) { - return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{10} + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{12} } // StorageV2 ListObjects Request @@ -619,7 +707,7 @@ type StorageV2ListObjectsRequest struct { func (x *StorageV2ListObjectsRequest) Reset() { *x = StorageV2ListObjectsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[11] + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -632,7 +720,7 @@ func (x *StorageV2ListObjectsRequest) String() string { func (*StorageV2ListObjectsRequest) ProtoMessage() {} func (x *StorageV2ListObjectsRequest) ProtoReflect() protoreflect.Message { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[11] + 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 { @@ -645,7 +733,7 @@ func (x *StorageV2ListObjectsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageV2ListObjectsRequest.ProtoReflect.Descriptor instead. func (*StorageV2ListObjectsRequest) Descriptor() ([]byte, []int) { - return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{11} + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{13} } func (x *StorageV2ListObjectsRequest) GetPath() *StorageV2Path { @@ -668,7 +756,7 @@ type StorageV2ListObjectsResponse struct { func (x *StorageV2ListObjectsResponse) Reset() { *x = StorageV2ListObjectsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[12] + mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -681,7 +769,7 @@ func (x *StorageV2ListObjectsResponse) String() string { func (*StorageV2ListObjectsResponse) ProtoMessage() {} func (x *StorageV2ListObjectsResponse) ProtoReflect() protoreflect.Message { - mi := &file_integrations_storage_v2_definition_storage_proto_msgTypes[12] + 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 { @@ -694,7 +782,7 @@ func (x *StorageV2ListObjectsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StorageV2ListObjectsResponse.ProtoReflect.Descriptor instead. func (*StorageV2ListObjectsResponse) Descriptor() ([]byte, []int) { - return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{12} + return file_integrations_storage_v2_definition_storage_proto_rawDescGZIP(), []int{14} } func (x *StorageV2ListObjectsResponse) GetFiles() []*StorageV2Object { @@ -729,88 +817,98 @@ var file_integrations_storage_v2_definition_storage_proto_rawDesc = []byte{ 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, - 0x49, 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, 0x2b, 0x0a, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, - 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, - 0x60, 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, 0x2b, - 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, - 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x49, 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, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x56, 0x32, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x50, - 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, 0x31, 0x0a, - 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x68, - 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x4b, 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, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x4a, - 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, 0x2b, 0x0a, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, - 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, - 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x4f, 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, 0x2f, 0x0a, 0x05, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x68, 0x75, 0x74, - 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x32, 0xe4, 0x03, 0x0a, 0x09, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x12, 0x5b, 0x0a, 0x0a, 0x52, 0x65, 0x61, - 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, - 0x77, 0x6e, 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, 0x25, 0x2e, - 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x5e, 0x0a, 0x0b, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x25, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, - 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, 0x26, 0x2e, 0x73, - 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x59, 0x0a, 0x0a, 0x48, 0x65, 0x61, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, + 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, 0x49, 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, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x60, 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, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, + 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, 0x49, 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, 0x1a, 0x25, 0x2e, 0x73, 0x68, 0x75, - 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x5f, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x12, 0x26, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, 0x6f, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x70, 0x61, + 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, + 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x50, 0x61, 0x74, + 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x50, 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, 0x31, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x4b, 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, 0x1a, 0x27, 0x2e, 0x73, 0x68, 0x75, 0x74, - 0x64, 0x6f, 0x77, 0x6e, 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, 0x5e, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x12, 0x25, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x26, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, - 0x6f, 0x77, 0x6e, 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, + 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, + 0x77, 0x6e, 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, 0x4a, 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, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x22, 0x4f, 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, 0x2f, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x05, 0x66, + 0x69, 0x6c, 0x65, 0x73, 0x32, 0xad, 0x04, 0x0a, 0x09, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x56, 0x32, 0x12, 0x47, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x1e, 0x2e, 0x73, 0x68, 0x75, + 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x49, + 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x68, 0x75, + 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x49, + 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0a, 0x52, + 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, 0x73, 0x68, 0x75, 0x74, + 0x64, 0x6f, 0x77, 0x6e, 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, + 0x25, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x5e, 0x0a, 0x0b, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x25, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, + 0x77, 0x6e, 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, 0x26, + 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x59, 0x0a, 0x0a, 0x48, 0x65, 0x61, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, + 0x6e, 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, 0x25, 0x2e, 0x73, + 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x5f, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x12, 0x26, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x27, 0x2e, 0x73, 0x68, + 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x5e, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x26, 0x2e, 0x73, 0x68, 0x75, + 0x74, 0x64, 0x6f, 0x77, 0x6e, 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 ( @@ -825,27 +923,29 @@ func file_integrations_storage_v2_definition_storage_proto_rawDescGZIP() []byte return file_integrations_storage_v2_definition_storage_proto_rawDescData } -var file_integrations_storage_v2_definition_storage_proto_msgTypes = make([]protoimpl.MessageInfo, 13) +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: shutdown.StorageV2Path (*StorageV2Object)(nil), // 1: shutdown.StorageV2Object (*StorageV2ObjectInfo)(nil), // 2: shutdown.StorageV2ObjectInfo - (*StorageV2ReadObjectRequest)(nil), // 3: shutdown.StorageV2ReadObjectRequest - (*StorageV2ReadObjectResponse)(nil), // 4: shutdown.StorageV2ReadObjectResponse - (*StorageV2WriteObjectRequest)(nil), // 5: shutdown.StorageV2WriteObjectRequest - (*StorageV2WriteObjectResponse)(nil), // 6: shutdown.StorageV2WriteObjectResponse - (*StorageV2HeadObjectRequest)(nil), // 7: shutdown.StorageV2HeadObjectRequest - (*StorageV2HeadObjectResponse)(nil), // 8: shutdown.StorageV2HeadObjectResponse - (*StorageV2DeleteObjectRequest)(nil), // 9: shutdown.StorageV2DeleteObjectRequest - (*StorageV2DeleteObjectResponse)(nil), // 10: shutdown.StorageV2DeleteObjectResponse - (*StorageV2ListObjectsRequest)(nil), // 11: shutdown.StorageV2ListObjectsRequest - (*StorageV2ListObjectsResponse)(nil), // 12: shutdown.StorageV2ListObjectsResponse - (*timestamppb.Timestamp)(nil), // 13: google.protobuf.Timestamp + (*StorageV2InitRequest)(nil), // 3: shutdown.StorageV2InitRequest + (*StorageV2InitResponse)(nil), // 4: shutdown.StorageV2InitResponse + (*StorageV2ReadObjectRequest)(nil), // 5: shutdown.StorageV2ReadObjectRequest + (*StorageV2ReadObjectResponse)(nil), // 6: shutdown.StorageV2ReadObjectResponse + (*StorageV2WriteObjectRequest)(nil), // 7: shutdown.StorageV2WriteObjectRequest + (*StorageV2WriteObjectResponse)(nil), // 8: shutdown.StorageV2WriteObjectResponse + (*StorageV2HeadObjectRequest)(nil), // 9: shutdown.StorageV2HeadObjectRequest + (*StorageV2HeadObjectResponse)(nil), // 10: shutdown.StorageV2HeadObjectResponse + (*StorageV2DeleteObjectRequest)(nil), // 11: shutdown.StorageV2DeleteObjectRequest + (*StorageV2DeleteObjectResponse)(nil), // 12: shutdown.StorageV2DeleteObjectResponse + (*StorageV2ListObjectsRequest)(nil), // 13: shutdown.StorageV2ListObjectsRequest + (*StorageV2ListObjectsResponse)(nil), // 14: shutdown.StorageV2ListObjectsResponse + (*timestamppb.Timestamp)(nil), // 15: google.protobuf.Timestamp } var file_integrations_storage_v2_definition_storage_proto_depIdxs = []int32{ 0, // 0: shutdown.StorageV2Object.path:type_name -> shutdown.StorageV2Path 2, // 1: shutdown.StorageV2Object.info:type_name -> shutdown.StorageV2ObjectInfo - 13, // 2: shutdown.StorageV2ObjectInfo.last_updated:type_name -> google.protobuf.Timestamp + 15, // 2: shutdown.StorageV2ObjectInfo.last_updated:type_name -> google.protobuf.Timestamp 0, // 3: shutdown.StorageV2ReadObjectRequest.path:type_name -> shutdown.StorageV2Path 0, // 4: shutdown.StorageV2WriteObjectRequest.path:type_name -> shutdown.StorageV2Path 0, // 5: shutdown.StorageV2HeadObjectRequest.path:type_name -> shutdown.StorageV2Path @@ -853,18 +953,20 @@ var file_integrations_storage_v2_definition_storage_proto_depIdxs = []int32{ 0, // 7: shutdown.StorageV2DeleteObjectRequest.path:type_name -> shutdown.StorageV2Path 0, // 8: shutdown.StorageV2ListObjectsRequest.path:type_name -> shutdown.StorageV2Path 1, // 9: shutdown.StorageV2ListObjectsResponse.files:type_name -> shutdown.StorageV2Object - 3, // 10: shutdown.StorageV2.ReadObject:input_type -> shutdown.StorageV2ReadObjectRequest - 5, // 11: shutdown.StorageV2.WriteObject:input_type -> shutdown.StorageV2WriteObjectRequest - 7, // 12: shutdown.StorageV2.HeadObject:input_type -> shutdown.StorageV2HeadObjectRequest - 9, // 13: shutdown.StorageV2.DeleteObject:input_type -> shutdown.StorageV2DeleteObjectRequest - 11, // 14: shutdown.StorageV2.ListObjects:input_type -> shutdown.StorageV2ListObjectsRequest - 4, // 15: shutdown.StorageV2.ReadObject:output_type -> shutdown.StorageV2ReadObjectResponse - 6, // 16: shutdown.StorageV2.WriteObject:output_type -> shutdown.StorageV2WriteObjectResponse - 8, // 17: shutdown.StorageV2.HeadObject:output_type -> shutdown.StorageV2HeadObjectResponse - 10, // 18: shutdown.StorageV2.DeleteObject:output_type -> shutdown.StorageV2DeleteObjectResponse - 12, // 19: shutdown.StorageV2.ListObjects:output_type -> shutdown.StorageV2ListObjectsResponse - 15, // [15:20] is the sub-list for method output_type - 10, // [10:15] is the sub-list for method input_type + 3, // 10: shutdown.StorageV2.Init:input_type -> shutdown.StorageV2InitRequest + 5, // 11: shutdown.StorageV2.ReadObject:input_type -> shutdown.StorageV2ReadObjectRequest + 7, // 12: shutdown.StorageV2.WriteObject:input_type -> shutdown.StorageV2WriteObjectRequest + 9, // 13: shutdown.StorageV2.HeadObject:input_type -> shutdown.StorageV2HeadObjectRequest + 11, // 14: shutdown.StorageV2.DeleteObject:input_type -> shutdown.StorageV2DeleteObjectRequest + 13, // 15: shutdown.StorageV2.ListObjects:input_type -> shutdown.StorageV2ListObjectsRequest + 4, // 16: shutdown.StorageV2.Init:output_type -> shutdown.StorageV2InitResponse + 6, // 17: shutdown.StorageV2.ReadObject:output_type -> shutdown.StorageV2ReadObjectResponse + 8, // 18: shutdown.StorageV2.WriteObject:output_type -> shutdown.StorageV2WriteObjectResponse + 10, // 19: shutdown.StorageV2.HeadObject:output_type -> shutdown.StorageV2HeadObjectResponse + 12, // 20: shutdown.StorageV2.DeleteObject:output_type -> shutdown.StorageV2DeleteObjectResponse + 14, // 21: shutdown.StorageV2.ListObjects:output_type -> shutdown.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 @@ -913,7 +1015,7 @@ func file_integrations_storage_v2_definition_storage_proto_init() { } } file_integrations_storage_v2_definition_storage_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageV2ReadObjectRequest); i { + switch v := v.(*StorageV2InitRequest); i { case 0: return &v.state case 1: @@ -925,7 +1027,7 @@ func file_integrations_storage_v2_definition_storage_proto_init() { } } file_integrations_storage_v2_definition_storage_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageV2ReadObjectResponse); i { + switch v := v.(*StorageV2InitResponse); i { case 0: return &v.state case 1: @@ -937,7 +1039,7 @@ func file_integrations_storage_v2_definition_storage_proto_init() { } } file_integrations_storage_v2_definition_storage_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageV2WriteObjectRequest); i { + switch v := v.(*StorageV2ReadObjectRequest); i { case 0: return &v.state case 1: @@ -949,7 +1051,7 @@ func file_integrations_storage_v2_definition_storage_proto_init() { } } file_integrations_storage_v2_definition_storage_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageV2WriteObjectResponse); i { + switch v := v.(*StorageV2ReadObjectResponse); i { case 0: return &v.state case 1: @@ -961,7 +1063,7 @@ func file_integrations_storage_v2_definition_storage_proto_init() { } } file_integrations_storage_v2_definition_storage_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageV2HeadObjectRequest); i { + switch v := v.(*StorageV2WriteObjectRequest); i { case 0: return &v.state case 1: @@ -973,7 +1075,7 @@ func file_integrations_storage_v2_definition_storage_proto_init() { } } file_integrations_storage_v2_definition_storage_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageV2HeadObjectResponse); i { + switch v := v.(*StorageV2WriteObjectResponse); i { case 0: return &v.state case 1: @@ -985,7 +1087,7 @@ func file_integrations_storage_v2_definition_storage_proto_init() { } } file_integrations_storage_v2_definition_storage_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageV2DeleteObjectRequest); i { + switch v := v.(*StorageV2HeadObjectRequest); i { case 0: return &v.state case 1: @@ -997,7 +1099,7 @@ func file_integrations_storage_v2_definition_storage_proto_init() { } } file_integrations_storage_v2_definition_storage_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageV2DeleteObjectResponse); i { + switch v := v.(*StorageV2HeadObjectResponse); i { case 0: return &v.state case 1: @@ -1009,7 +1111,7 @@ func file_integrations_storage_v2_definition_storage_proto_init() { } } file_integrations_storage_v2_definition_storage_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StorageV2ListObjectsRequest); i { + switch v := v.(*StorageV2DeleteObjectRequest); i { case 0: return &v.state case 1: @@ -1021,6 +1123,30 @@ func file_integrations_storage_v2_definition_storage_proto_init() { } } 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 @@ -1033,13 +1159,14 @@ func file_integrations_storage_v2_definition_storage_proto_init() { } } } + 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: 13, + NumMessages: 15, NumExtensions: 0, NumServices: 1, }, diff --git a/integrations/storage/v2/definition/storage.proto b/integrations/storage/v2/definition/storage.proto index 98de6f51c..29a038f94 100644 --- a/integrations/storage/v2/definition/storage.proto +++ b/integrations/storage/v2/definition/storage.proto @@ -28,6 +28,9 @@ option go_package = "github.com/arangodb/kube-arangodb/integrations/storage/v2/d // 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); @@ -66,6 +69,16 @@ message StorageV2ObjectInfo { 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 diff --git a/integrations/storage/v2/definition/storage_grpc.pb.go b/integrations/storage/v2/definition/storage_grpc.pb.go index dce0ef1eb..646c6c356 100644 --- a/integrations/storage/v2/definition/storage_grpc.pb.go +++ b/integrations/storage/v2/definition/storage_grpc.pb.go @@ -22,6 +22,8 @@ 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 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 @@ -42,6 +44,15 @@ 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, "/shutdown.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], "/shutdown.StorageV2/ReadObject", opts...) if err != nil { @@ -162,6 +173,8 @@ func (x *storageV2ListObjectsClient) Recv() (*StorageV2ListObjectsResponse, erro // 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 @@ -179,6 +192,9 @@ type StorageV2Server interface { 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") } @@ -207,6 +223,24 @@ 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: "/shutdown.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 { @@ -318,6 +352,10 @@ var StorageV2_ServiceDesc = grpc.ServiceDesc{ ServiceName: "shutdown.StorageV2", HandlerType: (*StorageV2Server)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "Init", + Handler: _StorageV2_Init_Handler, + }, { MethodName: "HeadObject", Handler: _StorageV2_HeadObject_Handler, 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 index aafa3f1d9..176e74f59 100644 --- a/integrations/storage/v2/shared/io.go +++ b/integrations/storage/v2/shared/io.go @@ -55,6 +55,7 @@ type Info struct { } 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) 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/storage.go b/integrations/storage/v2/storage.go index 79bf2a2fa..e26545d2a 100644 --- a/integrations/storage/v2/storage.go +++ b/integrations/storage/v2/storage.go @@ -277,3 +277,13 @@ func (i *implementation) ListObjects(req *pbStorageV2.StorageV2ListObjectsReques } } } + +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 index 70b849a79..5f00b57a7 100644 --- a/integrations/storage/v2/storage_test.go +++ b/integrations/storage/v2/storage_test.go @@ -146,32 +146,7 @@ func testFileListing(t *testing.T, ctx context.Context, h pbStorageV2.StorageV2C t.Run("UploadAll", func(t *testing.T) { util.ParallelProcess(func(in string) { - wr, err := h.WriteObject(ctx) - require.NoError(t, err) - - buff := make([]byte, 1024) - - cf := bytes.NewReader(data) - - for { - n, err := cf.Read(buff) - if err != nil { - if errors.Is(err, io.EOF) { - break - } - - require.NoError(t, err) - } - - require.NoError(t, wr.Send(&pbStorageV2.StorageV2WriteObjectRequest{ - Path: &pbStorageV2.StorageV2Path{ - Path: in, - }, - Chunk: buff[:n], - })) - } - - ds, err := wr.CloseAndRecv() + ds, err := pbStorageV2.Send(ctx, h, in, bytes.NewReader(data)) require.NoError(t, err) require.NotNil(t, ds) @@ -268,32 +243,7 @@ func testS3BucketFileHandling(t *testing.T, ctx context.Context, h pbStorageV2.S }) t.Run("Send Object", func(t *testing.T) { - wr, err := h.WriteObject(ctx) - require.NoError(t, err) - - buff := make([]byte, 1024) - - cf := bytes.NewReader(dataOne) - - for { - n, err := cf.Read(buff) - if err != nil { - if errors.Is(err, io.EOF) { - break - } - - require.NoError(t, err) - } - - require.NoError(t, wr.Send(&pbStorageV2.StorageV2WriteObjectRequest{ - Path: &pbStorageV2.StorageV2Path{ - Path: name, - }, - Chunk: buff[:n], - })) - } - - ds, err := wr.CloseAndRecv() + ds, err := pbStorageV2.Send(ctx, h, name, bytes.NewReader(dataOne)) require.NoError(t, err) require.NotNil(t, ds) @@ -313,23 +263,10 @@ func testS3BucketFileHandling(t *testing.T, ctx context.Context, h pbStorageV2.S }) t.Run("Download Object", func(t *testing.T) { - wr, err := h.ReadObject(ctx, &pbStorageV2.StorageV2ReadObjectRequest{ - Path: &pbStorageV2.StorageV2Path{Path: name}, - }) - require.NoError(t, err) - data := bytes.NewBuffer(nil) - - for { - resp, err := wr.Recv() - if errors.Is(err, io.EOF) { - break - } - require.NoError(t, err) - - _, err = util.WriteAll(data, resp.GetChunk()) - require.NoError(t, err) - } + n, err := pbStorageV2.Receive(ctx, h, name, data) + require.NoError(t, err) + require.EqualValues(t, n, size) pdata := data.Bytes() @@ -340,32 +277,7 @@ func testS3BucketFileHandling(t *testing.T, ctx context.Context, h pbStorageV2.S }) t.Run("Re-Send Object", func(t *testing.T) { - wr, err := h.WriteObject(ctx) - require.NoError(t, err) - - buff := make([]byte, 1024) - - cf := bytes.NewReader(dataTwo) - - for { - n, err := cf.Read(buff) - if err != nil { - if errors.Is(err, io.EOF) { - break - } - - require.NoError(t, err) - } - - require.NoError(t, wr.Send(&pbStorageV2.StorageV2WriteObjectRequest{ - Path: &pbStorageV2.StorageV2Path{ - Path: name, - }, - Chunk: buff[:n], - })) - } - - ds, err := wr.CloseAndRecv() + ds, err := pbStorageV2.Send(ctx, h, name, bytes.NewReader(dataTwo)) require.NoError(t, err) require.NotNil(t, ds) @@ -380,32 +292,7 @@ func testS3BucketFileHandling(t *testing.T, ctx context.Context, h pbStorageV2.S }) t.Run("Send Second Object", func(t *testing.T) { - wr, err := h.WriteObject(ctx) - require.NoError(t, err) - - buff := make([]byte, 1024) - - cf := bytes.NewReader(dataOne) - - for { - n, err := cf.Read(buff) - if err != nil { - if errors.Is(err, io.EOF) { - break - } - - require.NoError(t, err) - } - - require.NoError(t, wr.Send(&pbStorageV2.StorageV2WriteObjectRequest{ - Path: &pbStorageV2.StorageV2Path{ - Path: nameTwo, - }, - Chunk: buff[:n], - })) - } - - ds, err := wr.CloseAndRecv() + ds, err := pbStorageV2.Send(ctx, h, nameTwo, bytes.NewReader(dataOne)) require.NoError(t, err) require.NotNil(t, ds) @@ -414,23 +301,10 @@ func testS3BucketFileHandling(t *testing.T, ctx context.Context, h pbStorageV2.S }) t.Run("Re-Download Object", func(t *testing.T) { - wr, err := h.ReadObject(ctx, &pbStorageV2.StorageV2ReadObjectRequest{ - Path: &pbStorageV2.StorageV2Path{Path: name}, - }) - require.NoError(t, err) - data := bytes.NewBuffer(nil) - - for { - resp, err := wr.Recv() - if errors.Is(err, io.EOF) { - break - } - require.NoError(t, err) - - _, err = util.WriteAll(data, resp.GetChunk()) - require.NoError(t, err) - } + n, err := pbStorageV2.Receive(ctx, h, name, data) + require.NoError(t, err) + require.EqualValues(t, n, size) pdata := data.Bytes() diff --git a/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go index 39ad7add0..d69bebac6 100644 --- a/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go @@ -277,6 +277,11 @@ func (in *ArangoRouteSpecDestinationTLS) DeepCopy() *ArangoRouteSpecDestinationT // 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 } @@ -296,7 +301,9 @@ func (in *ArangoRouteSpecOptions) DeepCopyInto(out *ArangoRouteSpecOptions) { if in.Upgrade != nil { in, out := &in.Upgrade, &out.Upgrade *out = make(ArangoRouteSpecOptionsUpgrade, len(*in)) - copy(*out, *in) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } } return } @@ -316,7 +323,9 @@ func (in ArangoRouteSpecOptionsUpgrade) DeepCopyInto(out *ArangoRouteSpecOptions { in := &in *out = make(ArangoRouteSpecOptionsUpgrade, len(*in)) - copy(*out, *in) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } return } } diff --git a/pkg/apis/platform/v1alpha1/conditions.go b/pkg/apis/platform/v1alpha1/conditions.go index 74773f62c..39581c2a5 100644 --- a/pkg/apis/platform/v1alpha1/conditions.go +++ b/pkg/apis/platform/v1alpha1/conditions.go @@ -23,6 +23,7 @@ package v1alpha1 import api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" const ( - SpecValidCondition api.ConditionType = "SpecValid" - ReadyCondition api.ConditionType = "Ready" + DeploymentFoundCondition api.ConditionType = "DeploymentFound" + SpecValidCondition api.ConditionType = "SpecValid" + ReadyCondition api.ConditionType = "Ready" ) diff --git a/pkg/apis/platform/v1alpha1/register.go b/pkg/apis/platform/v1alpha1/register.go index 9dc2ac7a0..6d7e98c95 100644 --- a/pkg/apis/platform/v1alpha1/register.go +++ b/pkg/apis/platform/v1alpha1/register.go @@ -25,7 +25,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" - "github.com/arangodb/kube-arangodb/pkg/apis/networking" + "github.com/arangodb/kube-arangodb/pkg/apis/platform" ) const ( @@ -36,7 +36,7 @@ var ( SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) AddToScheme = SchemeBuilder.AddToScheme - SchemeGroupVersion = schema.GroupVersion{Group: networking.ArangoNetworkingGroupName, Version: ArangoPlatformVersion} + SchemeGroupVersion = schema.GroupVersion{Group: platform.ArangoPlatformGroupName, Version: ArangoPlatformVersion} ) // Resource gets an ArangoCluster GroupResource for a specified resource diff --git a/pkg/apis/platform/v1alpha1/storage.go b/pkg/apis/platform/v1alpha1/storage.go index 95ce3ae73..eed2b2450 100644 --- a/pkg/apis/platform/v1alpha1/storage.go +++ b/pkg/apis/platform/v1alpha1/storage.go @@ -23,7 +23,7 @@ package v1alpha1 import ( meta "k8s.io/apimachinery/pkg/apis/meta/v1" - "github.com/arangodb/kube-arangodb/pkg/apis/networking" + "github.com/arangodb/kube-arangodb/pkg/apis/platform" ) // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -53,7 +53,7 @@ func (a *ArangoPlatformStorage) AsOwner() meta.OwnerReference { trueVar := true return meta.OwnerReference{ APIVersion: SchemeGroupVersion.String(), - Kind: networking.ArangoRouteResourceKind, + Kind: platform.ArangoPlatformStorageResourceKind, Name: a.Name, UID: a.UID, Controller: &trueVar, diff --git a/pkg/apis/platform/v1alpha1/storage_spec.go b/pkg/apis/platform/v1alpha1/storage_spec.go index 44e1c6014..dfc22d46e 100644 --- a/pkg/apis/platform/v1alpha1/storage_spec.go +++ b/pkg/apis/platform/v1alpha1/storage_spec.go @@ -25,21 +25,10 @@ import ( ) type ArangoPlatformStorageSpec struct { - // Deployment specifies the ArangoDeployment object name - Deployment *string `json:"deployment,omitempty"` - // Backend defines how storage is implemented Backend *ArangoPlatformStorageSpecBackend `json:"backend,omitempty"` } -func (s *ArangoPlatformStorageSpec) GetDeployment() string { - if s == nil || s.Deployment == nil { - return "" - } - - return *s.Deployment -} - func (s *ArangoPlatformStorageSpec) GetBackend() *ArangoPlatformStorageSpecBackend { if s == nil || s.Backend == nil { return nil diff --git a/pkg/apis/platform/v1alpha1/storage_status.go b/pkg/apis/platform/v1alpha1/storage_status.go index 1b9f473c9..b505edb54 100644 --- a/pkg/apis/platform/v1alpha1/storage_status.go +++ b/pkg/apis/platform/v1alpha1/storage_status.go @@ -22,14 +22,10 @@ package v1alpha1 import ( api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" - sharedApi "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1" ) type ArangoPlatformStorageStatus struct { // Conditions specific to the entire storage // +doc/type: api.Conditions Conditions api.ConditionList `json:"conditions,omitempty"` - - // Deployment keeps the ArangoDeployment reference - Deployment *sharedApi.Object `json:"deployment,omitempty"` } diff --git a/pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go index 9f6b3c8c4..1b0fee98b 100644 --- a/pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go @@ -95,11 +95,6 @@ func (in *ArangoPlatformStorageList) DeepCopyObject() runtime.Object { // 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.Deployment != nil { - in, out := &in.Deployment, &out.Deployment - *out = new(string) - **out = **in - } if in.Backend != nil { in, out := &in.Backend, &out.Backend *out = new(ArangoPlatformStorageSpecBackend) @@ -237,11 +232,6 @@ func (in *ArangoPlatformStorageStatus) DeepCopyInto(out *ArangoPlatformStorageSt (*in)[i].DeepCopyInto(&(*out)[i]) } } - if in.Deployment != nil { - in, out := &in.Deployment, &out.Deployment - *out = new(v1.Object) - (*in).DeepCopyInto(*out) - } return } diff --git a/pkg/crd/crds/platform-storage.schema.generated.yaml b/pkg/crd/crds/platform-storage.schema.generated.yaml index 13b5fce6b..b1b4d4ccd 100644 --- a/pkg/crd/crds/platform-storage.schema.generated.yaml +++ b/pkg/crd/crds/platform-storage.schema.generated.yaml @@ -68,9 +68,6 @@ v1alpha1: type: string type: object type: object - deployment: - description: Deployment specifies the ArangoDeployment object name - type: string type: object status: description: Object with preserved fields for backward compatibility diff --git a/pkg/debug_package/generator.go b/pkg/debug_package/generator.go index 098d34390..60c4886d2 100644 --- a/pkg/debug_package/generator.go +++ b/pkg/debug_package/generator.go @@ -47,6 +47,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..39292bdca --- /dev/null +++ b/pkg/debug_package/generators/kubernetes/arango_platform.go @@ -0,0 +1,47 @@ +// +// 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 + } + + return nil +} 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/deployment/resources/arango_profiles.go b/pkg/deployment/resources/arango_profiles.go index 4328dc427..fc83682c0 100644 --- a/pkg/deployment/resources/arango_profiles.go +++ b/pkg/deployment/resources/arango_profiles.go @@ -30,6 +30,7 @@ import ( 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" @@ -75,12 +76,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 } @@ -106,6 +112,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() @@ -134,12 +146,24 @@ 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{}), - gen(constants.ProfilesIntegrationSched, constants.ProfilesIntegrationV2, sidecar.IntegrationSchedulerV2{}), - gen(constants.ProfilesIntegrationEnvoy, constants.ProfilesIntegrationV3, sidecar.IntegrationEnvoyV3{Spec: spec}), - ); 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{})), + gen(constants.ProfilesIntegrationEnvoy, constants.ProfilesIntegrationV3, always(sidecar.IntegrationEnvoyV3{Spec: spec})), + 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() @@ -213,7 +237,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/pod_creator.go b/pkg/deployment/resources/pod_creator.go index 64b2f00b7..2609f916b 100644 --- a/pkg/deployment/resources/pod_creator.go +++ b/pkg/deployment/resources/pod_creator.go @@ -634,6 +634,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 } @@ -777,6 +778,10 @@ 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") diff --git a/pkg/handlers/platform/storage/handler_deployment.go b/pkg/handlers/platform/storage/handler_deployment.go index 6229aa1c4..42f8df97d 100644 --- a/pkg/handlers/platform/storage/handler_deployment.go +++ b/pkg/handlers/platform/storage/handler_deployment.go @@ -28,50 +28,30 @@ import ( networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1" platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" - sharedApi "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1" 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) { - var name = util.WithDefault(extension.Spec.Deployment) - - if status.Deployment != nil { - name = status.Deployment.GetName() - } - - deployment, err := util.WithKubernetesContextTimeoutP2A2(ctx, h.client.DatabaseV1().ArangoDeployments(item.Namespace).Get, name, meta.GetOptions{}) + 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(networkingApi.DeploymentFoundCondition, false, "ArangoDeployment not found", "ArangoDeployment not found"), + status.Conditions.Update(platformApi.DeploymentFoundCondition, false, "ArangoDeployment not found", "ArangoDeployment not found"), ) { return true, operator.Reconcile("Conditions updated") } - return false, nil + return false, operator.Stop("Deployment Not Found") } return false, err } - if status.Deployment == nil { - status.Deployment = util.NewType(sharedApi.NewObject(deployment)) - return true, operator.Reconcile("Deployment saved") - } else if !status.Deployment.Equals(deployment) { - if util.Or( - status.Conditions.Update(networkingApi.DeploymentFoundCondition, false, "ArangoDeployment changed", "ArangoDeployment changed"), - ) { - return true, operator.Reconcile("Conditions updated") - } - - return false, operator.Stop("ArangoDeployment Changed") - } - // Condition for Found should be set to true - if status.Conditions.Update(networkingApi.DeploymentFoundCondition, true, "ArangoDeployment found", "ArangoDeployment found") { + if status.Conditions.UpdateWithHash(networkingApi.DeploymentFoundCondition, true, "ArangoDeployment found", "ArangoDeployment found", string(deployment.GetUID())) { return true, operator.Reconcile("Conditions updated") } 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/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 cb1dcd9b4..c725b02e9 100644 --- a/pkg/integrations/integration.go +++ b/pkg/integrations/integration.go @@ -40,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 d3fdd1564..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( diff --git a/pkg/integrations/sidecar/integration.storage.v2.go b/pkg/integrations/sidecar/integration.storage.v2.go new file mode 100644 index 000000000..44bada0a8 --- /dev/null +++ b/pkg/integrations/sidecar/integration.storage.v2.go @@ -0,0 +1,173 @@ +// +// 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 ( + "net/url" + "path/filepath" + "strconv" + + core "k8s.io/api/core/v1" + + platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1" + "github.com/arangodb/kube-arangodb/pkg/ml/storage" + "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(storage.S3), + }, + 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/storage_v1.go b/pkg/integrations/storage_v1.go index 5e78cc66c..ce57fcc1a 100644 --- a/pkg/integrations/storage_v1.go +++ b/pkg/integrations/storage_v1.go @@ -70,3 +70,7 @@ func (b *storageV1) Handler(ctx context.Context, cmd *cobra.Command) (svc.Handle 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/aws/file.go b/pkg/util/aws/file.go index e8678ebc1..de71d70fb 100644 --- a/pkg/util/aws/file.go +++ b/pkg/util/aws/file.go @@ -75,7 +75,7 @@ func (f *fileProvider) Retrieve() (credentials.Value, error) { f.recent = util.RecentFileModTime(f.accessKeyIDFile, f.secretAccessKeyFile, f.sessionTokenFile) - return credentials.Value{}, nil + return v, nil } func (f *fileProvider) IsExpired() bool { diff --git a/pkg/util/constants/profiles.go b/pkg/util/constants/profiles.go index 1a2fa75b1..4126a505e 100644 --- a/pkg/util/constants/profiles.go +++ b/pkg/util/constants/profiles.go @@ -28,10 +28,11 @@ const ProfilesDeployment = ProfileGroup + "/deployment" const ProfilesIntegrationPrefix = "integration." + ProfileGroup const ( - ProfilesIntegrationAuthn = "authn" - ProfilesIntegrationAuthz = "authz" - ProfilesIntegrationSched = "sched" - ProfilesIntegrationEnvoy = "envoy" + ProfilesIntegrationAuthn = "authn" + ProfilesIntegrationAuthz = "authz" + ProfilesIntegrationSched = "sched" + ProfilesIntegrationEnvoy = "envoy" + ProfilesIntegrationStorage = "storage" ) const ( diff --git a/pkg/util/refs.go b/pkg/util/refs.go index 8926181de..1f73f4ecb 100644 --- a/pkg/util/refs.go +++ b/pkg/util/refs.go @@ -26,6 +26,15 @@ import ( "reflect" ) +// 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 From cce50b32d07e8ca77b89f8c3aae971046e7695b9 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Mon, 11 Nov 2024 15:12:40 +0100 Subject: [PATCH 24/69] [Maintenance] Extract GRPC Package for compatibility (#1763) --- .golangci.yaml | 2 + CHANGELOG.md | 1 + pkg/apis/deployment/v1/compatibility_test.go | 30 +++++++++ .../v1/server_group_volume_mount.go | 67 ++++++++++++++++++- .../deployment/v1/zz_generated.deepcopy.go | 5 -- .../deployment/v2alpha1/compatibility_test.go | 30 +++++++++ .../v2alpha1/server_group_volume_mount.go | 67 ++++++++++++++++++- .../v2alpha1/zz_generated.deepcopy.go | 5 -- pkg/integrations/auth.go | 4 +- pkg/integrations/clients/client.go | 9 +-- pkg/integrations/envoy_auth_v3.go | 4 +- pkg/util/{ => grpc}/grpc.go | 7 +- pkg/util/tests/tgrpc/grpc.go | 6 +- pkg/util/tests/types/compatibility.go | 60 +++++++++++++++++ 14 files changed, 267 insertions(+), 30 deletions(-) create mode 100644 pkg/apis/deployment/v1/compatibility_test.go create mode 100644 pkg/apis/deployment/v2alpha1/compatibility_test.go rename pkg/util/{ => grpc}/grpc.go (96%) create mode 100644 pkg/util/tests/types/compatibility.go diff --git a/.golangci.yaml b/.golangci.yaml index 64b90f524..b307bfe57 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -133,6 +133,8 @@ linters-settings: pkg: k8s.io/apimachinery/pkg/apis/meta/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 d26b5cbdc..62ec2706f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ - (Feature) (Scheduler) Helm Driver Param - (Feature) (Integration) Services Endpoint - (Feature) (Platform) Storage +- (Maintenance) Extract GRPC Client Package ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD 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_volume_mount.go b/pkg/apis/deployment/v1/server_group_volume_mount.go index bb767f040..a4400bf83 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,71 @@ 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. + // +optional + + 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. + // + // +featureGate=RecursiveReadOnlyMounts + // +optional + // 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). + // +optional + + 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). + // +optional + + 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. + // +optional + 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/zz_generated.deepcopy.go b/pkg/apis/deployment/v1/zz_generated.deepcopy.go index d683e6d9d..86f9e84bf 100644 --- a/pkg/apis/deployment/v1/zz_generated.deepcopy.go +++ b/pkg/apis/deployment/v1/zz_generated.deepcopy.go @@ -2907,11 +2907,6 @@ func (in *ServerGroupSpecVolumeHostPath) DeepCopy() *ServerGroupSpecVolumeHostPa // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServerGroupSpecVolumeMount) DeepCopyInto(out *ServerGroupSpecVolumeMount) { *out = *in - if in.RecursiveReadOnly != nil { - in, out := &in.RecursiveReadOnly, &out.RecursiveReadOnly - *out = new(corev1.RecursiveReadOnlyMode) - **out = **in - } if in.MountPropagation != nil { in, out := &in.MountPropagation, &out.MountPropagation *out = new(corev1.MountPropagationMode) 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_volume_mount.go b/pkg/apis/deployment/v2alpha1/server_group_volume_mount.go index 2d0fddd66..18ebba5bf 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,71 @@ 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. + // +optional + + 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. + // + // +featureGate=RecursiveReadOnlyMounts + // +optional + // 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). + // +optional + + 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). + // +optional + + 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. + // +optional + 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/zz_generated.deepcopy.go b/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go index 7cbbb932d..c57528ba7 100644 --- a/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go @@ -2907,11 +2907,6 @@ func (in *ServerGroupSpecVolumeHostPath) DeepCopy() *ServerGroupSpecVolumeHostPa // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServerGroupSpecVolumeMount) DeepCopyInto(out *ServerGroupSpecVolumeMount) { *out = *in - if in.RecursiveReadOnly != nil { - in, out := &in.RecursiveReadOnly, &out.RecursiveReadOnly - *out = new(v1.RecursiveReadOnlyMode) - **out = **in - } if in.MountPropagation != nil { in, out := &in.MountPropagation, &out.MountPropagation *out = new(v1.MountPropagationMode) 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/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/util/grpc.go b/pkg/util/grpc/grpc.go similarity index 96% rename from pkg/util/grpc.go rename to pkg/util/grpc/grpc.go index b5c1f9685..217f54514 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" @@ -35,6 +35,7 @@ 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/svc" ) @@ -43,7 +44,7 @@ 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(addr, opts...) if err != nil { - return Default[T](), nil, err + return util.Default[T](), nil, err } return in(con), con, nil @@ -52,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 diff --git a/pkg/util/tests/tgrpc/grpc.go b/pkg/util/tests/tgrpc/grpc.go index a977c22c0..678b78430 100644 --- a/pkg/util/tests/tgrpc/grpc.go +++ b/pkg/util/tests/tgrpc/grpc.go @@ -32,12 +32,12 @@ import ( "google.golang.org/grpc/status" proto "google.golang.org/protobuf/proto" - "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() @@ -76,5 +76,5 @@ func AsGRPCError(t *testing.T, err error) ErrorStatusValidator { } func GRPCAnyCastAs[T proto.Message](t *testing.T, in *any1.Any, v T) { - require.NoError(t, util.GRPCAnyCastAs[T](in, v)) + require.NoError(t, ugrpc.GRPCAnyCastAs[T](in, v)) } 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 + } +} From dedb020a4d3ce56629a9ccde6c7e8d5f9685d0bb Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Mon, 11 Nov 2024 16:36:01 +0100 Subject: [PATCH 25/69] [Feature] Fix ci-check step (#1765) --- Makefile | 2 +- docs/cli/arangodb_operator_integration.md | 1 + .../v1/server_group_volume_mount.go | 15 +- .../v2alpha1/server_group_volume_mount.go | 15 +- .../database-deployment.schema.generated.yaml | 504 ++++++++++++++++-- 5 files changed, 474 insertions(+), 63 deletions(-) diff --git a/Makefile b/Makefile index 4d11c1118..4a0e11d9c 100644 --- a/Makefile +++ b/Makefile @@ -949,4 +949,4 @@ sync: sync-charts ci-check: @$(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/docs/cli/arangodb_operator_integration.md b/docs/cli/arangodb_operator_integration.md index 3ddc53781..810b4aaeb 100644 --- a/docs/cli/arangodb_operator_integration.md +++ b/docs/cli/arangodb_operator_integration.md @@ -53,6 +53,7 @@ Flags: --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") diff --git a/pkg/apis/deployment/v1/server_group_volume_mount.go b/pkg/apis/deployment/v1/server_group_volume_mount.go index a4400bf83..f693ff2e2 100644 --- a/pkg/apis/deployment/v1/server_group_volume_mount.go +++ b/pkg/apis/deployment/v1/server_group_volume_mount.go @@ -58,11 +58,11 @@ func (s ServerGroupSpecVolumeMounts) Validate() error { 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. - // +optional - ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"` + // RecursiveReadOnly specifies whether read-only mounts should be handled // recursively. // @@ -79,34 +79,29 @@ type ServerGroupSpecVolumeMount struct { // None (or be unspecified, which defaults to None). // // If this field is not specified, it is treated as an equivalent of Disabled. - // - // +featureGate=RecursiveReadOnlyMounts - // +optional // 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). - // +optional - 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). - // +optional - 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. - // +optional SubPathExpr string `json:"subPathExpr,omitempty" protobuf:"bytes,6,opt,name=subPathExpr"` } diff --git a/pkg/apis/deployment/v2alpha1/server_group_volume_mount.go b/pkg/apis/deployment/v2alpha1/server_group_volume_mount.go index 18ebba5bf..37312b1f5 100644 --- a/pkg/apis/deployment/v2alpha1/server_group_volume_mount.go +++ b/pkg/apis/deployment/v2alpha1/server_group_volume_mount.go @@ -58,11 +58,11 @@ func (s ServerGroupSpecVolumeMounts) Validate() error { 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. - // +optional - ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"` + // RecursiveReadOnly specifies whether read-only mounts should be handled // recursively. // @@ -79,34 +79,29 @@ type ServerGroupSpecVolumeMount struct { // None (or be unspecified, which defaults to None). // // If this field is not specified, it is treated as an equivalent of Disabled. - // - // +featureGate=RecursiveReadOnlyMounts - // +optional // 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). - // +optional - 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). - // +optional - 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. - // +optional SubPathExpr string `json:"subPathExpr,omitempty" protobuf:"bytes,6,opt,name=subPathExpr"` } diff --git a/pkg/crd/crds/database-deployment.schema.generated.yaml b/pkg/crd/crds/database-deployment.schema.generated.yaml index 8286063a4..c5f11187a 100644 --- a/pkg/crd/crds/database-deployment.schema.generated.yaml +++ b/pkg/crd/crds/database-deployment.schema.generated.yaml @@ -2069,18 +2069,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 - recursiveReadOnly: - type: string 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 @@ -4314,18 +4334,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 - recursiveReadOnly: - type: string 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 @@ -6477,18 +6517,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 - recursiveReadOnly: - type: string 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 @@ -8722,18 +8782,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 - recursiveReadOnly: - type: string 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 @@ -12078,18 +12158,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 - recursiveReadOnly: - type: string 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 @@ -14384,18 +14484,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 - recursiveReadOnly: - type: string 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 @@ -16540,18 +16660,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 - recursiveReadOnly: - type: string 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 @@ -18796,18 +18936,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 - recursiveReadOnly: - type: string 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 @@ -21041,18 +21201,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 - recursiveReadOnly: - type: string 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 @@ -23204,18 +23384,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 - recursiveReadOnly: - type: string 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 @@ -25449,18 +25649,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 - recursiveReadOnly: - type: string 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 @@ -28805,18 +29025,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 - recursiveReadOnly: - type: string 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 @@ -31111,18 +31351,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 - recursiveReadOnly: - type: string 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 @@ -33267,18 +33527,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 - recursiveReadOnly: - type: string 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 @@ -35523,18 +35803,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 - recursiveReadOnly: - type: string 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 @@ -37768,18 +38068,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 - recursiveReadOnly: - type: string 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 @@ -39931,18 +40251,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 - recursiveReadOnly: - type: string 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 @@ -42176,18 +42516,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 - recursiveReadOnly: - type: string 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 @@ -45532,18 +45892,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 - recursiveReadOnly: - type: string 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 @@ -47838,18 +48218,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 - recursiveReadOnly: - type: string 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 @@ -49994,18 +50394,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 - recursiveReadOnly: - type: string 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 From 5a05c1db5b2de2d70838d9bfdc38ebed509ad461 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:23:02 +0100 Subject: [PATCH 26/69] [Feature] [Platform] Chart (#1762) --- CHANGELOG.md | 1 + Makefile | 3 +- README.md | 2 +- .../crds/platform-chart.yaml | 25 +++ .../templates/platform-operator/role.yaml | 9 +- .../crds/platform-chart.yaml | 25 +++ .../templates/platform-operator/role.yaml | 9 +- .../crds/platform-chart.yaml | 25 +++ .../templates/platform-operator/role.yaml | 9 +- chart/kube-arangodb/crds/platform-chart.yaml | 25 +++ .../templates/platform-operator/role.yaml | 9 +- docs/api/ArangoPlatformChart.V1Alpha1.md | 14 ++ docs/cli/arangodb_operator.md | 2 +- internal/cr_validation_test.go | 9 + internal/docs_test.go | 3 + pkg/apis/platform/definitions.go | 4 + pkg/apis/platform/v1alpha1/chart.go | 69 +++++++ pkg/apis/platform/v1alpha1/chart_details.go | 42 ++++ pkg/apis/platform/v1alpha1/chart_spec.go | 43 +++++ pkg/apis/platform/v1alpha1/chart_status.go | 33 ++++ .../platform/v1alpha1/chart_status_info.go | 33 ++++ pkg/apis/platform/v1alpha1/register.go | 2 + .../v1alpha1/zz_generated.deepcopy.go | 152 +++++++++++++++ pkg/apis/shared/v1/data.go | 59 ++++++ pkg/apis/shared/v1/zz_generated.deepcopy.go | 20 ++ pkg/crd/crds/crds.go | 1 + pkg/crd/crds/crds_test.go | 4 + pkg/crd/crds/platform-chart.go | 51 +++++ .../crds/platform-chart.schema.generated.yaml | 14 ++ pkg/crd/crds/platform-chart.yaml | 25 +++ pkg/crd/platform.go | 1 + .../platform/v1alpha1/arangoplatformchart.go | 73 +++++++ .../v1alpha1/fake/fake_arangoplatformchart.go | 151 +++++++++++++++ .../v1alpha1/fake/fake_platform_client.go | 4 + .../platform/v1alpha1/generated_expansion.go | 2 + .../platform/v1alpha1/platform_client.go | 5 + .../informers/externalversions/generic.go | 2 + .../platform/v1alpha1/arangoplatformchart.go | 94 +++++++++ .../platform/v1alpha1/interface.go | 7 + .../platform/v1alpha1/arangoplatformchart.go | 74 +++++++ .../platform/v1alpha1/expansion_generated.go | 8 + pkg/handlers/platform/chart/chart_test.go | 148 ++++++++++++++ pkg/handlers/platform/chart/handler.go | 181 ++++++++++++++++++ pkg/handlers/platform/chart/handler_test.go | 59 ++++++ pkg/handlers/platform/chart/local.go | 38 ++++ pkg/handlers/platform/chart/register.go | 55 ++++++ .../platform/chart/suite/example-1.0.0.tgz | Bin 0 -> 588 bytes .../platform/chart/suite/example-1.1.0.tgz | Bin 0 -> 588 bytes pkg/handlers/platform/chart/suite_test.go | 67 +++++++ .../platform/storage/handler_deployment.go | 3 +- pkg/handlers/platform/storage/local.go | 4 +- pkg/operator/operator.go | 5 + pkg/operatorV2/update_wraps.go | 4 + pkg/util/tests/kubernetes.go | 46 +++++ pkg/util/tests/kubernetes_test.go | 1 + 55 files changed, 1731 insertions(+), 23 deletions(-) create mode 100644 chart/kube-arangodb-arm64/crds/platform-chart.yaml create mode 100644 chart/kube-arangodb-enterprise-arm64/crds/platform-chart.yaml create mode 100644 chart/kube-arangodb-enterprise/crds/platform-chart.yaml create mode 100644 chart/kube-arangodb/crds/platform-chart.yaml create mode 100644 docs/api/ArangoPlatformChart.V1Alpha1.md create mode 100644 pkg/apis/platform/v1alpha1/chart.go create mode 100644 pkg/apis/platform/v1alpha1/chart_details.go create mode 100644 pkg/apis/platform/v1alpha1/chart_spec.go create mode 100644 pkg/apis/platform/v1alpha1/chart_status.go create mode 100644 pkg/apis/platform/v1alpha1/chart_status_info.go create mode 100644 pkg/apis/shared/v1/data.go create mode 100644 pkg/crd/crds/platform-chart.go create mode 100644 pkg/crd/crds/platform-chart.schema.generated.yaml create mode 100644 pkg/crd/crds/platform-chart.yaml create mode 100644 pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformchart.go create mode 100644 pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformchart.go create mode 100644 pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformchart.go create mode 100644 pkg/generated/listers/platform/v1alpha1/arangoplatformchart.go create mode 100644 pkg/handlers/platform/chart/chart_test.go create mode 100644 pkg/handlers/platform/chart/handler.go create mode 100644 pkg/handlers/platform/chart/handler_test.go create mode 100644 pkg/handlers/platform/chart/local.go create mode 100644 pkg/handlers/platform/chart/register.go create mode 100644 pkg/handlers/platform/chart/suite/example-1.0.0.tgz create mode 100644 pkg/handlers/platform/chart/suite/example-1.1.0.tgz create mode 100644 pkg/handlers/platform/chart/suite_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 62ec2706f..aef9ff628 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ - (Feature) (Integration) Services Endpoint - (Feature) (Platform) Storage - (Maintenance) Extract GRPC Client Package +- (Feature) (Platform) Chart ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/Makefile b/Makefile index 4a0e11d9c..0ebfab476 100644 --- a/Makefile +++ b/Makefile @@ -922,7 +922,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: diff --git a/README.md b/README.md index f2833c9dc..4de555f57 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,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, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, 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-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 (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-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-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 (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 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/templates/platform-operator/role.yaml b/chart/kube-arangodb-arm64/templates/platform-operator/role.yaml index c97eec0cb..dbcd866fe 100644 --- a/chart/kube-arangodb-arm64/templates/platform-operator/role.yaml +++ b/chart/kube-arangodb-arm64/templates/platform-operator/role.yaml @@ -14,10 +14,11 @@ metadata: release: {{ .Release.Name }} rules: - apiGroups: ["platform.arangodb.com"] - resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + resources: + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/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/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/templates/platform-operator/role.yaml b/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/role.yaml index c97eec0cb..dbcd866fe 100644 --- a/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/role.yaml +++ b/chart/kube-arangodb-enterprise-arm64/templates/platform-operator/role.yaml @@ -14,10 +14,11 @@ metadata: release: {{ .Release.Name }} rules: - apiGroups: ["platform.arangodb.com"] - resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + resources: + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/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/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/templates/platform-operator/role.yaml b/chart/kube-arangodb-enterprise/templates/platform-operator/role.yaml index c97eec0cb..dbcd866fe 100644 --- a/chart/kube-arangodb-enterprise/templates/platform-operator/role.yaml +++ b/chart/kube-arangodb-enterprise/templates/platform-operator/role.yaml @@ -14,10 +14,11 @@ metadata: release: {{ .Release.Name }} rules: - apiGroups: ["platform.arangodb.com"] - resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + resources: + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/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/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/templates/platform-operator/role.yaml b/chart/kube-arangodb/templates/platform-operator/role.yaml index c97eec0cb..dbcd866fe 100644 --- a/chart/kube-arangodb/templates/platform-operator/role.yaml +++ b/chart/kube-arangodb/templates/platform-operator/role.yaml @@ -14,10 +14,11 @@ metadata: release: {{ .Release.Name }} rules: - apiGroups: ["platform.arangodb.com"] - resources: ["arangoplatformstorages", "arangoplatformstorages/status"] + resources: + - "arangoplatformstorages" + - "arangoplatformstorages/status" + - "arangoplatformcharts" + - "arangoplatformcharts/status" verbs: ["*"] - - apiGroups: [""] - resources: ["pods", "services", "endpoints"] - verbs: ["get", "list", "watch"] {{- end }} {{- end }} \ No newline at end of file diff --git a/docs/api/ArangoPlatformChart.V1Alpha1.md b/docs/api/ArangoPlatformChart.V1Alpha1.md new file mode 100644 index 000000000..0db70ce01 --- /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.43/pkg/apis/platform/v1alpha1/chart_spec.go#L30) + diff --git a/docs/cli/arangodb_operator.md b/docs/cli/arangodb_operator.md index 2d0ae283b..e543ca2e9 100644 --- a/docs/cli/arangodb_operator.md +++ b/docs/cli/arangodb_operator.md @@ -80,7 +80,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, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, 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-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 (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-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-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 (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 diff --git a/internal/cr_validation_test.go b/internal/cr_validation_test.go index d8b4c0bc6..c3f37e3de 100644 --- a/internal/cr_validation_test.go +++ b/internal/cr_validation_test.go @@ -339,6 +339,15 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, }, + "platform-chart": { + fmt.Sprintf("%s/pkg/apis/platform/v1alpha1", root): { + "v1alpha1": { + objects: map[string]interface{}{ + "spec": platformApi.ArangoPlatformChart{}.Spec, + }, + }, + }, + }, } for filePrefix, packagesToVersion := range input { diff --git a/internal/docs_test.go b/internal/docs_test.go index eb0a1f027..7e1ef4938 100644 --- a/internal/docs_test.go +++ b/internal/docs_test.go @@ -354,6 +354,9 @@ func Test_GenerateAPIDocs(t *testing.T) { "ArangoPlatformStorage.V1Alpha1": { "Spec": platformApi.ArangoPlatformStorage{}.Spec, }, + "ArangoPlatformChart.V1Alpha1": { + "Spec": platformApi.ArangoPlatformChart{}.Spec, + }, }, Shared: []string{ "shared/v1", diff --git a/pkg/apis/platform/definitions.go b/pkg/apis/platform/definitions.go index 00c51f4cf..aca71e0df 100644 --- a/pkg/apis/platform/definitions.go +++ b/pkg/apis/platform/definitions.go @@ -25,5 +25,9 @@ const ( 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..4adcb0fee --- /dev/null +++ b/pkg/apis/platform/v1alpha1/chart_details.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 v1alpha1 + +type ChartDetails struct { + Name string `json:"name,omitempty"` + Version string `json:"version,omitempty"` +} + +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_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/register.go b/pkg/apis/platform/v1alpha1/register.go index 6d7e98c95..d4fe51782 100644 --- a/pkg/apis/platform/v1alpha1/register.go +++ b/pkg/apis/platform/v1alpha1/register.go @@ -49,6 +49,8 @@ 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/zz_generated.deepcopy.go b/pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go index 1b0fee98b..c7ccfbd4e 100644 --- a/pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go @@ -31,6 +31,116 @@ import ( 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 @@ -244,3 +354,45 @@ func (in *ArangoPlatformStorageStatus) DeepCopy() *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 + 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 *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) + **out = **in + } + 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/shared/v1/data.go b/pkg/apis/shared/v1/data.go new file mode 100644 index 000000000..b25c623f3 --- /dev/null +++ b/pkg/apis/shared/v1/data.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 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") + } + + ret, err := base64.StdEncoding.DecodeString(string(bytes)) + if err != nil { + return err + } + + *d = ret + + return nil +} diff --git a/pkg/apis/shared/v1/zz_generated.deepcopy.go b/pkg/apis/shared/v1/zz_generated.deepcopy.go index dc3842836..2940a876b 100644 --- a/pkg/apis/shared/v1/zz_generated.deepcopy.go +++ b/pkg/apis/shared/v1/zz_generated.deepcopy.go @@ -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/crd/crds/crds.go b/pkg/crd/crds/crds.go index cd7de36ac..036c3f686 100644 --- a/pkg/crd/crds/crds.go +++ b/pkg/crd/crds/crds.go @@ -100,6 +100,7 @@ func AllDefinitions() []Definition { // Platform PlatformStorageDefinitionWithOptions(), + PlatformChartDefinitionWithOptions(), } } diff --git a/pkg/crd/crds/crds_test.go b/pkg/crd/crds/crds_test.go index 5fde00236..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 { @@ -154,6 +157,7 @@ func Test_CRDGetters(t *testing.T) { AnalyticsGAEWithOptions, NetworkingRouteWithOptions, PlatformStorageWithOptions, + PlatformChartWithOptions, } require.Equal(t, len(AllDefinitions()), len(getters)) 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/platform.go b/pkg/crd/platform.go index 50ed29256..fa9f10a65 100644 --- a/pkg/crd/platform.go +++ b/pkg/crd/platform.go @@ -27,6 +27,7 @@ import ( func init() { defs := []func(...func(options *crds.CRDOptions)) crds.Definition{ crds.PlatformStorageDefinitionWithOptions, + crds.PlatformChartDefinitionWithOptions, } for _, getDef := range defs { defFn := getDef // bring into scope 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..44d6495a9 --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformchart.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 +// + +// 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/fake/fake_arangoplatformchart.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformchart.go new file mode 100644 index 000000000..9f10e028d --- /dev/null +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformchart.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 +// + +// 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_platform_client.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_platform_client.go index 285ad792a..0942ded58 100644 --- 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 @@ -32,6 +32,10 @@ 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} } diff --git a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/generated_expansion.go index 6cf12f503..ecd4c552c 100644 --- a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/generated_expansion.go @@ -22,4 +22,6 @@ 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 index 51a078236..9825a5e0e 100644 --- a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/platform_client.go +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/platform_client.go @@ -32,6 +32,7 @@ import ( type PlatformV1alpha1Interface interface { RESTClient() rest.Interface + ArangoPlatformChartsGetter ArangoPlatformStoragesGetter } @@ -40,6 +41,10 @@ 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) } diff --git a/pkg/generated/informers/externalversions/generic.go b/pkg/generated/informers/externalversions/generic.go index 1dac5ea7c..af370ff0f 100644 --- a/pkg/generated/informers/externalversions/generic.go +++ b/pkg/generated/informers/externalversions/generic.go @@ -124,6 +124,8 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource 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 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..d57a8961b --- /dev/null +++ b/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformchart.go @@ -0,0 +1,94 @@ +// +// 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 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/interface.go b/pkg/generated/informers/externalversions/platform/v1alpha1/interface.go index 991fdb0f3..ecd0dfa66 100644 --- a/pkg/generated/informers/externalversions/platform/v1alpha1/interface.go +++ b/pkg/generated/informers/externalversions/platform/v1alpha1/interface.go @@ -28,6 +28,8 @@ import ( // 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 } @@ -43,6 +45,11 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList 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/listers/platform/v1alpha1/arangoplatformchart.go b/pkg/generated/listers/platform/v1alpha1/arangoplatformchart.go new file mode 100644 index 000000000..8c43e7c2a --- /dev/null +++ b/pkg/generated/listers/platform/v1alpha1/arangoplatformchart.go @@ -0,0 +1,74 @@ +// +// 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 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/expansion_generated.go b/pkg/generated/listers/platform/v1alpha1/expansion_generated.go index 4a27a39b2..66f835ad4 100644 --- a/pkg/generated/listers/platform/v1alpha1/expansion_generated.go +++ b/pkg/generated/listers/platform/v1alpha1/expansion_generated.go @@ -22,6 +22,14 @@ 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{} diff --git a/pkg/handlers/platform/chart/chart_test.go b/pkg/handlers/platform/chart/chart_test.go new file mode 100644 index 000000000..99fcdecef --- /dev/null +++ b/pkg/handlers/platform/chart/chart_test.go @@ -0,0 +1,148 @@ +// +// 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" +) + +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 = chart_1_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 = chart_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.0.0", extension.Status.Info.Details.GetVersion()) + require.EqualValues(t, util.SHA256(chart_1_0), extension.Status.Info.Checksum) + 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 = chart_1_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.1.0", extension.Status.Info.Details.GetVersion()) + require.EqualValues(t, util.SHA256(chart_1_1), 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..7b5cc9db8 --- /dev/null +++ b/pkg/handlers/platform/chart/handler.go @@ -0,0 +1,181 @@ +// +// 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.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") + } + + status.Info = &platformApi.ChartStatusInfo{ + Definition: extension.Spec.Definition, + Checksum: extension.Spec.Definition.SHA256(), + Valid: true, + Details: chartInfoExtract(chart), + } + + 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) *platformApi.ChartDetails { + if chart == nil || chart.Metadata == nil { + return nil + } + + return &platformApi.ChartDetails{ + Name: chart.Name(), + Version: chart.Metadata.Version, + } +} 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/example-1.0.0.tgz b/pkg/handlers/platform/chart/suite/example-1.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c12100f2b635d307804e91629b3ea140cca5d81f GIT binary patch literal 588 zcmV-S0<--eiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI##kDD+I?lZr_s_t>n(59_~w5NOC>9k4r?t<4wg@h#mt>XCa z6A(0wcI&3Gb|>+@AjO{(+wx~jUop#5T09<5+u(#*IvX8~F}C5n{W8XeU&hva7V<4y zalTwH`HY3j&5F%{jUUQ63S&{v*k8XjOzw>UbMZpj2qhyZLr-Ex5xA!C%H9$NEMVTf zW1TQQdi|G}7G(a-0Jy6Ea6QofifvYt{%--__dPE`ixE`yy@Q!>bM*SRl;tT}GK)AH zdkS3B|8_alKM%Lzr2kuB@c%ywnMClYr)5F@@+o z1TWn`xM4Nys%i=F3SSCk30^_SgrtQ{UAOnQj=i;Y@PTAf|H&Lb*S{rW7r9Etn*vw$ zzupe?zh3ca|Gxi=0Kzo&e^X_iUYEy130iog{FrBoKJP|{Up-lus`>Ns~ilT+N7 zVDc zVQyr3R8em|NM&qo0PI##kDD+I?lZr_s_t>nKxr!>?dhI(I&IRuyWq7^Az?{Ct2qAq z6bPC|yLHpLb|>+@AjO{(+wx~jU$H22T0HJinc#>;KD#;?V{9GA-Ip;o{xY_TXJNbv z<7K>L5u33vT1Vjw*!4p>MWqd@8T;$E#>u@AV98%dX)Z+qb?6B!C;`_LUOiaCAPksy z?^q{XAA|mD%q!CWW&m8&f4Caye`!a;r2iYh_kGXH&|m^hd+%T-+#G}c4HadMhV&vW zt~~`V>3TXc`DUQckETc*269 zZJkY*n4TeY$2}{@E#=zY1%PE49I7oTL56g|<>FWO1MDd;0=-|Pc2VtV{m$x0{`V7? z(BOIcQh@?@l=<7^kMDgVRr8d7?#P8UD9&X$_^AHuJfW{-)A*oJ>D+C6bCGxI~%H Date: Tue, 12 Nov 2024 17:55:27 +0100 Subject: [PATCH 27/69] [Feature] [Scheduler] Deployment Scale (#1764) --- .golangci.yaml | 2 ++ CHANGELOG.md | 1 + .../crds/scheduler-deployment.yaml | 3 ++ .../crds/scheduler-deployment.yaml | 3 ++ .../crds/scheduler-deployment.yaml | 3 ++ .../crds/scheduler-deployment.yaml | 3 ++ .../scheduler/v1beta1/types_deployment.go | 2 ++ pkg/crd/crds/scheduler-deployment.yaml | 3 ++ .../v1beta1/arangoschedulerdeployment.go | 33 +++++++++++++++++++ .../fake/fake_arangoschedulerdeployment.go | 25 ++++++++++++++ pkg/util/k8sutil/inspector/generic/mod.go | 14 ++++++++ 11 files changed, 92 insertions(+) diff --git a/.golangci.yaml b/.golangci.yaml index b307bfe57..4a55daca8 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -131,6 +131,8 @@ linters-settings: 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 diff --git a/CHANGELOG.md b/CHANGELOG.md index aef9ff628..907f12b23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ - (Feature) (Platform) Storage - (Maintenance) Extract GRPC Client Package - (Feature) (Platform) Chart +- (Feature) (Scheduler) Deployment Scale Functionality ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD 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-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/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/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/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/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/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerdeployment.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerdeployment.go index a7becc2aa..702f30e9f 100644 --- a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerdeployment.go +++ b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerdeployment.go @@ -27,6 +27,7 @@ import ( 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" @@ -51,6 +52,9 @@ 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 } @@ -71,3 +75,32 @@ func newArangoSchedulerDeployments(c *SchedulerV1beta1Client, namespace string) func() *v1beta1.ArangoSchedulerDeploymentList { return &v1beta1.ArangoSchedulerDeploymentList{} }), } } + +// 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(arangoSchedulerDeploymentName). + SubResource("scale"). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// 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(arangoSchedulerDeploymentName). + SubResource("scale"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(scale). + Do(ctx). + Into(result) + return +} 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 7a30183df..ba6d76840 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 @@ -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" @@ -149,3 +150,27 @@ func (c *FakeArangoSchedulerDeployments) Patch(ctx context.Context, name string, } 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/util/k8sutil/inspector/generic/mod.go b/pkg/util/k8sutil/inspector/generic/mod.go index 93da1457d..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" ) @@ -61,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] } From 39952962dd0cf1d884264ba8de5c75690cc437fb Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 15 Nov 2024 12:33:03 +0100 Subject: [PATCH 28/69] [Feature] [Platform] Chart Integration (#1766) --- .golangci.yaml | 4 + CHANGELOG.md | 1 + integrations/scheduler/v2/chart.go | 111 +++++ integrations/scheduler/v2/chart_test.go | 269 +++++++++++ .../scheduler/v2/definition/chart.pb.go | 457 ++++++++++++++++++ .../scheduler/v2/definition/chart.proto | 59 +++ .../scheduler/v2/definition/definition.pb.go | 259 +++++----- .../scheduler/v2/definition/definition.proto | 11 + .../v2/definition/definition_grpc.pb.go | 144 +++++- .../scheduler/v2/definition/kubernetes.pb.go | 299 +++++++++++- .../scheduler/v2/definition/kubernetes.proto | 40 ++ integrations/scheduler/v2/errors.go | 44 ++ .../scheduler/v2/implementation_test.go | 40 +- integrations/scheduler/v2/kubernetes.go | 31 +- integrations/scheduler/v2/suite_test.go | 20 +- integrations/storage/v2/definition/helpers.go | 50 +- integrations/storage/v2/storage_test.go | 15 +- pkg/apis/shared/v1/data.go | 8 +- pkg/apis/shared/v1/data_test.go | 37 ++ .../generators/kubernetes/arango_platform.go | 5 + .../kubernetes/arango_platform_c.go | 73 +++ pkg/deployment/deployment_suite_test.go | 2 +- pkg/deployment/resources/arango_profiles.go | 5 +- pkg/util/grpc/stream.go | 87 ++++ pkg/util/json.go | 60 +++ pkg/util/k8sutil/helm/chart_manager.go | 252 ++++++++++ pkg/util/k8sutil/helm/chart_manager_test.go | 83 ++++ pkg/util/kclient/client_factory.go | 3 +- pkg/util/kclient/fake.go | 6 +- pkg/util/mod.go | 49 ++ pkg/util/next.go | 27 ++ pkg/util/refs.go | 29 -- 32 files changed, 2339 insertions(+), 241 deletions(-) create mode 100644 integrations/scheduler/v2/chart.go create mode 100644 integrations/scheduler/v2/chart_test.go create mode 100644 integrations/scheduler/v2/definition/chart.pb.go create mode 100644 integrations/scheduler/v2/definition/chart.proto create mode 100644 integrations/scheduler/v2/errors.go create mode 100644 pkg/apis/shared/v1/data_test.go create mode 100644 pkg/debug_package/generators/kubernetes/arango_platform_c.go create mode 100644 pkg/util/grpc/stream.go create mode 100644 pkg/util/json.go create mode 100644 pkg/util/k8sutil/helm/chart_manager.go create mode 100644 pkg/util/k8sutil/helm/chart_manager_test.go create mode 100644 pkg/util/mod.go create mode 100644 pkg/util/next.go diff --git a/.golangci.yaml b/.golangci.yaml index 4a55daca8..0e13e8a3f 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -45,6 +45,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 diff --git a/CHANGELOG.md b/CHANGELOG.md index 907f12b23..029687bcd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ - (Maintenance) Extract GRPC Client Package - (Feature) (Platform) Chart - (Feature) (Scheduler) Deployment Scale Functionality +- (Feature) (Platform) Chart Integration ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/integrations/scheduler/v2/chart.go b/integrations/scheduler/v2/chart.go new file mode 100644 index 000000000..0107ba2ae --- /dev/null +++ b/integrations/scheduler/v2/chart.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 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.client.Client().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.client.Client().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..512b6fcce --- /dev/null +++ b/integrations/scheduler/v2/chart_test.go @@ -0,0 +1,269 @@ +// +// 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" + "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, h := 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 := h.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, h := InternalClient(t, ctx, func(c Configuration) Configuration { + c.Namespace = tests.FakeNamespace + c.Deployment = tests.FakeNamespace + return c + }) + + z := h.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/integrations/scheduler/v2/definition/chart.pb.go b/integrations/scheduler/v2/definition/chart.pb.go new file mode 100644 index 000000000..77d22e830 --- /dev/null +++ b/integrations/scheduler/v2/definition/chart.pb.go @@ -0,0 +1,457 @@ +// +// 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"` +} + +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 "" +} + +// 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[1] + 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[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 SchedulerV2ListChartsRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2ListChartsRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{1} +} + +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[2] + 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[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 SchedulerV2ListChartsResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2ListChartsResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{2} +} + +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[3] + 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[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 SchedulerV2GetChartRequest.ProtoReflect.Descriptor instead. +func (*SchedulerV2GetChartRequest) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{3} +} + +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[4] + 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[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 SchedulerV2GetChartResponse.ProtoReflect.Descriptor instead. +func (*SchedulerV2GetChartResponse) Descriptor() ([]byte, []int) { + return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{4} +} + +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, 0x44, 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, 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, 5) +var file_integrations_scheduler_v2_definition_chart_proto_goTypes = []interface{}{ + (*SchedulerV2ChartInfo)(nil), // 0: scheduler.SchedulerV2ChartInfo + (*SchedulerV2ListChartsRequest)(nil), // 1: scheduler.SchedulerV2ListChartsRequest + (*SchedulerV2ListChartsResponse)(nil), // 2: scheduler.SchedulerV2ListChartsResponse + (*SchedulerV2GetChartRequest)(nil), // 3: scheduler.SchedulerV2GetChartRequest + (*SchedulerV2GetChartResponse)(nil), // 4: scheduler.SchedulerV2GetChartResponse +} +var file_integrations_scheduler_v2_definition_chart_proto_depIdxs = []int32{ + 0, // 0: scheduler.SchedulerV2GetChartResponse.info:type_name -> scheduler.SchedulerV2ChartInfo + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] 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 +} + +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.(*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[2].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[3].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[4].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[1].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: 5, + 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..7dad5cffb --- /dev/null +++ b/integrations/scheduler/v2/definition/chart.proto @@ -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 by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES 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; +} + +// 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/integrations/scheduler/v2/definition/definition.pb.go b/integrations/scheduler/v2/definition/definition.pb.go index c97b551d4..8f5de8e1c 100644 --- a/integrations/scheduler/v2/definition/definition.pb.go +++ b/integrations/scheduler/v2/definition/definition.pb.go @@ -47,113 +47,143 @@ var file_integrations_scheduler_v2_definition_definition_proto_rawDesc = []byte{ 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, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 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, 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, 0xb5, 0x08, 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, + 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, 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, + 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, - 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, + 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, 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, + 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, 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, + 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, - 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, 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, + 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 - (*SchedulerV2ListResponse)(nil), // 11: scheduler.SchedulerV2ListResponse - (*SchedulerV2StatusResponse)(nil), // 12: scheduler.SchedulerV2StatusResponse - (*SchedulerV2StatusObjectsResponse)(nil), // 13: scheduler.SchedulerV2StatusObjectsResponse - (*SchedulerV2InstallResponse)(nil), // 14: scheduler.SchedulerV2InstallResponse - (*SchedulerV2UpgradeResponse)(nil), // 15: scheduler.SchedulerV2UpgradeResponse - (*SchedulerV2UninstallResponse)(nil), // 16: scheduler.SchedulerV2UninstallResponse - (*SchedulerV2TestResponse)(nil), // 17: scheduler.SchedulerV2TestResponse - (*SchedulerV2DiscoverAPIResourcesResponse)(nil), // 18: scheduler.SchedulerV2DiscoverAPIResourcesResponse - (*SchedulerV2DiscoverAPIResourceResponse)(nil), // 19: scheduler.SchedulerV2DiscoverAPIResourceResponse - (*SchedulerV2KubernetesGetResponse)(nil), // 20: scheduler.SchedulerV2KubernetesGetResponse + (*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 @@ -168,20 +198,26 @@ var file_integrations_scheduler_v2_definition_definition_proto_depIdxs = []int32 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 - 0, // 12: scheduler.SchedulerV2.InvalidateCache:output_type -> shared.Empty - 0, // 13: scheduler.SchedulerV2.Alive:output_type -> shared.Empty - 11, // 14: scheduler.SchedulerV2.List:output_type -> scheduler.SchedulerV2ListResponse - 12, // 15: scheduler.SchedulerV2.Status:output_type -> scheduler.SchedulerV2StatusResponse - 13, // 16: scheduler.SchedulerV2.StatusObjects:output_type -> scheduler.SchedulerV2StatusObjectsResponse - 14, // 17: scheduler.SchedulerV2.Install:output_type -> scheduler.SchedulerV2InstallResponse - 15, // 18: scheduler.SchedulerV2.Upgrade:output_type -> scheduler.SchedulerV2UpgradeResponse - 16, // 19: scheduler.SchedulerV2.Uninstall:output_type -> scheduler.SchedulerV2UninstallResponse - 17, // 20: scheduler.SchedulerV2.Test:output_type -> scheduler.SchedulerV2TestResponse - 18, // 21: scheduler.SchedulerV2.DiscoverAPIResources:output_type -> scheduler.SchedulerV2DiscoverAPIResourcesResponse - 19, // 22: scheduler.SchedulerV2.DiscoverAPIResource:output_type -> scheduler.SchedulerV2DiscoverAPIResourceResponse - 20, // 23: scheduler.SchedulerV2.KubernetesGet:output_type -> scheduler.SchedulerV2KubernetesGetResponse - 12, // [12:24] is the sub-list for method output_type - 0, // [0:12] is the sub-list for method input_type + 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 @@ -192,6 +228,7 @@ 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{} diff --git a/integrations/scheduler/v2/definition/definition.proto b/integrations/scheduler/v2/definition/definition.proto index 284d1bf51..8d8426c1e 100644 --- a/integrations/scheduler/v2/definition/definition.proto +++ b/integrations/scheduler/v2/definition/definition.proto @@ -22,6 +22,7 @@ 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"; @@ -57,5 +58,15 @@ service SchedulerV2 { // 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 index 75805fdf8..122f3bf76 100644 --- a/integrations/scheduler/v2/definition/definition_grpc.pb.go +++ b/integrations/scheduler/v2/definition/definition_grpc.pb.go @@ -47,6 +47,12 @@ type SchedulerV2Client interface { 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 { @@ -165,6 +171,56 @@ func (c *schedulerV2Client) KubernetesGet(ctx context.Context, in *SchedulerV2Ku 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 @@ -193,6 +249,12 @@ type SchedulerV2Server interface { 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() } @@ -236,6 +298,15 @@ func (UnimplementedSchedulerV2Server) DiscoverAPIResource(context.Context, *Sche 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. @@ -465,6 +536,63 @@ func _SchedulerV2_KubernetesGet_Handler(srv interface{}, ctx context.Context, de 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) @@ -520,7 +648,21 @@ var SchedulerV2_ServiceDesc = grpc.ServiceDesc{ 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, + }, }, - Streams: []grpc.StreamDesc{}, Metadata: "integrations/scheduler/v2/definition/definition.proto", } diff --git a/integrations/scheduler/v2/definition/kubernetes.pb.go b/integrations/scheduler/v2/definition/kubernetes.pb.go index c1bee3050..f305b89f2 100644 --- a/integrations/scheduler/v2/definition/kubernetes.pb.go +++ b/integrations/scheduler/v2/definition/kubernetes.pb.go @@ -491,6 +491,195 @@ func (x *SchedulerV2KubernetesGetResponse) GetObjects() []*SchedulerV2ReleaseInf 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{ @@ -563,12 +752,42 @@ var file_integrations_scheduler_v2_definition_kubernetes_proto_rawDesc = []byte{ 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, 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, + 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 ( @@ -583,28 +802,30 @@ func file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescGZIP() [] return file_integrations_scheduler_v2_definition_kubernetes_proto_rawDescData } -var file_integrations_scheduler_v2_definition_kubernetes_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +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 - (*SchedulerV2ReleaseInfoResource)(nil), // 7: scheduler.SchedulerV2ReleaseInfoResource - (*SchedulerV2ReleaseInfoResourceObject)(nil), // 8: scheduler.SchedulerV2ReleaseInfoResourceObject + (*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 - 7, // 2: scheduler.SchedulerV2KubernetesGetRequest.resources:type_name -> scheduler.SchedulerV2ReleaseInfoResource - 8, // 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 + 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() } @@ -698,15 +919,41 @@ func file_integrations_scheduler_v2_definition_kubernetes_proto_init() { 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: 7, + NumMessages: 9, NumExtensions: 0, NumServices: 0, }, diff --git a/integrations/scheduler/v2/definition/kubernetes.proto b/integrations/scheduler/v2/definition/kubernetes.proto index 34248f77e..7f13d5718 100644 --- a/integrations/scheduler/v2/definition/kubernetes.proto +++ b/integrations/scheduler/v2/definition/kubernetes.proto @@ -90,4 +90,44 @@ message SchedulerV2KubernetesGetRequest { 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/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/implementation_test.go b/integrations/scheduler/v2/implementation_test.go index db4f83679..86bf1cadf 100644 --- a/integrations/scheduler/v2/implementation_test.go +++ b/integrations/scheduler/v2/implementation_test.go @@ -27,7 +27,7 @@ import ( "github.com/stretchr/testify/require" "helm.sh/helm/v3/pkg/action" - "github.com/arangodb/kube-arangodb/integrations/scheduler/v2/definition" + 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/tests" @@ -71,7 +71,7 @@ func Test_Implementation(t *testing.T) { ctx, c := context.WithCancel(context.Background()) defer c() - scheduler, h := Client(t, ctx, func(c Configuration) Configuration { + scheduler, h := ExternalClient(t, ctx, func(c Configuration) Configuration { c.Namespace = tests.FakeNamespace c.Deployment = tests.FakeNamespace return c @@ -90,7 +90,7 @@ func Test_Implementation(t *testing.T) { }) t.Run("Check API Resources", func(t *testing.T) { - o, err := scheduler.DiscoverAPIResources(context.Background(), &definition.SchedulerV2DiscoverAPIResourcesRequest{ + o, err := scheduler.DiscoverAPIResources(context.Background(), &pbSchedulerV2.SchedulerV2DiscoverAPIResourcesRequest{ Version: "v1", }) require.NoError(t, err) @@ -101,7 +101,7 @@ func Test_Implementation(t *testing.T) { t.Run("Check API Resource", func(t *testing.T) { - oz, err := scheduler.DiscoverAPIResource(context.Background(), &definition.SchedulerV2DiscoverAPIResourceRequest{ + oz, err := scheduler.DiscoverAPIResource(context.Background(), &pbSchedulerV2.SchedulerV2DiscoverAPIResourceRequest{ Version: "v1", Kind: "ConfigMap", }) @@ -111,7 +111,7 @@ func Test_Implementation(t *testing.T) { t.Run("Check API Resource - Missing", func(t *testing.T) { - oz, err := scheduler.DiscoverAPIResource(context.Background(), &definition.SchedulerV2DiscoverAPIResourceRequest{ + oz, err := scheduler.DiscoverAPIResource(context.Background(), &pbSchedulerV2.SchedulerV2DiscoverAPIResourceRequest{ Version: "v1", Kind: "ConfigMap2", }) @@ -120,7 +120,7 @@ func Test_Implementation(t *testing.T) { }) t.Run("Status on Missing", func(t *testing.T) { - status, err := scheduler.Status(context.Background(), &definition.SchedulerV2StatusRequest{ + status, err := scheduler.Status(context.Background(), &pbSchedulerV2.SchedulerV2StatusRequest{ Name: "test", }) require.NoError(t, err) @@ -129,14 +129,14 @@ func Test_Implementation(t *testing.T) { }) t.Run("List Empty", func(t *testing.T) { - status, err := scheduler.List(context.Background(), &definition.SchedulerV2ListRequest{}) + 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(), &definition.SchedulerV2InstallRequest{ + status, err := scheduler.Install(context.Background(), &pbSchedulerV2.SchedulerV2InstallRequest{ Name: "test", Values: nil, Chart: example_1_0_0, @@ -147,7 +147,7 @@ func Test_Implementation(t *testing.T) { }) t.Run("List After", func(t *testing.T) { - status, err := scheduler.List(context.Background(), &definition.SchedulerV2ListRequest{}) + status, err := scheduler.List(context.Background(), &pbSchedulerV2.SchedulerV2ListRequest{}) require.NoError(t, err) require.Len(t, status.GetReleases(), 1) @@ -163,18 +163,18 @@ func Test_Implementation(t *testing.T) { }) t.Run("List After - Still should not see first one", func(t *testing.T) { - status, err := scheduler.List(context.Background(), &definition.SchedulerV2ListRequest{}) + 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(), &definition.SchedulerV2InstallRequest{ + status, err := scheduler.Install(context.Background(), &pbSchedulerV2.SchedulerV2InstallRequest{ Name: "test-x", Values: nil, Chart: example_1_0_0, - Options: &definition.SchedulerV2InstallRequestOptions{ + Options: &pbSchedulerV2.SchedulerV2InstallRequestOptions{ Labels: map[string]string{ "X": "X", }, @@ -198,15 +198,15 @@ func Test_Implementation(t *testing.T) { }) t.Run("List After - Should see 2 services", func(t *testing.T) { - status, err := scheduler.List(context.Background(), &definition.SchedulerV2ListRequest{}) + 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(), &definition.SchedulerV2ListRequest{ - Options: &definition.SchedulerV2ListRequestOptions{ + status, err := scheduler.List(context.Background(), &pbSchedulerV2.SchedulerV2ListRequest{ + Options: &pbSchedulerV2.SchedulerV2ListRequestOptions{ Selectors: map[string]string{ "X": "X", }, @@ -218,7 +218,7 @@ func Test_Implementation(t *testing.T) { }) t.Run("Check - Version 1", func(t *testing.T) { - status, err := scheduler.Status(context.Background(), &definition.SchedulerV2StatusRequest{ + status, err := scheduler.Status(context.Background(), &pbSchedulerV2.SchedulerV2StatusRequest{ Name: "test", }) require.NoError(t, err) @@ -231,7 +231,7 @@ func Test_Implementation(t *testing.T) { }) t.Run("Upgrade", func(t *testing.T) { - status, err := scheduler.Upgrade(context.Background(), &definition.SchedulerV2UpgradeRequest{ + status, err := scheduler.Upgrade(context.Background(), &pbSchedulerV2.SchedulerV2UpgradeRequest{ Name: "test", Values: values, Chart: example_1_0_0, @@ -244,7 +244,7 @@ func Test_Implementation(t *testing.T) { }) t.Run("Check - Version 2", func(t *testing.T) { - status, err := scheduler.Status(context.Background(), &definition.SchedulerV2StatusRequest{ + status, err := scheduler.Status(context.Background(), &pbSchedulerV2.SchedulerV2StatusRequest{ Name: "test", }) require.NoError(t, err) @@ -257,7 +257,7 @@ func Test_Implementation(t *testing.T) { }) t.Run("Test", func(t *testing.T) { - status, err := scheduler.Test(context.Background(), &definition.SchedulerV2TestRequest{ + status, err := scheduler.Test(context.Background(), &pbSchedulerV2.SchedulerV2TestRequest{ Name: "test", }) require.NoError(t, err) @@ -266,7 +266,7 @@ func Test_Implementation(t *testing.T) { }) t.Run("Uninstall", func(t *testing.T) { - status, err := scheduler.Uninstall(context.Background(), &definition.SchedulerV2UninstallRequest{ + status, err := scheduler.Uninstall(context.Background(), &pbSchedulerV2.SchedulerV2UninstallRequest{ Name: "test", }) require.NoError(t, err) diff --git a/integrations/scheduler/v2/kubernetes.go b/integrations/scheduler/v2/kubernetes.go index cb49ed026..92b531509 100644 --- a/integrations/scheduler/v2/kubernetes.go +++ b/integrations/scheduler/v2/kubernetes.go @@ -28,7 +28,9 @@ import ( "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) { @@ -93,10 +95,37 @@ func (i *implementation) KubernetesGet(ctx context.Context, in *pbSchedulerV2.Sc resp, err := i.client.NativeGet(ctx, reqs...) if err != nil { logger.Err(err).Warn("Unable to run action: KubernetesGet") - return nil, status.Errorf(codes.Internal, "Unable to run action: KubernetesGet: %s", err.Error()) + 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.client.Client().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/suite_test.go b/integrations/scheduler/v2/suite_test.go index 12578fa66..621048aa1 100644 --- a/integrations/scheduler/v2/suite_test.go +++ b/integrations/scheduler/v2/suite_test.go @@ -54,7 +54,25 @@ func Handler(t *testing.T, ctx context.Context, client helm.Client, mods ...Mod) return handler } -func Client(t *testing.T, ctx context.Context, mods ...Mod) (pbSchedulerV2.SchedulerV2Client, helm.Client) { +func InternalClient(t *testing.T, ctx context.Context, mods ...Mod) (pbSchedulerV2.SchedulerV2Client, helm.Client) { + client := kclient.NewFakeClient() + + h, err := helm.NewClient(helm.Configuration{ + Namespace: tests.FakeNamespace, + Client: client, + }) + require.NoError(t, err) + + local := svc.NewService(svc.Configuration{ + Address: "127.0.0.1:0", + }, Handler(t, ctx, h, mods...)) + + start := local.Start(ctx) + + return tgrpc.NewGRPCClient(t, ctx, pbSchedulerV2.NewSchedulerV2Client, start.Address()), h +} + +func ExternalClient(t *testing.T, ctx context.Context, mods ...Mod) (pbSchedulerV2.SchedulerV2Client, helm.Client) { z, ok := os.LookupEnv("TEST_KUBECONFIG") if !ok { t.Skipf("TEST_KUBECONFIG is not set") diff --git a/integrations/storage/v2/definition/helpers.go b/integrations/storage/v2/definition/helpers.go index c964d3759..17759f599 100644 --- a/integrations/storage/v2/definition/helpers.go +++ b/integrations/storage/v2/definition/helpers.go @@ -26,6 +26,7 @@ import ( "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 @@ -38,35 +39,19 @@ func Send(ctx context.Context, client StorageV2Client, key string, in io.Reader) return nil, err } - for { + return ugrpc.Send[*StorageV2WriteObjectRequest, *StorageV2WriteObjectResponse](wr, func() (*StorageV2WriteObjectRequest, error) { n, err := in.Read(cache) if err != nil { - if errors.Is(err, io.EOF) { - break - } - - if cerr := wr.CloseSend(); cerr != nil { - return nil, errors.Errors(err, cerr) - } - return nil, err } - if err := wr.Send(&StorageV2WriteObjectRequest{ + return &StorageV2WriteObjectRequest{ Path: &StorageV2Path{ Path: key, }, Chunk: cache[:n], - }); err != nil { - if cerr := wr.CloseSend(); cerr != nil { - return nil, errors.Errors(err, cerr) - } - - return nil, err - } - } - - return wr.CloseAndRecv() + }, nil + }) } func Receive(ctx context.Context, client StorageV2Client, key string, out io.Writer) (int, error) { @@ -79,30 +64,21 @@ func Receive(ctx context.Context, client StorageV2Client, key string, out io.Wri var bytes int - for { - resp, err := wr.Recv() + if err := ugrpc.Recv[*StorageV2ReadObjectResponse](wr, func(response *StorageV2ReadObjectResponse) error { + n, err := util.WriteAll(out, response.GetChunk()) if err != nil { - if errors.Is(err, io.EOF) { - break - } - if cerr := wr.CloseSend(); cerr != nil { - return 0, errors.Errors(err, cerr) + return errors.Errors(err, cerr) } - return 0, err - } - - n, err := util.WriteAll(out, resp.GetChunk()) - if err != nil { - if cerr := wr.CloseSend(); cerr != nil { - return 0, errors.Errors(err, cerr) - } - - return 0, err + return err } bytes += n + + return nil + }); err != nil { + return 0, err } return bytes, nil diff --git a/integrations/storage/v2/storage_test.go b/integrations/storage/v2/storage_test.go index 5f00b57a7..d9d745544 100644 --- a/integrations/storage/v2/storage_test.go +++ b/integrations/storage/v2/storage_test.go @@ -25,7 +25,6 @@ import ( "context" "crypto/rand" "fmt" - "io" "sort" "strings" "testing" @@ -37,6 +36,7 @@ import ( 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" + ugrpc "github.com/arangodb/kube-arangodb/pkg/util/grpc" ) func listAllFilesHelper(t *testing.T, ctx context.Context, h pbStorageV2.StorageV2Client, prefix string) []*pbStorageV2.StorageV2Object { @@ -49,15 +49,10 @@ func listAllFilesHelper(t *testing.T, ctx context.Context, h pbStorageV2.Storage }) require.NoError(t, err) - for { - files, err := res.Recv() - if errors.Is(err, io.EOF) { - break - } - require.NoError(t, err) - - r = append(r, files.GetFiles()...) - } + require.NoError(t, ugrpc.Recv[*pbStorageV2.StorageV2ListObjectsResponse](res, func(response *pbStorageV2.StorageV2ListObjectsResponse) error { + r = append(r, response.GetFiles()...) + return nil + })) return r } diff --git a/pkg/apis/shared/v1/data.go b/pkg/apis/shared/v1/data.go index b25c623f3..11d9c83b7 100644 --- a/pkg/apis/shared/v1/data.go +++ b/pkg/apis/shared/v1/data.go @@ -48,7 +48,13 @@ func (d *Data) UnmarshalJSON(bytes []byte) error { return errors.Errorf("nil object provided") } - ret, err := base64.StdEncoding.DecodeString(string(bytes)) + var s string + + if err := json.Unmarshal(bytes, &s); err != nil { + return err + } + + ret, err := base64.StdEncoding.DecodeString(s) if err != nil { return err } 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/debug_package/generators/kubernetes/arango_platform.go b/pkg/debug_package/generators/kubernetes/arango_platform.go index 39292bdca..fd78e3fde 100644 --- a/pkg/debug_package/generators/kubernetes/arango_platform.go +++ b/pkg/debug_package/generators/kubernetes/arango_platform.go @@ -43,5 +43,10 @@ func platform(logger zerolog.Logger, files chan<- shared.File) error { 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/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/resources/arango_profiles.go b/pkg/deployment/resources/arango_profiles.go index fc83682c0..016428570 100644 --- a/pkg/deployment/resources/arango_profiles.go +++ b/pkg/deployment/resources/arango_profiles.go @@ -149,7 +149,10 @@ func (r *Resources) EnsureArangoProfiles(ctx context.Context, cachedStatus inspe 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{})), + gen(constants.ProfilesIntegrationSched, constants.ProfilesIntegrationV2, always(sidecar.IntegrationSchedulerV2{ + Spec: spec, + DeploymentName: apiObject.GetName(), + })), gen(constants.ProfilesIntegrationEnvoy, constants.ProfilesIntegrationV3, always(sidecar.IntegrationEnvoyV3{Spec: spec})), gen(constants.ProfilesIntegrationStorage, constants.ProfilesIntegrationV2, func() (sidecar.Integration, bool) { if v, err := cachedStatus.ArangoPlatformStorage().V1Alpha1(); err == 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/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/helm/chart_manager.go b/pkg/util/k8sutil/helm/chart_manager.go new file mode 100644 index 000000000..b146a764a --- /dev/null +++ b/pkg/util/k8sutil/helm/chart_manager.go @@ -0,0 +1,252 @@ +// +// 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 ( + "context" + "fmt" + "io" + "net/http" + "sort" + "sync" + + "helm.sh/helm/v3/pkg/repo" + + "github.com/arangodb/kube-arangodb/pkg/util" + "github.com/arangodb/kube-arangodb/pkg/util/errors" +) + +func NewChartManager(ctx context.Context, client *http.Client, url string) (ChartManager, error) { + if client == nil { + client = http.DefaultClient + } + + m := manager{ + client: client, + url: url, + } + + if err := m.Reload(ctx); err != nil { + return nil, err + } + + return &m, nil +} + +type ChartManager interface { + Reload(ctx context.Context) error + + Repositories() []string + Versions(repo string) []string + Latest(repo string) (string, bool) + Chart(ctx context.Context, repo, version string) (Chart, error) +} + +type manager struct { + lock sync.Mutex + + client *http.Client + + url string + + index *repo.IndexFile +} + +func (m *manager) Latest(repoName string) (string, bool) { + m.lock.Lock() + defer m.lock.Unlock() + + if v := m.latest(repoName); v == nil { + return "", false + } else { + return v.Version, true + } +} + +func (m *manager) latest(repoName string) *repo.ChartVersion { + r, ok := m.index.Entries[repoName] + if !ok { + return nil + } + + if len(r) == 0 { + return nil + } + + if len(r) == 1 { + return r[0] + } + + var p = 0 + + for id := range r { + if id == p { + continue + } + + if r[id].Created.After(r[p].Created) { + p = id + } + } + + if p == -1 { + return nil + } + + return r[p] +} + +func (m *manager) Chart(ctx context.Context, repoName, version string) (Chart, error) { + m.lock.Lock() + defer m.lock.Unlock() + + r, ok := m.index.Entries[repoName] + if !ok { + return nil, errors.Errorf("Repo `%s` not found", repoName) + } + + var ver *repo.ChartVersion + + if version == "latest" { + ver = m.latest(repoName) + } else { + vs, ok := util.PickFromList(r, func(v *repo.ChartVersion) bool { + if v == nil { + return false + } + + return v.Version == version + }) + if !ok { + return nil, errors.Errorf("Repo `%s` does not contains version `%s`", repoName, version) + } + ver = vs + } + + if len(ver.URLs) == 0 { + return nil, errors.Errorf("Chart `%s-%s` does not have any urls defined", repoName, version) + } + + var errs = make([]error, len(ver.URLs)) + + for id, url := range ver.URLs { + data, err := m.download(ctx, url) + if err != nil { + errs[id] = err + continue + } + + return data, nil + } + + return nil, errors.Errors(errs...) +} + +func (m *manager) download(ctx context.Context, url string) ([]byte, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) + if err != nil { + return nil, err + } + + resp, err := m.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", resp.StatusCode) + } + + return data, nil +} + +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) Versions(repo string) []string { + m.lock.Lock() + defer m.lock.Unlock() + + r, ok := m.index.Entries[repo] + 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 (m *manager) Reload(ctx context.Context) error { + m.lock.Lock() + defer m.lock.Unlock() + + data, err := m.download(ctx, 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_test.go b/pkg/util/k8sutil/helm/chart_manager_test.go new file mode 100644 index 000000000..b1cd665a0 --- /dev/null +++ b/pkg/util/k8sutil/helm/chart_manager_test.go @@ -0,0 +1,83 @@ +// +// 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 ( + "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) { + t.Run("Latest", func(t *testing.T) { + v, ok := mgr.Latest(repo) + require.True(t, ok) + + vdata, err := mgr.Chart(context.Background(), repo, v) + require.NoError(t, err) + + vchart, err := vdata.Get() + require.NoError(t, err) + require.NotNil(t, vchart.Metadata) + + data, err := mgr.Chart(context.Background(), repo, "latest") + require.NoError(t, err) + + chart, err := data.Get() + require.NoError(t, err) + require.NotNil(t, chart.Metadata) + + require.EqualValues(t, v, vchart.Metadata.Version) + require.EqualValues(t, v, chart.Metadata.Version) + }) + t.Run("ByVersion", func(t *testing.T) { + for _, version := range limitArray(mgr.Versions(repo), 5) { + t.Run(version, func(t *testing.T) { + data, err := mgr.Chart(context.Background(), repo, version) + require.NoError(t, err) + + c, err := data.Get() + require.NoError(t, err) + + require.NotNil(t, c.Metadata) + require.EqualValues(t, version, c.Metadata.Version) + }) + } + }) + }) + } + + require.NoError(t, mgr.Reload(context.Background())) +} diff --git a/pkg/util/kclient/client_factory.go b/pkg/util/kclient/client_factory.go index f4d22e9ad..7a362a6e2 100644 --- a/pkg/util/kclient/client_factory.go +++ b/pkg/util/kclient/client_factory.go @@ -191,13 +191,14 @@ 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, } } 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/mod.go b/pkg/util/mod.go new file mode 100644 index 000000000..439189cc0 --- /dev/null +++ b/pkg/util/mod.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 util + +func emptyMod[T any](_ *T) {} + +func WithMods[T any](mods ...Mod[T]) Mod[T] { + return func(in *T) { + for _, m := range mods { + if m != nil { + m(in) + } + } + } +} + +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) + } +} 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/refs.go b/pkg/util/refs.go index 1f73f4ecb..9121c1b8e 100644 --- a/pkg/util/refs.go +++ b/pkg/util/refs.go @@ -21,8 +21,6 @@ package util import ( - "context" - "encoding/json" "reflect" ) @@ -176,29 +174,6 @@ func And(in ...bool) bool { return len(in) > 0 } -type Mod[T any] func(in *T) - -func ApplyMods[T any](in *T, mods ...Mod[T]) { - for _, mod := range mods { - mod(in) - } -} - -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 InitOptional[T any](in *T, ok bool) *T { if ok { return in @@ -207,7 +182,3 @@ func InitOptional[T any](in *T, ok bool) *T { var z T return &z } - -type NextIterator[T any] interface { - Next(ctx context.Context) (T, error) -} From 19c035a5ce0884ce4399443fe5dc91c333b81178 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Mon, 18 Nov 2024 10:29:16 +0100 Subject: [PATCH 29/69] [Feature] Switch to google.golang.org/protobuf (#1767) --- CHANGELOG.md | 1 + go.mod | 7 ++++--- go.sum | 11 +++++++---- pkg/deployment/resources/gateway/gateway_config.go | 7 +++---- .../resources/gateway/gateway_config_destination.go | 3 +-- pkg/util/grpc/grpc.go | 4 ++-- pkg/util/tests/tgrpc/grpc.go | 4 ++-- 7 files changed, 20 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 029687bcd..d5074d0ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ - (Feature) (Platform) Chart - (Feature) (Scheduler) Deployment Scale Functionality - (Feature) (Platform) Chart Integration +- (Maintenance) Switch to google.golang.org/protobuf ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/go.mod b/go.mod index f4a3326d4..886044454 100644 --- a/go.mod +++ b/go.mod @@ -35,11 +35,11 @@ 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.12.0 + 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/golang/protobuf v1.5.4 + 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 @@ -113,7 +113,7 @@ require ( 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.4 // 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 @@ -182,6 +182,7 @@ require ( 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.55.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect diff --git a/go.sum b/go.sum index dc872b988..87cabde17 100644 --- a/go.sum +++ b/go.sum @@ -137,11 +137,11 @@ github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNE 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.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI= -github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= +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.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= -github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +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= @@ -273,6 +273,7 @@ github.com/jessevdk/go-assets v0.0.0-20160921144138-4f4301a06e15 h1:cW/amwGEJK5M 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= @@ -384,6 +385,8 @@ github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE 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/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= diff --git a/pkg/deployment/resources/gateway/gateway_config.go b/pkg/deployment/resources/gateway/gateway_config.go index eb61cd463..1388997bf 100644 --- a/pkg/deployment/resources/gateway/gateway_config.go +++ b/pkg/deployment/resources/gateway/gateway_config.go @@ -37,10 +37,9 @@ 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" @@ -198,7 +197,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, }, } @@ -310,7 +309,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 d17e80089..602ede7ac 100644 --- a/pkg/deployment/resources/gateway/gateway_config_destination.go +++ b/pkg/deployment/resources/gateway/gateway_config_destination.go @@ -28,7 +28,6 @@ import ( endpointAPI "github.com/envoyproxy/go-control-plane/envoy/config/endpoint/v3" routeAPI "github.com/envoyproxy/go-control-plane/envoy/config/route/v3" upstreamHttpApi "github.com/envoyproxy/go-control-plane/envoy/extensions/upstreams/http/v3" - "github.com/golang/protobuf/ptypes/any" "google.golang.org/protobuf/types/known/anypb" "google.golang.org/protobuf/types/known/durationpb" @@ -162,7 +161,7 @@ func (c *ConfigDestination) RenderCluster(name string) (*clusterAPI.Cluster, err }, }, }, - TypedExtensionProtocolOptions: map[string]*any.Any{ + TypedExtensionProtocolOptions: map[string]*anypb.Any{ "envoy.extensions.upstreams.http.v3.HttpProtocolOptions": hpo, }, } diff --git a/pkg/util/grpc/grpc.go b/pkg/util/grpc/grpc.go index 217f54514..ba7128b82 100644 --- a/pkg/util/grpc/grpc.go +++ b/pkg/util/grpc/grpc.go @@ -25,13 +25,13 @@ import ( "crypto/tls" "io" - any1 "github.com/golang/protobuf/ptypes/any" "google.golang.org/grpc" "google.golang.org/grpc/codes" "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" @@ -137,7 +137,7 @@ func attachTokenAuthToInterceptors(ctx context.Context, token string) context.Co return metadata.AppendToOutgoingContext(ctx, AuthorizationGRPCHeader, token) } -func GRPCAnyCastAs[T proto.Message](in *any1.Any, v T) error { +func GRPCAnyCastAs[T proto.Message](in *anypb.Any, v T) error { if err := in.UnmarshalTo(v); err != nil { return err } diff --git a/pkg/util/tests/tgrpc/grpc.go b/pkg/util/tests/tgrpc/grpc.go index 678b78430..1dd9b522b 100644 --- a/pkg/util/tests/tgrpc/grpc.go +++ b/pkg/util/tests/tgrpc/grpc.go @@ -25,12 +25,12 @@ import ( "fmt" "testing" - any1 "github.com/golang/protobuf/ptypes/any" "github.com/stretchr/testify/require" "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" ugrpc "github.com/arangodb/kube-arangodb/pkg/util/grpc" "github.com/arangodb/kube-arangodb/pkg/util/svc" @@ -75,6 +75,6 @@ func AsGRPCError(t *testing.T, err error) ErrorStatusValidator { return errorStatusValidator{st: st} } -func GRPCAnyCastAs[T proto.Message](t *testing.T, in *any1.Any, v T) { +func GRPCAnyCastAs[T proto.Message](t *testing.T, in *anypb.Any, v T) { require.NoError(t, ugrpc.GRPCAnyCastAs[T](in, v)) } From 33a4775813c91ef786c074b608129abaed5b99d5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:09:54 +0100 Subject: [PATCH 30/69] Bump cross-spawn and eslint in /dashboard (#1769) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- dashboard/package-lock.json | 914 ++++++++++++++++++------------------ dashboard/package.json | 2 +- 2 files changed, 459 insertions(+), 457 deletions(-) diff --git a/dashboard/package-lock.json b/dashboard/package-lock.json index e89a0c9e9..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", @@ -5278,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" + } } } }, @@ -5793,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" } @@ -5937,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", @@ -6094,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", @@ -6125,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==" } } }, @@ -6474,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", @@ -6576,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": { @@ -6591,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", @@ -6657,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", @@ -6692,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" } @@ -6707,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", @@ -6720,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" } @@ -6831,31 +7059,10 @@ } } }, - "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" - } - } - } - }, "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", @@ -6907,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": { @@ -7026,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", @@ -7308,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", @@ -7338,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", @@ -7401,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", @@ -7414,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" } @@ -7447,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", @@ -7550,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", @@ -7864,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", @@ -7902,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" @@ -7910,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", @@ -7918,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", @@ -8036,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", @@ -8100,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", @@ -10120,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", @@ -10184,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", @@ -10227,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" @@ -10265,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" } @@ -10290,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", @@ -10442,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", @@ -10539,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", @@ -10566,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", @@ -10780,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", @@ -10807,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", @@ -10816,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" } @@ -10834,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" } @@ -10930,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", @@ -11920,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", @@ -11975,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", @@ -12341,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", @@ -12379,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" } @@ -12394,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", @@ -12410,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" } @@ -12596,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", @@ -12840,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", @@ -12894,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" } @@ -12902,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", @@ -12942,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" } @@ -13060,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", @@ -13299,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", @@ -13320,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", @@ -13412,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", @@ -13429,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", @@ -13446,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", @@ -13546,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", @@ -13747,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", @@ -13779,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", @@ -13793,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", @@ -13977,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", @@ -14054,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", @@ -14088,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", @@ -14122,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" } @@ -14192,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", @@ -14400,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", @@ -14408,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", @@ -14429,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", @@ -14538,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", @@ -14553,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" } @@ -14746,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", @@ -15475,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" } @@ -15908,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", @@ -16036,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", From 6d2c36e44e28e0891ebd7c81350b516c4dbdce89 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Mon, 25 Nov 2024 13:55:43 +0100 Subject: [PATCH 31/69] [Feature] Add DebugPackage to the OPS Binary (#1771) --- CHANGELOG.md | 1 + cmd/debug.go | 3 +++ docs/cli/arangodb_operator.md | 6 ++--- docs/cli/arangodb_operator_ops.md | 39 +++++++++++++++++++++++++++---- internal/readme_cli.go | 6 +++++ 5 files changed, 48 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5074d0ca..ee893c79c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ - (Feature) (Scheduler) Deployment Scale Functionality - (Feature) (Platform) Chart Integration - (Maintenance) Switch to google.golang.org/protobuf +- (Feature) Add DebugPackage to the OPS Binary ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD 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/docs/cli/arangodb_operator.md b/docs/cli/arangodb_operator.md index e543ca2e9..94f765a0f 100644 --- a/docs/cli/arangodb_operator.md +++ b/docs/cli/arangodb_operator.md @@ -15,14 +15,14 @@ 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 Flags: diff --git a/docs/cli/arangodb_operator_ops.md b/docs/cli/arangodb_operator_ops.md index 95041fc8e..32a94180c 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,33 @@ 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-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/internal/readme_cli.go b/internal/readme_cli.go index 3e2e61c20..644cde57e 100644 --- a/internal/readme_cli.go +++ b/internal/readme_cli.go @@ -71,6 +71,12 @@ func GenerateCLIArangoDBOperatorOpsReadme(root string) error { readmeSections["arangodb_operator_ops_cmd_crd_generate"] = section } + if section, err := GenerateHelpQuoted(cmd.CommandOps(), "debug-package"); err != nil { + return err + } else { + readmeSections["arangodb_operator_ops_cmd_debug_package"] = section + } + if err := md.ReplaceSectionsInFile(path.Join(root, "docs", "cli", "arangodb_operator_ops.md"), readmeSections); err != nil { return err } From 44f2bf61e214da231d299640160e90883cd68946 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Mon, 25 Nov 2024 14:20:21 +0100 Subject: [PATCH 32/69] [Documentation] Integration Services (#1770) --- docs/integration-sidecar.md | 88 ++++++++++++++++++++++++++- docs/integration/authentication.v1.md | 11 ++++ docs/integration/authorization.v0.md | 12 ++++ docs/integration/scheduler.v2.md | 12 ++++ docs/integration/storage.v2.md | 12 ++++ docs/platform.md | 6 ++ 6 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 docs/integration/authentication.v1.md create mode 100644 docs/integration/authorization.v0.md create mode 100644 docs/integration/scheduler.v2.md create mode 100644 docs/integration/storage.v2.md create mode 100644 docs/platform.md diff --git a/docs/integration-sidecar.md b/docs/integration-sidecar.md index 671483eed..a02658d3d 100644 --- a/docs/integration-sidecar.md +++ b/docs/integration-sidecar.md @@ -1,3 +1,11 @@ +--- +layout: page +has_children: true +title: Integration Sidecars +parent: ArangoDBPlatform +has_toc: false +--- + # Integration ## Profile @@ -13,8 +21,86 @@ Integration Sidecar is supported in a few resources managed by Operator: - 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 >> +``` + +### 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 +``` + ### 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. @@ -25,4 +111,4 @@ Example: `deployment` HTTP/S Endpoint of the ArangoDeployment Internal Service. -Example: `https://deployment.default.svc:8529` +Example: `https://deployment.default.svc:8529` \ No newline at end of file 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/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..8c4ede722 --- /dev/null +++ b/docs/platform.md @@ -0,0 +1,6 @@ +--- +layout: page +has_children: true +title: ArangoDBPlatform +has_toc: false +--- \ No newline at end of file From faf43e7a335e624ffd702d1415386cef98ad14ef Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 29 Nov 2024 10:27:30 +0100 Subject: [PATCH 33/69] [Feature] [Networking] ArangoRoute Protocol (#1773) --- CHANGELOG.md | 1 + docs/api/ArangoRoute.V1Alpha1.md | 30 +++- .../v1alpha1/route_spec_destination.go | 16 ++ .../v1alpha1/route_spec_protocol.go | 55 +++++++ .../v1alpha1/route_status_target.go | 3 + .../v1alpha1/zz_generated.deepcopy.go | 5 + .../networking-route.schema.generated.yaml | 9 ++ .../gateway/gateway_config_destination.go | 21 +-- .../gateway_config_destination_protocol.go | 101 +++++++++++++ .../route/handler_destination_endpoints.go | 1 + .../handler_destination_endpoints_test.go | 143 ++++++++++++++++++ .../route/handler_destination_service.go | 1 + .../route/handler_destination_service_test.go | 109 +++++++++++++ 13 files changed, 475 insertions(+), 20 deletions(-) create mode 100644 pkg/apis/networking/v1alpha1/route_spec_protocol.go create mode 100644 pkg/deployment/resources/gateway/gateway_config_destination_protocol.go diff --git a/CHANGELOG.md b/CHANGELOG.md index ee893c79c..26cd02704 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ - (Feature) (Platform) Chart Integration - (Maintenance) Switch to google.golang.org/protobuf - (Feature) Add DebugPackage to the OPS Binary +- (Feature) (Networking) ArangoRoute Protocol ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/docs/api/ArangoRoute.V1Alpha1.md b/docs/api/ArangoRoute.V1Alpha1.md index 2c358b396..3a6c98721 100644 --- a/docs/api/ArangoRoute.V1Alpha1.md +++ b/docs/api/ArangoRoute.V1Alpha1.md @@ -83,18 +83,34 @@ 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.43/pkg/apis/networking/v1alpha1/route_spec_destination.go#L46) Path defines service path used for overrides *** +### .spec.destination.protocol + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination.go#L40) + +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.43/pkg/apis/networking/v1alpha1/route_spec_destination.go#L35) Schema defines HTTP/S schema used for connection +Possible Values: +* `"http"` (default) - HTTP Connection +* `"https"` - HTTPS Connection (HTTP with TLS) + *** ### .spec.destination.service.checksum @@ -238,12 +254,20 @@ Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1. ### .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.43/pkg/apis/networking/v1alpha1/route_status_target.go#L46) Path specifies request path override *** +### .status.target.protocol + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target.go#L40) + +Protocol defines http protocol used for the route + +*** + ### .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) diff --git a/pkg/apis/networking/v1alpha1/route_spec_destination.go b/pkg/apis/networking/v1alpha1/route_spec_destination.go index 1dfa0ab75..c4d32f683 100644 --- a/pkg/apis/networking/v1alpha1/route_spec_destination.go +++ b/pkg/apis/networking/v1alpha1/route_spec_destination.go @@ -30,8 +30,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"` @@ -58,6 +65,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 @@ -100,6 +115,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_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..a90021de4 100644 --- a/pkg/apis/networking/v1alpha1/route_status_target.go +++ b/pkg/apis/networking/v1alpha1/route_status_target.go @@ -36,6 +36,9 @@ type ArangoRouteStatusTarget struct { // TLS Keeps target TLS Settings (if not nil, TLS is enabled) 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"` diff --git a/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go index d69bebac6..2aef9bdb2 100644 --- a/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go @@ -147,6 +147,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) diff --git a/pkg/crd/crds/networking-route.schema.generated.yaml b/pkg/crd/crds/networking-route.schema.generated.yaml index 2544f6324..d8ba4e7d7 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 diff --git a/pkg/deployment/resources/gateway/gateway_config_destination.go b/pkg/deployment/resources/gateway/gateway_config_destination.go index 602ede7ac..5963c0569 100644 --- a/pkg/deployment/resources/gateway/gateway_config_destination.go +++ b/pkg/deployment/resources/gateway/gateway_config_destination.go @@ -24,10 +24,8 @@ import ( "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" - upstreamHttpApi "github.com/envoyproxy/go-control-plane/envoy/extensions/upstreams/http/v3" "google.golang.org/protobuf/types/known/anypb" "google.golang.org/protobuf/types/known/durationpb" @@ -63,6 +61,8 @@ type ConfigDestination struct { Type *ConfigDestinationType `json:"type,omitempty"` + Protocol *ConfigDestinationProtocol `json:"protocol,omitempty"` + Path *string `json:"path,omitempty"` AuthExtension *ConfigAuthZExtension `json:"authExtension,omitempty"` @@ -77,6 +77,7 @@ func (c *ConfigDestination) Validate() error { return shared.WithErrors( shared.PrefixResourceError("targets", c.Targets.Validate()), shared.PrefixResourceError("type", c.Type.Validate()), + shared.PrefixResourceError("protocol", c.Protocol.Validate()), shared.PrefixResourceError("path", shared.ValidateAPIPath(c.GetPath())), shared.PrefixResourceError("authExtension", c.AuthExtension.Validate()), shared.PrefixResourceError("upgradeConfigs", c.UpgradeConfigs.Validate()), @@ -130,21 +131,7 @@ func (c *ConfigDestination) getUpgradeConfigs() ConfigDestinationsUpgrade { } func (c *ConfigDestination) RenderCluster(name string) (*clusterAPI.Cluster, error) { - hpo, err := anypb.New(&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), - }, - }, - }, - }, - }, - }) + hpo, err := anypb.New(c.Protocol.Options()) if err != nil { return nil, err } 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..e3c7ab06a --- /dev/null +++ b/pkg/deployment/resources/gateway/gateway_config_destination_protocol.go @@ -0,0 +1,101 @@ +// +// 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) 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/handlers/networking/route/handler_destination_endpoints.go b/pkg/handlers/networking/route/handler_destination_endpoints.go index c67a9a8a1..b6eedf8d7 100644 --- a/pkg/handlers/networking/route/handler_destination_endpoints.go +++ b/pkg/handlers/networking/route/handler_destination_endpoints.go @@ -120,6 +120,7 @@ func (h *handler) HandleArangoDestinationEndpoints(ctx context.Context, item ope target.Path = dest.GetPath() target.Type = networkingApi.ArangoRouteStatusTargetEndpointsType + target.Protocol = dest.GetProtocol().Get() // 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..cc3867c9f 100644 --- a/pkg/handlers/networking/route/handler_destination_service.go +++ b/pkg/handlers/networking/route/handler_destination_service.go @@ -119,6 +119,7 @@ func (h *handler) HandleArangoDestinationService(ctx context.Context, item opera target.Path = dest.GetPath() target.Type = networkingApi.ArangoRouteStatusTargetServiceType + target.Protocol = dest.GetProtocol().Get() // 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..0b960be69 100644 --- a/pkg/handlers/networking/route/handler_destination_service_test.go +++ b/pkg/handlers/networking/route/handler_destination_service_test.go @@ -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) From e85370817aa5f329644bf4ec821764fa845aa101 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 29 Nov 2024 14:47:16 +0100 Subject: [PATCH 34/69] [Feature] [Platform] Platform Requirements support (#1772) --- CHANGELOG.md | 1 + go.mod | 2 +- .../scheduler/v2/definition/chart.pb.go | 202 +++++++++++++----- .../scheduler/v2/definition/chart.proto | 8 + .../scheduler/v2/implementation_test.go | 73 ++++++- .../scheduler/v2/suite/example-1.0.0.tgz | Bin 588 -> 0 bytes integrations/scheduler/v2/suite_test.go | 3 - pkg/apis/platform/v1alpha1/chart_details.go | 13 +- .../v1alpha1/chart_details_platform.go | 33 +++ .../chart_details_platform_version.go | 37 ++++ .../v1alpha1/zz_generated.deepcopy.go | 52 ++++- pkg/apis/shared/validate.go | 13 ++ pkg/handlers/platform/chart/chart_test.go | 39 +++- pkg/handlers/platform/chart/handler.go | 36 +++- .../platform/chart/suite/example-1.0.0.tgz | Bin 588 -> 0 bytes pkg/handlers/platform/chart/suite_test.go | 6 - pkg/util/k8sutil/helm/chart.go | 8 +- pkg/util/k8sutil/helm/chart_data.go | 58 +++++ pkg/util/k8sutil/helm/chart_manager_test.go | 12 +- pkg/util/k8sutil/helm/client.go | 6 +- pkg/util/k8sutil/helm/client_test.go | 21 +- pkg/util/k8sutil/helm/platform.go | 54 +++++ pkg/util/k8sutil/helm/platform_object.go | 29 +++ pkg/util/k8sutil/helm/platform_test.go | 46 ++++ pkg/util/k8sutil/helm/suite/example-1.0.0.tgz | Bin 588 -> 0 bytes pkg/util/k8sutil/helm/suite_test.go | 3 - pkg/util/tests/suite/chart.go | 55 +++++ pkg/util/tests/suite/chart/example-1.0.0.tgz | Bin 0 -> 440 bytes pkg/util/tests/suite/chart/example-1.0.1.tgz | Bin 0 -> 496 bytes .../tests/suite/chart}/example-1.1.0.tgz | Bin pkg/util/version.go | 57 +++++ pkg/util/version_test.go | 127 +++++++++++ 32 files changed, 887 insertions(+), 107 deletions(-) delete mode 100644 integrations/scheduler/v2/suite/example-1.0.0.tgz create mode 100644 pkg/apis/platform/v1alpha1/chart_details_platform.go create mode 100644 pkg/apis/platform/v1alpha1/chart_details_platform_version.go delete mode 100644 pkg/handlers/platform/chart/suite/example-1.0.0.tgz create mode 100644 pkg/util/k8sutil/helm/chart_data.go create mode 100644 pkg/util/k8sutil/helm/platform.go create mode 100644 pkg/util/k8sutil/helm/platform_object.go create mode 100644 pkg/util/k8sutil/helm/platform_test.go delete mode 100644 pkg/util/k8sutil/helm/suite/example-1.0.0.tgz create mode 100644 pkg/util/tests/suite/chart.go create mode 100644 pkg/util/tests/suite/chart/example-1.0.0.tgz create mode 100644 pkg/util/tests/suite/chart/example-1.0.1.tgz rename pkg/{handlers/platform/chart/suite => util/tests/suite/chart}/example-1.1.0.tgz (100%) create mode 100644 pkg/util/version.go create mode 100644 pkg/util/version_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 26cd02704..b2b9ff12c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ - (Maintenance) Switch to google.golang.org/protobuf - (Feature) Add DebugPackage to the OPS Binary - (Feature) (Networking) ArangoRoute Protocol +- (Feature) (Platform) Platform Requirements support ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/go.mod b/go.mod index 886044454..b02eb624d 100644 --- a/go.mod +++ b/go.mod @@ -73,6 +73,7 @@ require ( ) require ( + github.com/Masterminds/semver/v3 v3.3.0 github.com/aws/aws-sdk-go v1.55.5 helm.sh/helm/v3 v3.16.2 ) @@ -85,7 +86,6 @@ require ( 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/semver/v3 v3.3.0 // 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 diff --git a/integrations/scheduler/v2/definition/chart.pb.go b/integrations/scheduler/v2/definition/chart.pb.go index 77d22e830..6bbcc5eaa 100644 --- a/integrations/scheduler/v2/definition/chart.pb.go +++ b/integrations/scheduler/v2/definition/chart.pb.go @@ -50,6 +50,8 @@ type SchedulerV2ChartInfo struct { 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() { @@ -98,6 +100,62 @@ func (x *SchedulerV2ChartInfo) GetVersion() string { 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 @@ -111,7 +169,7 @@ type SchedulerV2ListChartsRequest struct { func (x *SchedulerV2ListChartsRequest) Reset() { *x = SchedulerV2ListChartsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[1] + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -124,7 +182,7 @@ func (x *SchedulerV2ListChartsRequest) String() string { func (*SchedulerV2ListChartsRequest) ProtoMessage() {} func (x *SchedulerV2ListChartsRequest) ProtoReflect() protoreflect.Message { - mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[1] + 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 { @@ -137,7 +195,7 @@ func (x *SchedulerV2ListChartsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SchedulerV2ListChartsRequest.ProtoReflect.Descriptor instead. func (*SchedulerV2ListChartsRequest) Descriptor() ([]byte, []int) { - return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{1} + return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{2} } func (x *SchedulerV2ListChartsRequest) GetItems() int64 { @@ -160,7 +218,7 @@ type SchedulerV2ListChartsResponse struct { func (x *SchedulerV2ListChartsResponse) Reset() { *x = SchedulerV2ListChartsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[2] + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -173,7 +231,7 @@ func (x *SchedulerV2ListChartsResponse) String() string { func (*SchedulerV2ListChartsResponse) ProtoMessage() {} func (x *SchedulerV2ListChartsResponse) ProtoReflect() protoreflect.Message { - mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[2] + 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 { @@ -186,7 +244,7 @@ func (x *SchedulerV2ListChartsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SchedulerV2ListChartsResponse.ProtoReflect.Descriptor instead. func (*SchedulerV2ListChartsResponse) Descriptor() ([]byte, []int) { - return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{2} + return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{3} } func (x *SchedulerV2ListChartsResponse) GetCharts() []string { @@ -209,7 +267,7 @@ type SchedulerV2GetChartRequest struct { func (x *SchedulerV2GetChartRequest) Reset() { *x = SchedulerV2GetChartRequest{} if protoimpl.UnsafeEnabled { - mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[3] + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -222,7 +280,7 @@ func (x *SchedulerV2GetChartRequest) String() string { func (*SchedulerV2GetChartRequest) ProtoMessage() {} func (x *SchedulerV2GetChartRequest) ProtoReflect() protoreflect.Message { - mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[3] + 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 { @@ -235,7 +293,7 @@ func (x *SchedulerV2GetChartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SchedulerV2GetChartRequest.ProtoReflect.Descriptor instead. func (*SchedulerV2GetChartRequest) Descriptor() ([]byte, []int) { - return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{3} + return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{4} } func (x *SchedulerV2GetChartRequest) GetName() string { @@ -260,7 +318,7 @@ type SchedulerV2GetChartResponse struct { func (x *SchedulerV2GetChartResponse) Reset() { *x = SchedulerV2GetChartResponse{} if protoimpl.UnsafeEnabled { - mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[4] + mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -273,7 +331,7 @@ func (x *SchedulerV2GetChartResponse) String() string { func (*SchedulerV2GetChartResponse) ProtoMessage() {} func (x *SchedulerV2GetChartResponse) ProtoReflect() protoreflect.Message { - mi := &file_integrations_scheduler_v2_definition_chart_proto_msgTypes[4] + 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 { @@ -286,7 +344,7 @@ func (x *SchedulerV2GetChartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SchedulerV2GetChartResponse.ProtoReflect.Descriptor instead. func (*SchedulerV2GetChartResponse) Descriptor() ([]byte, []int) { - return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{4} + return file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP(), []int{5} } func (x *SchedulerV2GetChartResponse) GetChart() []byte { @@ -309,34 +367,51 @@ 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, 0x44, 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, 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, + 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, 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, + 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 ( @@ -351,21 +426,25 @@ func file_integrations_scheduler_v2_definition_chart_proto_rawDescGZIP() []byte return file_integrations_scheduler_v2_definition_chart_proto_rawDescData } -var file_integrations_scheduler_v2_definition_chart_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +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 - (*SchedulerV2ListChartsRequest)(nil), // 1: scheduler.SchedulerV2ListChartsRequest - (*SchedulerV2ListChartsResponse)(nil), // 2: scheduler.SchedulerV2ListChartsResponse - (*SchedulerV2GetChartRequest)(nil), // 3: scheduler.SchedulerV2GetChartRequest - (*SchedulerV2GetChartResponse)(nil), // 4: scheduler.SchedulerV2GetChartResponse + (*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{ - 0, // 0: scheduler.SchedulerV2GetChartResponse.info:type_name -> scheduler.SchedulerV2ChartInfo - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] 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 + 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() } @@ -387,7 +466,7 @@ func file_integrations_scheduler_v2_definition_chart_proto_init() { } } file_integrations_scheduler_v2_definition_chart_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SchedulerV2ListChartsRequest); i { + switch v := v.(*SchedulerV2ChartPlatform); i { case 0: return &v.state case 1: @@ -399,7 +478,7 @@ func file_integrations_scheduler_v2_definition_chart_proto_init() { } } file_integrations_scheduler_v2_definition_chart_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SchedulerV2ListChartsResponse); i { + switch v := v.(*SchedulerV2ListChartsRequest); i { case 0: return &v.state case 1: @@ -411,7 +490,7 @@ func file_integrations_scheduler_v2_definition_chart_proto_init() { } } file_integrations_scheduler_v2_definition_chart_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SchedulerV2GetChartRequest); i { + switch v := v.(*SchedulerV2ListChartsResponse); i { case 0: return &v.state case 1: @@ -423,6 +502,18 @@ func file_integrations_scheduler_v2_definition_chart_proto_init() { } } 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 @@ -435,14 +526,15 @@ func file_integrations_scheduler_v2_definition_chart_proto_init() { } } } - file_integrations_scheduler_v2_definition_chart_proto_msgTypes[1].OneofWrappers = []interface{}{} + 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: 5, + NumMessages: 7, NumExtensions: 0, NumServices: 0, }, diff --git a/integrations/scheduler/v2/definition/chart.proto b/integrations/scheduler/v2/definition/chart.proto index 7dad5cffb..920ad09ae 100644 --- a/integrations/scheduler/v2/definition/chart.proto +++ b/integrations/scheduler/v2/definition/chart.proto @@ -30,6 +30,14 @@ message SchedulerV2ChartInfo { 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 diff --git a/integrations/scheduler/v2/implementation_test.go b/integrations/scheduler/v2/implementation_test.go index 86bf1cadf..bb51d5194 100644 --- a/integrations/scheduler/v2/implementation_test.go +++ b/integrations/scheduler/v2/implementation_test.go @@ -23,14 +23,19 @@ 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/tests" + "github.com/arangodb/kube-arangodb/pkg/util/tests/suite" ) func cleanup(t *testing.T, c helm.Client) func() { @@ -47,6 +52,32 @@ func cleanup(t *testing.T, c helm.Client) func() { require.NoError(t, err) }) } + + t.Run("Remove NS", func(t *testing.T) { + if err := c.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 := c.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 = c.Client().Kubernetes().CoreV1().Namespaces().Create(context.Background(), &core.Namespace{ + ObjectMeta: meta.ObjectMeta{ + Name: tests.FakeNamespace, + }, + }, meta.CreateOptions{}) + require.NoError(t, err) + }) }) return func() { @@ -63,6 +94,23 @@ func cleanup(t *testing.T, c helm.Client) func() { require.NoError(t, err) }) } + + t.Run("Remove NS", func(t *testing.T) { + if err := c.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 := c.Client().Kubernetes().CoreV1().Namespaces().Get(context.Background(), tests.FakeNamespace, meta.GetOptions{}); !kerrors.IsNotFound(err) { + require.NoError(t, err) + continue + } + + break + } + }) }) } } @@ -139,7 +187,7 @@ func Test_Implementation(t *testing.T) { status, err := scheduler.Install(context.Background(), &pbSchedulerV2.SchedulerV2InstallRequest{ Name: "test", Values: nil, - Chart: example_1_0_0, + Chart: suite.GetChart(t, "example", "1.0.0"), }) require.NoError(t, err) @@ -154,7 +202,7 @@ func Test_Implementation(t *testing.T) { }) t.Run("Install Outside", func(t *testing.T) { - resp, err := h.Install(context.Background(), example_1_0_0, nil, func(in *action.Install) { + 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) @@ -173,7 +221,7 @@ func Test_Implementation(t *testing.T) { status, err := scheduler.Install(context.Background(), &pbSchedulerV2.SchedulerV2InstallRequest{ Name: "test-x", Values: nil, - Chart: example_1_0_0, + Chart: suite.GetChart(t, "example", "1.0.0"), Options: &pbSchedulerV2.SchedulerV2InstallRequestOptions{ Labels: map[string]string{ "X": "X", @@ -186,7 +234,7 @@ func Test_Implementation(t *testing.T) { }) t.Run("Install Second Outside", func(t *testing.T) { - resp, err := h.Install(context.Background(), example_1_0_0, nil, func(in *action.Install) { + 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", @@ -234,7 +282,20 @@ func Test_Implementation(t *testing.T) { status, err := scheduler.Upgrade(context.Background(), &pbSchedulerV2.SchedulerV2UpgradeRequest{ Name: "test", Values: values, - Chart: example_1_0_0, + 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) @@ -251,7 +312,7 @@ func Test_Implementation(t *testing.T) { require.NotNil(t, status.GetRelease()) - require.EqualValues(t, 2, status.GetRelease().GetVersion()) + require.EqualValues(t, 3, status.GetRelease().GetVersion()) t.Logf("Data: %s", string(status.GetRelease().GetValues())) require.Len(t, status.GetRelease().GetValues(), len(values)) }) diff --git a/integrations/scheduler/v2/suite/example-1.0.0.tgz b/integrations/scheduler/v2/suite/example-1.0.0.tgz deleted file mode 100644 index c12100f2b635d307804e91629b3ea140cca5d81f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmV-S0<--eiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI##kDD+I?lZr_s_t>n(59_~w5NOC>9k4r?t<4wg@h#mt>XCa z6A(0wcI&3Gb|>+@AjO{(+wx~jUop#5T09<5+u(#*IvX8~F}C5n{W8XeU&hva7V<4y zalTwH`HY3j&5F%{jUUQ63S&{v*k8XjOzw>UbMZpj2qhyZLr-Ex5xA!C%H9$NEMVTf zW1TQQdi|G}7G(a-0Jy6Ea6QofifvYt{%--__dPE`ixE`yy@Q!>bM*SRl;tT}GK)AH zdkS3B|8_alKM%Lzr2kuB@c%ywnMClYr)5F@@+o z1TWn`xM4Nys%i=F3SSCk30^_SgrtQ{UAOnQj=i;Y@PTAf|H&Lb*S{rW7r9Etn*vw$ zzupe?zh3ca|Gxi=0Kzo&e^X_iUYEy130iog{FrBoKJP|{Up-lus`>Ns~ilT+N7 zV 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/suite/example-1.0.0.tgz b/pkg/handlers/platform/chart/suite/example-1.0.0.tgz deleted file mode 100644 index c12100f2b635d307804e91629b3ea140cca5d81f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmV-S0<--eiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PI##kDD+I?lZr_s_t>n(59_~w5NOC>9k4r?t<4wg@h#mt>XCa z6A(0wcI&3Gb|>+@AjO{(+wx~jUop#5T09<5+u(#*IvX8~F}C5n{W8XeU&hva7V<4y zalTwH`HY3j&5F%{jUUQ63S&{v*k8XjOzw>UbMZpj2qhyZLr-Ex5xA!C%H9$NEMVTf zW1TQQdi|G}7G(a-0Jy6Ea6QofifvYt{%--__dPE`ixE`yy@Q!>bM*SRl;tT}GK)AH zdkS3B|8_alKM%Lzr2kuB@c%ywnMClYr)5F@@+o z1TWn`xM4Nys%i=F3SSCk30^_SgrtQ{UAOnQj=i;Y@PTAf|H&Lb*S{rW7r9Etn*vw$ zzupe?zh3ca|Gxi=0Kzo&e^X_iUYEy130iog{FrBoKJP|{Up-lus`>Ns~ilT+N7 zVDc zVQyr3R8em|NM&qo0PI##kDD+I?lZr_s_t>n(59_~w5NOC>9k4r?t<4wg@h#mt>XCa z6A(0wcI&3Gb|>+@AjO{(+wx~jUop#5T09<5+u(#*IvX8~F}C5n{W8XeU&hva7V<4y zalTwH`HY3j&5F%{jUUQ63S&{v*k8XjOzw>UbMZpj2qhyZLr-Ex5xA!C%H9$NEMVTf zW1TQQdi|G}7G(a-0Jy6Ea6QofifvYt{%--__dPE`ixE`yy@Q!>bM*SRl;tT}GK)AH zdkS3B|8_alKM%Lzr2kuB@c%ywnMClYr)5F@@+o z1TWn`xM4Nys%i=F3SSCk30^_SgrtQ{UAOnQj=i;Y@PTAf|H&Lb*S{rW7r9Etn*vw$ zzupe?zh3ca|Gxi=0Kzo&e^X_iUYEy130iog{FrBoKJP|{Up-lus`>Ns~ilT+N7 zVDc zVQyr3R8em|NM&qo0PK~`irX*{$9?uwh}U zrCHJ*YML(icM)j*qZth|5`9PGH5H$G3@oo`bhbDE0QYKr_aTS^HM@<->ovOM$r zGa0XuDHcqT3-7w+9)my4|6zByng89VYMuXo!p;1jmF*hw?7G|#V~31QF2wXIyu1kc zg*0I#`GkhV>+5!GmRtypN78YW3W46s^KhhKi786uio5P_`ku6ru`k;32byHlXEew7 zxsx)TJ>N$%Xz@hd_IUj@-d742)zW=OWh0|)f0JgI_U;S#>ZuW_AZV>)WaVtC%4WW1 z@7#HlbkS2gnpDc zVQyr3R8em|NM&qo0PL1gi<~eJ$9?uw1mBH`>)t}3ed+sgw9xliovvX`Vw1R3j{EK< zYoyd=dk>X64*WeBNM@W#oPS3A1*-3`_|k&)bOhBUtHT&$4^?#?8DqQHjd zc==E!;mHpPVe6-I%iuiNg#CA{<>o#J(97>=oitjI3r{sD6eJc!dYM-^Wt6Ayo$JQ> z%=-7J`VKt0!lUy=Z<_TkgV*$b*dG@9-|xyz|8K%V|7WQiL7q&LD)i8R2ayso-3rgo zgnq>i!6AJFh2-TW55=bovQHKsRnN7`T zj`3$EW;%P`MpB^RgiU@N|Bm+!?M2pj-%)DkLD&CC(@t~u4gA=nAn`yzYvaL7qvNS$ z^EO*!&RMi`J=S5lHrj*KXrpl+PdvUXAQhZYkZd>(+7F_vD66u#2KE#kCugi%lZK2# zY5OPB$$Avz5ie+OzW=QMApRf5Dmt$J2k>hDul5W5@5+jA`hN@ZJWo@LKL=@1q4w88 m3Uwz)_W2Xxw4}T2y_4M7*x1-uo!= 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", + }, + ) +} From 02e4ef44b3225d972c10386982928ad8d17b9178 Mon Sep 17 00:00:00 2001 From: djmeuleman Date: Fri, 29 Nov 2024 15:10:46 +0100 Subject: [PATCH 35/69] OAS-9960 | less strict ArangoRoute path validation (#1774) Co-authored-by: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> --- CHANGELOG.md | 1 + pkg/apis/shared/validate.go | 2 +- pkg/apis/shared/validate_test.go | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2b9ff12c..df2af7184 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,7 @@ - (Feature) Add DebugPackage to the OPS Binary - (Feature) (Networking) ArangoRoute Protocol - (Feature) (Platform) Platform Requirements support +- (Improvement) Drop slash requirement from ArangoRoute ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/pkg/apis/shared/validate.go b/pkg/apis/shared/validate.go index ceaffcc8c..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 ( 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/")) From 8af5309f1ffc20a482b672904e9c71e13ca633b6 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Wed, 4 Dec 2024 09:02:18 +0100 Subject: [PATCH 36/69] [Feature] [Networking] Pass through Server Header (#1775) --- CHANGELOG.md | 1 + pkg/deployment/resources/gateway/gateway_config.go | 5 +++-- pkg/deployment/resources/gateway/gateway_config_tls.go | 1 + .../resources/pod_creator_gateway_container.go | 9 --------- 4 files changed, 5 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df2af7184..a24e273d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,7 @@ - (Feature) (Networking) ArangoRoute Protocol - (Feature) (Platform) Platform Requirements support - (Improvement) Drop slash requirement from ArangoRoute +- (Feature) (Networking) Pass through Server Header ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/pkg/deployment/resources/gateway/gateway_config.go b/pkg/deployment/resources/gateway/gateway_config.go index 1388997bf..f55d8a20a 100644 --- a/pkg/deployment/resources/gateway/gateway_config.go +++ b/pkg/deployment/resources/gateway/gateway_config.go @@ -297,8 +297,9 @@ 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, RouteSpecifier: &httpConnectionManagerAPI.HttpConnectionManager_RouteConfig{ RouteConfig: &routeAPI.RouteConfiguration{ Name: "default", diff --git a/pkg/deployment/resources/gateway/gateway_config_tls.go b/pkg/deployment/resources/gateway/gateway_config_tls.go index 98f90fd3a..7b454e4ab 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{"h2,http/1.1"}, }, }) if err != nil { diff --git a/pkg/deployment/resources/pod_creator_gateway_container.go b/pkg/deployment/resources/pod_creator_gateway_container.go index 2a9989427..cfbd6bc6c 100644 --- a/pkg/deployment/resources/pod_creator_gateway_container.go +++ b/pkg/deployment/resources/pod_creator_gateway_container.go @@ -131,15 +131,6 @@ 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 { From 9f1bd2bc7eae2aa7da973a0968939586cf26b51d Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Wed, 4 Dec 2024 15:31:50 +0100 Subject: [PATCH 37/69] [Feature] [Platform] Shutdown migration to CE (#1776) --- CHANGELOG.md | 1 + README.md | 2 +- docs/cli/arangodb_operator.md | 2 +- pkg/handlers/platform/shutdown/handler.go | 170 +++++++++++++++++++++ pkg/handlers/platform/shutdown/local.go | 33 ++++ pkg/handlers/platform/shutdown/register.go | 62 ++++++++ pkg/operator/operator.go | 9 +- 7 files changed, 275 insertions(+), 4 deletions(-) create mode 100644 pkg/handlers/platform/shutdown/handler.go create mode 100644 pkg/handlers/platform/shutdown/local.go create mode 100644 pkg/handlers/platform/shutdown/register.go diff --git a/CHANGELOG.md b/CHANGELOG.md index a24e273d9..efc7942b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ - (Feature) (Platform) Platform Requirements support - (Improvement) Drop slash requirement from ArangoRoute - (Feature) (Networking) Pass through Server Header +- (Feature) (Platform) Shutdown migration to CE ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/README.md b/README.md index 4de555f57..7819a885b 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,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, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, 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-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 (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-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 (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 diff --git a/docs/cli/arangodb_operator.md b/docs/cli/arangodb_operator.md index 94f765a0f..38e4d48b8 100644 --- a/docs/cli/arangodb_operator.md +++ b/docs/cli/arangodb_operator.md @@ -80,7 +80,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, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, 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-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 (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-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 (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 diff --git a/pkg/handlers/platform/shutdown/handler.go b/pkg/handlers/platform/shutdown/handler.go new file mode 100644 index 000000000..19f8fefd9 --- /dev/null +++ b/pkg/handlers/platform/shutdown/handler.go @@ -0,0 +1,170 @@ +// +// 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 + } + } + } + + // 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/operator/operator.go b/pkg/operator/operator.go index 9434e90d2..5c2ed7677 100644 --- a/pkg/operator/operator.go +++ b/pkg/operator/operator.go @@ -50,6 +50,7 @@ import ( "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" @@ -350,7 +351,7 @@ func (o *Operator) onStartOperatorV2(operatorType operatorV2type, stop <-chan st 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) + 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) @@ -398,7 +399,7 @@ 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) { +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 @@ -412,6 +413,10 @@ func (o *Operator) onStartOperatorV2Platform(operator operatorV2.Operator, recor 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) { From 6f713a85e9f4719486dd73001bfff431c726acb1 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 6 Dec 2024 12:16:20 +0100 Subject: [PATCH 38/69] [Feature] [Scheduler] Shutdown Integration (#1777) --- CHANGELOG.md | 1 + Dockerfile | 2 +- docs/integration-sidecar.md | 12 +++++ docs/integration/shutdown.v1.md | 32 +++++++++++++ integrations/envoy/auth/v3/response.go | 2 +- pkg/deployment/resources/arango_profiles.go | 1 + pkg/integrations/sidecar/integration.go | 23 +++++----- .../sidecar/integration.shutdown.v1.go | 11 +++++ .../sidecar/integration_interface.go | 45 +++++++++++++++++++ pkg/util/constants/profiles.go | 11 ++--- 10 files changed, 122 insertions(+), 18 deletions(-) create mode 100644 docs/integration/shutdown.v1.md create mode 100644 pkg/integrations/sidecar/integration_interface.go diff --git a/CHANGELOG.md b/CHANGELOG.md index efc7942b9..bc2f5d4e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ - (Improvement) Drop slash requirement from ArangoRoute - (Feature) (Networking) Pass through Server Header - (Feature) (Platform) Shutdown migration to CE +- (Feature) (Scheduler) Shutdown Integration ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD 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/docs/integration-sidecar.md b/docs/integration-sidecar.md index a02658d3d..3cae93edb 100644 --- a/docs/integration-sidecar.md +++ b/docs/integration-sidecar.md @@ -87,6 +87,18 @@ metadata: 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 diff --git a/docs/integration/shutdown.v1.md b/docs/integration/shutdown.v1.md new file mode 100644 index 000000000..6f953a9fb --- /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: "true" + core.shutdown.arangodb.com/app2: "true" + 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/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/pkg/deployment/resources/arango_profiles.go b/pkg/deployment/resources/arango_profiles.go index 016428570..a533263fa 100644 --- a/pkg/deployment/resources/arango_profiles.go +++ b/pkg/deployment/resources/arango_profiles.go @@ -153,6 +153,7 @@ func (r *Resources) EnsureArangoProfiles(ctx context.Context, cachedStatus inspe 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.ProfilesIntegrationV2, func() (sidecar.Integration, bool) { if v, err := cachedStatus.ArangoPlatformStorage().V1Alpha1(); err == nil { diff --git a/pkg/integrations/sidecar/integration.go b/pkg/integrations/sidecar/integration.go index ae19c66b0..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, }, @@ -205,9 +209,6 @@ 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, } 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_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/util/constants/profiles.go b/pkg/util/constants/profiles.go index 4126a505e..2669b47c6 100644 --- a/pkg/util/constants/profiles.go +++ b/pkg/util/constants/profiles.go @@ -28,11 +28,12 @@ const ProfilesDeployment = ProfileGroup + "/deployment" const ProfilesIntegrationPrefix = "integration." + ProfileGroup const ( - ProfilesIntegrationAuthn = "authn" - ProfilesIntegrationAuthz = "authz" - ProfilesIntegrationSched = "sched" - ProfilesIntegrationEnvoy = "envoy" - ProfilesIntegrationStorage = "storage" + ProfilesIntegrationAuthn = "authn" + ProfilesIntegrationAuthz = "authz" + ProfilesIntegrationSched = "sched" + ProfilesIntegrationEnvoy = "envoy" + ProfilesIntegrationStorage = "storage" + ProfilesIntegrationShutdown = "shutdown" ) const ( From c7cce485845fa7d4e5cb8e3823b64df82e38216c Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:04:26 +0100 Subject: [PATCH 39/69] [Feature] CertManager Integration (#1778) --- CHANGELOG.md | 1 + .../templates/certificates/ca.yaml | 22 ++++++++++++++++ .../templates/certificates/certificate.yaml | 24 ++++++++++++++++++ .../templates/certificates/issuer.ca.yaml | 17 +++++++++++++ .../templates/certificates/issuer.yaml | 18 +++++++++++++ .../templates/deployment.yaml | 4 +++ chart/kube-arangodb-arm64/values.yaml | 7 ++++++ .../templates/certificates/ca.yaml | 22 ++++++++++++++++ .../templates/certificates/certificate.yaml | 24 ++++++++++++++++++ .../templates/certificates/issuer.ca.yaml | 17 +++++++++++++ .../templates/certificates/issuer.yaml | 18 +++++++++++++ .../templates/deployment.yaml | 4 +++ .../values.yaml | 7 ++++++ .../templates/certificates/ca.yaml | 22 ++++++++++++++++ .../templates/certificates/certificate.yaml | 24 ++++++++++++++++++ .../templates/certificates/issuer.ca.yaml | 17 +++++++++++++ .../templates/certificates/issuer.yaml | 18 +++++++++++++ .../templates/deployment.yaml | 4 +++ chart/kube-arangodb-enterprise/values.yaml | 7 ++++++ .../templates/certificates/ca.yaml | 22 ++++++++++++++++ .../templates/certificates/certificate.yaml | 24 ++++++++++++++++++ .../templates/certificates/issuer.ca.yaml | 17 +++++++++++++ .../templates/certificates/issuer.yaml | 18 +++++++++++++ chart/kube-arangodb/templates/deployment.yaml | 4 +++ chart/kube-arangodb/values.yaml | 7 ++++++ docs/helm.md | 25 +++++++++++++++++++ pkg/server/server.go | 4 +-- 27 files changed, 396 insertions(+), 2 deletions(-) create mode 100644 chart/kube-arangodb-arm64/templates/certificates/ca.yaml create mode 100644 chart/kube-arangodb-arm64/templates/certificates/certificate.yaml create mode 100644 chart/kube-arangodb-arm64/templates/certificates/issuer.ca.yaml create mode 100644 chart/kube-arangodb-arm64/templates/certificates/issuer.yaml create mode 100644 chart/kube-arangodb-enterprise-arm64/templates/certificates/ca.yaml create mode 100644 chart/kube-arangodb-enterprise-arm64/templates/certificates/certificate.yaml create mode 100644 chart/kube-arangodb-enterprise-arm64/templates/certificates/issuer.ca.yaml create mode 100644 chart/kube-arangodb-enterprise-arm64/templates/certificates/issuer.yaml create mode 100644 chart/kube-arangodb-enterprise/templates/certificates/ca.yaml create mode 100644 chart/kube-arangodb-enterprise/templates/certificates/certificate.yaml create mode 100644 chart/kube-arangodb-enterprise/templates/certificates/issuer.ca.yaml create mode 100644 chart/kube-arangodb-enterprise/templates/certificates/issuer.yaml create mode 100644 chart/kube-arangodb/templates/certificates/ca.yaml create mode 100644 chart/kube-arangodb/templates/certificates/certificate.yaml create mode 100644 chart/kube-arangodb/templates/certificates/issuer.ca.yaml create mode 100644 chart/kube-arangodb/templates/certificates/issuer.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md index bc2f5d4e9..b7c67e3f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ - (Feature) (Networking) Pass through Server Header - (Feature) (Platform) Shutdown migration to CE - (Feature) (Scheduler) Shutdown Integration +- (Feature) CertManager Integration ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD 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.yaml b/chart/kube-arangodb-arm64/templates/deployment.yaml index 99826580f..09c06c4aa 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 -}} diff --git a/chart/kube-arangodb-arm64/values.yaml b/chart/kube-arangodb-arm64/values.yaml index 7ec9f78a8..c764e1b79 100644 --- a/chart/kube-arangodb-arm64/values.yaml +++ b/chart/kube-arangodb-arm64/values.yaml @@ -44,3 +44,10 @@ rbac: acs: true at: true debug: false +certificate: + enabled: false + ca: + duration: 43800h + commonName: "kube-arangodb.operator.cert" + cert: + duration: 8760h 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.yaml b/chart/kube-arangodb-enterprise-arm64/templates/deployment.yaml index 99826580f..09c06c4aa 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 -}} diff --git a/chart/kube-arangodb-enterprise-arm64/values.yaml b/chart/kube-arangodb-enterprise-arm64/values.yaml index c8a2fc7a2..6657a8103 100644 --- a/chart/kube-arangodb-enterprise-arm64/values.yaml +++ b/chart/kube-arangodb-enterprise-arm64/values.yaml @@ -44,3 +44,10 @@ rbac: acs: true at: true debug: false +certificate: + enabled: false + ca: + duration: 43800h + commonName: "kube-arangodb.operator.cert" + cert: + duration: 8760h 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.yaml b/chart/kube-arangodb-enterprise/templates/deployment.yaml index 99826580f..09c06c4aa 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 -}} diff --git a/chart/kube-arangodb-enterprise/values.yaml b/chart/kube-arangodb-enterprise/values.yaml index 6c5965a78..e6b86226d 100644 --- a/chart/kube-arangodb-enterprise/values.yaml +++ b/chart/kube-arangodb-enterprise/values.yaml @@ -44,3 +44,10 @@ rbac: acs: true at: true debug: false +certificate: + enabled: false + ca: + duration: 43800h + commonName: "kube-arangodb.operator.cert" + cert: + duration: 8760h 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.yaml b/chart/kube-arangodb/templates/deployment.yaml index 99826580f..09c06c4aa 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 -}} diff --git a/chart/kube-arangodb/values.yaml b/chart/kube-arangodb/values.yaml index 7c6018afd..57d76c359 100644 --- a/chart/kube-arangodb/values.yaml +++ b/chart/kube-arangodb/values.yaml @@ -45,3 +45,10 @@ rbac: acs: true at: true debug: false +certificate: + enabled: false + ca: + duration: 43800h + commonName: "kube-arangodb.operator.cert" + cert: + duration: 8760h 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/pkg/server/server.go b/pkg/server/server.go index 4757d029f..907d39acf 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -110,7 +110,7 @@ func NewServer(cli typedCore.CoreV1Interface, cfg Config, deps Dependencies) (*S var cert, key string if cfg.TLSSecretName != "" && cfg.TLSSecretNamespace != "" { - // Load TLS certificate from secret + serverLogger.Str("addr", cfg.Address).Str("secret", cfg.TLSSecretName).Str("secret-namespace", cfg.TLSSecretNamespace).Info("Using existing TLS Certificate") s, err := cli.Secrets(cfg.TLSSecretNamespace).Get(context.Background(), cfg.TLSSecretName, meta.GetOptions{}) if err != nil { return nil, errors.WithStack(err) @@ -126,7 +126,7 @@ func NewServer(cli typedCore.CoreV1Interface, cfg Config, deps Dependencies) (*S cert = string(certBytes) key = string(keyBytes) } else { - // Secret not specified, create our own TLS certificate + serverLogger.Str("addr", cfg.Address).Info("Using SelfSigned TLS Certificate") options := certificates.CreateCertificateOptions{ CommonName: cfg.PodName, Hosts: []string{cfg.PodName, cfg.PodIP}, From 3993a0c40f07eea77e90917f89e90cb6e50e48db Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Tue, 10 Dec 2024 23:40:39 +0100 Subject: [PATCH 40/69] [Feature] [Networking] Gateway options sync (#1780) --- CHANGELOG.md | 1 + docs/api/ArangoRoute.V1Alpha1.md | 27 +++++-- docs/integration/shutdown.v1.md | 4 +- .../networking/v1alpha1/route_spec_options.go | 10 +++ .../v1alpha1/route_spec_options_upgrade.go | 22 +++++- .../v1alpha1/route_status_target.go | 7 +- .../v1alpha1/route_status_target_options.go | 36 ++++++++++ .../route_status_target_options_upgrade.go | 52 ++++++++++++++ .../v1alpha1/zz_generated.deepcopy.go | 71 +++++++++++++++++++ .../resources/config_map_gateway.go | 15 ++++ pkg/deployment/resources/gateway/alpn.go | 44 ++++++++++++ pkg/deployment/resources/gateway/alpn_test.go | 35 +++++++++ .../gateway/gateway_config_destination.go | 5 +- .../gateway_config_destination_protocol.go | 11 +++ .../gateway/gateway_config_destination_tls.go | 37 ++++++++++ .../gateway_config_destination_type.go | 10 ++- .../resources/gateway/gateway_config_tls.go | 2 +- .../route/handler_destination_endpoints.go | 2 + .../route/handler_destination_service.go | 2 + pkg/handlers/platform/shutdown/handler.go | 5 ++ 20 files changed, 385 insertions(+), 13 deletions(-) create mode 100644 pkg/apis/networking/v1alpha1/route_status_target_options.go create mode 100644 pkg/apis/networking/v1alpha1/route_status_target_options_upgrade.go create mode 100644 pkg/deployment/resources/gateway/alpn.go create mode 100644 pkg/deployment/resources/gateway/alpn_test.go create mode 100644 pkg/deployment/resources/gateway/gateway_config_destination_tls.go diff --git a/CHANGELOG.md b/CHANGELOG.md index b7c67e3f4..c70de9af0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ - (Feature) (Platform) Shutdown migration to CE - (Feature) (Scheduler) Shutdown Integration - (Feature) CertManager Integration +- (Feature) (Networking) Gateway Options sync ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/docs/api/ArangoRoute.V1Alpha1.md b/docs/api/ArangoRoute.V1Alpha1.md index 3a6c98721..676ae906c 100644 --- a/docs/api/ArangoRoute.V1Alpha1.md +++ b/docs/api/ArangoRoute.V1Alpha1.md @@ -163,7 +163,7 @@ Insecure allows Insecure traffic ### .spec.options.upgrade\[int\].enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go#L37) +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go#L50) Enabled defines if upgrade option is enabled @@ -171,7 +171,7 @@ Enabled defines if upgrade option is enabled ### .spec.options.upgrade\[int\].type -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go#L34) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go#L47) Type defines type of the Upgrade @@ -252,9 +252,28 @@ Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1. *** +### .status.target.options.upgrade\[int\].enabled + +Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/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.43/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#L46) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target.go#L49) Path specifies request path override @@ -268,7 +287,7 @@ Protocol defines http protocol used for the route *** -### .status.target.TLS.insecure +### .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) diff --git a/docs/integration/shutdown.v1.md b/docs/integration/shutdown.v1.md index 6f953a9fb..15d95b6c4 100644 --- a/docs/integration/shutdown.v1.md +++ b/docs/integration/shutdown.v1.md @@ -17,8 +17,8 @@ Example: ```yaml metadata: annotations: - core.shutdown.arangodb.com/app: "true" - core.shutdown.arangodb.com/app2: "true" + core.shutdown.arangodb.com/app: "wait" + core.shutdown.arangodb.com/app2: "wait" container.shutdown.arangodb.com/app3: port1 spec: containers: diff --git a/pkg/apis/networking/v1alpha1/route_spec_options.go b/pkg/apis/networking/v1alpha1/route_spec_options.go index 9b7505c90..1e437f76e 100644 --- a/pkg/apis/networking/v1alpha1/route_spec_options.go +++ b/pkg/apis/networking/v1alpha1/route_spec_options.go @@ -27,6 +27,16 @@ type ArangoRouteSpecOptions struct { 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{} diff --git a/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go b/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go index bb0d2fb2a..fe4fe1f52 100644 --- a/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go +++ b/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go @@ -20,7 +20,10 @@ package v1alpha1 -import shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" +import ( + shared "github.com/arangodb/kube-arangodb/pkg/apis/shared" + "github.com/arangodb/kube-arangodb/pkg/util" +) type ArangoRouteSpecOptionsUpgrade []ArangoRouteSpecOptionUpgrade @@ -28,6 +31,16 @@ 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 @@ -37,6 +50,13 @@ type ArangoRouteSpecOptionUpgrade struct { 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), diff --git a/pkg/apis/networking/v1alpha1/route_status_target.go b/pkg/apis/networking/v1alpha1/route_status_target.go index a90021de4..2b8cb5bd7 100644 --- a/pkg/apis/networking/v1alpha1/route_status_target.go +++ b/pkg/apis/networking/v1alpha1/route_status_target.go @@ -34,7 +34,7 @@ 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"` @@ -42,6 +42,9 @@ type ArangoRouteStatusTarget struct { // 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"` } @@ -70,5 +73,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()) } 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/zz_generated.deepcopy.go b/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go index 2aef9bdb2..1702fa4bc 100644 --- a/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go @@ -413,6 +413,11 @@ 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) + } return } @@ -478,6 +483,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/deployment/resources/config_map_gateway.go b/pkg/deployment/resources/config_map_gateway.go index 8efaf7d51..a97036914 100644 --- a/pkg/deployment/resources/config_map_gateway.go +++ b/pkg/deployment/resources/config_map_gateway.go @@ -206,6 +206,21 @@ 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.AuthExtension = &gateway.ConfigAuthZExtension{ 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_config_destination.go b/pkg/deployment/resources/gateway/gateway_config_destination.go index 5963c0569..b78d368b8 100644 --- a/pkg/deployment/resources/gateway/gateway_config_destination.go +++ b/pkg/deployment/resources/gateway/gateway_config_destination.go @@ -68,6 +68,8 @@ type ConfigDestination struct { AuthExtension *ConfigAuthZExtension `json:"authExtension,omitempty"` UpgradeConfigs ConfigDestinationsUpgrade `json:"upgradeConfigs,omitempty"` + + TLS ConfigDestinationTLS `json:"tls,omitempty"` } func (c *ConfigDestination) Validate() error { @@ -78,6 +80,7 @@ func (c *ConfigDestination) Validate() error { 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()), @@ -153,7 +156,7 @@ func (c *ConfigDestination) RenderCluster(name string) (*clusterAPI.Cluster, err }, } - 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 index e3c7ab06a..67d3d68b6 100644 --- a/pkg/deployment/resources/gateway/gateway_config_destination_protocol.go +++ b/pkg/deployment/resources/gateway/gateway_config_destination_protocol.go @@ -50,6 +50,17 @@ func (c *ConfigDestinationProtocol) Get() ConfigDestinationProtocol { } } +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: 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..4e281900a 100644 --- a/pkg/deployment/resources/gateway/gateway_config_destination_type.go +++ b/pkg/deployment/resources/gateway/gateway_config_destination_type.go @@ -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" ) @@ -48,11 +49,16 @@ func (c *ConfigDestinationType) Get() ConfigDestinationType { } } -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 { diff --git a/pkg/deployment/resources/gateway/gateway_config_tls.go b/pkg/deployment/resources/gateway/gateway_config_tls.go index 7b454e4ab..730782e38 100644 --- a/pkg/deployment/resources/gateway/gateway_config_tls.go +++ b/pkg/deployment/resources/gateway/gateway_config_tls.go @@ -54,7 +54,7 @@ func (c *ConfigTLS) RenderListenerTransportSocket() (*coreAPI.TransportSocket, e }, }, }, - AlpnProtocols: []string{"h2,http/1.1"}, + AlpnProtocols: []string{(ALPNProtocolHTTP2 | ALPNProtocolHTTP1).String()}, }, }) if err != nil { diff --git a/pkg/handlers/networking/route/handler_destination_endpoints.go b/pkg/handlers/networking/route/handler_destination_endpoints.go index b6eedf8d7..9d7f469e1 100644 --- a/pkg/handlers/networking/route/handler_destination_endpoints.go +++ b/pkg/handlers/networking/route/handler_destination_endpoints.go @@ -122,6 +122,8 @@ func (h *handler) HandleArangoDestinationEndpoints(ctx context.Context, item ope target.Type = networkingApi.ArangoRouteStatusTargetEndpointsType target.Protocol = dest.GetProtocol().Get() + target.Options = extension.Spec.Options.AsStatus() + // Render Auth Settings target.Authentication.Type = dest.GetAuthentication().GetType() diff --git a/pkg/handlers/networking/route/handler_destination_service.go b/pkg/handlers/networking/route/handler_destination_service.go index cc3867c9f..175917e3b 100644 --- a/pkg/handlers/networking/route/handler_destination_service.go +++ b/pkg/handlers/networking/route/handler_destination_service.go @@ -121,6 +121,8 @@ func (h *handler) HandleArangoDestinationService(ctx context.Context, item opera target.Type = networkingApi.ArangoRouteStatusTargetServiceType target.Protocol = dest.GetProtocol().Get() + target.Options = extension.Spec.Options.AsStatus() + // Render Auth Settings target.Authentication.Type = dest.GetAuthentication().GetType() diff --git a/pkg/handlers/platform/shutdown/handler.go b/pkg/handlers/platform/shutdown/handler.go index 19f8fefd9..95274c131 100644 --- a/pkg/handlers/platform/shutdown/handler.go +++ b/pkg/handlers/platform/shutdown/handler.go @@ -83,6 +83,11 @@ func (h *handler) Handle(ctx context.Context, item operation.Item) error { // Container is not yet stopped, skip shutdown return nil } + default: + if container.State.Terminated == nil { + // Container is not yet stopped, skip shutdown + return nil + } } } From 58154dbf5be3bc0d8e3288f9e129116926855c81 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 13 Dec 2024 10:13:58 +0100 Subject: [PATCH 41/69] [Feature] Webhooks (#1781) --- .golangci.yaml | 2 + CHANGELOG.md | 1 + README.md | 2 +- .../templates/deployment.yaml | 61 + .../templates/service-webhooks.yaml | 31 + .../templates/webhook/certificate.yaml | 24 + .../templates/webhook/mutation.yaml | 42 + .../templates/webhook/validation.yaml | 17 + chart/kube-arangodb-arm64/values.yaml | 10 + .../templates/deployment.yaml | 61 + .../templates/service-webhooks.yaml | 31 + .../templates/webhook/certificate.yaml | 24 + .../templates/webhook/mutation.yaml | 42 + .../templates/webhook/validation.yaml | 17 + .../values.yaml | 10 + .../templates/deployment.yaml | 61 + .../templates/service-webhooks.yaml | 31 + .../templates/webhook/certificate.yaml | 24 + .../templates/webhook/mutation.yaml | 42 + .../templates/webhook/validation.yaml | 17 + chart/kube-arangodb-enterprise/values.yaml | 10 + chart/kube-arangodb/templates/deployment.yaml | 61 + .../templates/service-webhooks.yaml | 31 + .../templates/webhook/certificate.yaml | 24 + .../templates/webhook/mutation.yaml | 42 + .../templates/webhook/validation.yaml | 17 + chart/kube-arangodb/values.yaml | 10 + cmd/cmd.go | 3 - cmd/exporter.go | 68 +- cmd/logger.go | 28 + cmd/webhook.go | 113 ++ docs/api/ArangoProfile.V1Beta1.md | 5 +- docs/cli/arangodb_operator.md | 3 +- docs/how-to/set_root_user_password.md | 2 +- docs/integration-sidecar.md | 14 + go.sum | 1752 +++++++++++++++++ .../storage/v2/definition/storage.pb.go | 290 ++- .../storage/v2/definition/storage.proto | 2 +- .../storage/v2/definition/storage_grpc.pb.go | 20 +- pkg/api/api.go | 5 +- pkg/api/tls.go | 63 +- .../v1beta1/profile_container_template.go | 2 + .../scheduler/v1beta1/profile_template.go | 4 + pkg/deployment/patch/item.go | 4 +- pkg/exporter/exporter.go | 33 +- pkg/handlers/scheduler/admissions.go | 43 + .../scheduler/webhooks/policies/handler.go | 137 ++ pkg/logging/http.go | 40 + pkg/server/server.go | 52 +- pkg/util/constants/profiles.go | 5 + pkg/util/http/error.go | 76 + pkg/util/http/server.go | 187 +- pkg/util/list.go | 12 + pkg/util/mod.go | 58 +- pkg/util/refs.go | 38 + pkg/util/tests/http.go | 58 + pkg/util/tests/kubernetes.go | 10 +- pkg/util/tests/port.go | 42 + pkg/util/tests/time.go | 31 + pkg/util/tls.go | 121 ++ pkg/webhook/admission.go | 329 ++++ pkg/webhook/handler.go | 52 + pkg/webhook/logger.go | 25 + pkg/webhook/responses.go | 89 + pkg/webhook/suite_pod_test.go | 111 ++ pkg/webhook/suite_test.go | 129 ++ 66 files changed, 4355 insertions(+), 446 deletions(-) create mode 100644 chart/kube-arangodb-arm64/templates/service-webhooks.yaml create mode 100644 chart/kube-arangodb-arm64/templates/webhook/certificate.yaml create mode 100644 chart/kube-arangodb-arm64/templates/webhook/mutation.yaml create mode 100644 chart/kube-arangodb-arm64/templates/webhook/validation.yaml create mode 100644 chart/kube-arangodb-enterprise-arm64/templates/service-webhooks.yaml create mode 100644 chart/kube-arangodb-enterprise-arm64/templates/webhook/certificate.yaml create mode 100644 chart/kube-arangodb-enterprise-arm64/templates/webhook/mutation.yaml create mode 100644 chart/kube-arangodb-enterprise-arm64/templates/webhook/validation.yaml create mode 100644 chart/kube-arangodb-enterprise/templates/service-webhooks.yaml create mode 100644 chart/kube-arangodb-enterprise/templates/webhook/certificate.yaml create mode 100644 chart/kube-arangodb-enterprise/templates/webhook/mutation.yaml create mode 100644 chart/kube-arangodb-enterprise/templates/webhook/validation.yaml create mode 100644 chart/kube-arangodb/templates/service-webhooks.yaml create mode 100644 chart/kube-arangodb/templates/webhook/certificate.yaml create mode 100644 chart/kube-arangodb/templates/webhook/mutation.yaml create mode 100644 chart/kube-arangodb/templates/webhook/validation.yaml create mode 100644 cmd/logger.go create mode 100644 cmd/webhook.go create mode 100644 pkg/handlers/scheduler/admissions.go create mode 100644 pkg/handlers/scheduler/webhooks/policies/handler.go create mode 100644 pkg/logging/http.go create mode 100644 pkg/util/http/error.go create mode 100644 pkg/util/tests/http.go create mode 100644 pkg/util/tests/port.go create mode 100644 pkg/util/tls.go create mode 100644 pkg/webhook/admission.go create mode 100644 pkg/webhook/handler.go create mode 100644 pkg/webhook/logger.go create mode 100644 pkg/webhook/responses.go create mode 100644 pkg/webhook/suite_pod_test.go create mode 100644 pkg/webhook/suite_test.go diff --git a/.golangci.yaml b/.golangci.yaml index 0e13e8a3f..77ba09fc0 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -129,6 +129,8 @@ 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 diff --git a/CHANGELOG.md b/CHANGELOG.md index c70de9af0..b3f83bf62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,7 @@ - (Feature) (Scheduler) Shutdown Integration - (Feature) CertManager Integration - (Feature) (Networking) Gateway Options sync +- (Feature) Webhooks ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/README.md b/README.md index 7819a885b..4482a8762 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,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, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, 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 (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-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 diff --git a/chart/kube-arangodb-arm64/templates/deployment.yaml b/chart/kube-arangodb-arm64/templates/deployment.yaml index 09c06c4aa..a5d679039 100644 --- a/chart/kube-arangodb-arm64/templates/deployment.yaml +++ b/chart/kube-arangodb-arm64/templates/deployment.yaml @@ -191,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/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..905d6a86e --- /dev/null +++ b/chart/kube-arangodb-arm64/templates/webhook/mutation.yaml @@ -0,0 +1,42 @@ +{{ 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 + +{{- 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 c764e1b79..0f18c7737 100644 --- a/chart/kube-arangodb-arm64/values.yaml +++ b/chart/kube-arangodb-arm64/values.yaml @@ -44,6 +44,16 @@ 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: diff --git a/chart/kube-arangodb-enterprise-arm64/templates/deployment.yaml b/chart/kube-arangodb-enterprise-arm64/templates/deployment.yaml index 09c06c4aa..a5d679039 100644 --- a/chart/kube-arangodb-enterprise-arm64/templates/deployment.yaml +++ b/chart/kube-arangodb-enterprise-arm64/templates/deployment.yaml @@ -191,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/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..905d6a86e --- /dev/null +++ b/chart/kube-arangodb-enterprise-arm64/templates/webhook/mutation.yaml @@ -0,0 +1,42 @@ +{{ 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 + +{{- 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 6657a8103..79b0abcf3 100644 --- a/chart/kube-arangodb-enterprise-arm64/values.yaml +++ b/chart/kube-arangodb-enterprise-arm64/values.yaml @@ -44,6 +44,16 @@ 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: diff --git a/chart/kube-arangodb-enterprise/templates/deployment.yaml b/chart/kube-arangodb-enterprise/templates/deployment.yaml index 09c06c4aa..a5d679039 100644 --- a/chart/kube-arangodb-enterprise/templates/deployment.yaml +++ b/chart/kube-arangodb-enterprise/templates/deployment.yaml @@ -191,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/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..905d6a86e --- /dev/null +++ b/chart/kube-arangodb-enterprise/templates/webhook/mutation.yaml @@ -0,0 +1,42 @@ +{{ 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 + +{{- 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 e6b86226d..93c76bbf7 100644 --- a/chart/kube-arangodb-enterprise/values.yaml +++ b/chart/kube-arangodb-enterprise/values.yaml @@ -44,6 +44,16 @@ 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: diff --git a/chart/kube-arangodb/templates/deployment.yaml b/chart/kube-arangodb/templates/deployment.yaml index 09c06c4aa..a5d679039 100644 --- a/chart/kube-arangodb/templates/deployment.yaml +++ b/chart/kube-arangodb/templates/deployment.yaml @@ -191,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/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..905d6a86e --- /dev/null +++ b/chart/kube-arangodb/templates/webhook/mutation.yaml @@ -0,0 +1,42 @@ +{{ 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 + +{{- 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 57d76c359..37b075249 100644 --- a/chart/kube-arangodb/values.yaml +++ b/chart/kube-arangodb/values.yaml @@ -45,6 +45,16 @@ 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: diff --git a/cmd/cmd.go b/cmd/cmd.go index 3ec498d70..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, 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/docs/api/ArangoProfile.V1Beta1.md b/docs/api/ArangoProfile.V1Beta1.md index 6b9cd3812..6b07241de 100644 --- a/docs/api/ArangoProfile.V1Beta1.md +++ b/docs/api/ArangoProfile.V1Beta1.md @@ -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.43/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/cli/arangodb_operator.md b/docs/cli/arangodb_operator.md index 38e4d48b8..b362f1117 100644 --- a/docs/cli/arangodb_operator.md +++ b/docs/cli/arangodb_operator.md @@ -24,6 +24,7 @@ Available Commands: storage task version + webhook Flags: --action.PVCResize.concurrency int Define limit of concurrent PVC Resizes on the cluster (default 32) @@ -80,7 +81,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, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, 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 (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-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 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 index 3cae93edb..5e6b530da 100644 --- a/docs/integration-sidecar.md +++ b/docs/integration-sidecar.md @@ -29,6 +29,20 @@ metadata: 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: diff --git a/go.sum b/go.sum index 87cabde17..ce87eb016 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,767 @@ cel.dev/expr v0.15.0 h1:O1jzfJCQBfL5BFoYktaxwIhuttaQPsVWerH9/EEKx0w= cel.dev/expr v0.15.0/go.mod h1:TRSuuV7DlVCE/uwv5QbAiW/v8l5O8C4eEPHeu7gf7Sg= 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= @@ -12,8 +769,10 @@ github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg6 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= @@ -28,16 +787,35 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc 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/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/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/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/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= @@ -46,6 +824,11 @@ 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= @@ -56,8 +839,12 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 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= @@ -74,8 +861,12 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH 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 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= @@ -87,6 +878,21 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR 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/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/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= @@ -97,9 +903,13 @@ github.com/containerd/continuity v0.4.2 h1:v3y/4Yz5jwnvqPKJJ+7Wf93fyWoCB3F5EclWG 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/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.3.2/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= @@ -134,41 +944,77 @@ github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQ 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.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 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/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-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= @@ -184,6 +1030,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= @@ -200,52 +1048,141 @@ github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1v 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/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/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/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= @@ -256,17 +1193,45 @@ 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/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/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/jessevdk/go-assets v0.0.0-20160921144138-4f4301a06e15 h1:cW/amwGEJK5MSKntPXRjX4dxs/nGxGT8gXKIsKFmHGc= @@ -283,23 +1248,36 @@ github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8Hm 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= @@ -316,31 +1294,52 @@ 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-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/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= @@ -373,23 +1372,33 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 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= @@ -404,6 +1413,9 @@ github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJL github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/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/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= @@ -417,8 +1429,14 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg 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/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= +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= @@ -426,27 +1444,45 @@ 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/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/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= @@ -462,14 +1498,31 @@ github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17 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/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +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/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= @@ -480,128 +1533,767 @@ go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6b go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= 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.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/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= 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.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/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/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.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/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +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/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.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/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.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/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.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/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.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/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.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.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 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/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/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.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/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.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= 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/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= @@ -609,7 +2301,13 @@ 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= +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/apiextensions-apiserver v0.31.1 h1:L+hwULvXx+nvTYX/MKM3kKMZyei+UiSXQWciX/N6E40= @@ -632,9 +2330,63 @@ k8s.io/kubectl v0.31.1 h1:ih4JQJHxsEggFqDJEHSOdJ69ZxZftgeZvYo7M/cpp24= k8s.io/kubectl v0.31.1/go.mod h1:aNuQoR43W6MLAtXQ/Bu4GDmoHlbhHKuyD49lmTC8eJM= 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/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= diff --git a/integrations/storage/v2/definition/storage.pb.go b/integrations/storage/v2/definition/storage.pb.go index 8f3d45f8f..b4ad3017c 100644 --- a/integrations/storage/v2/definition/storage.pb.go +++ b/integrations/storage/v2/definition/storage.pb.go @@ -798,117 +798,115 @@ 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, 0x08, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x71, 0x0a, 0x0f, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, 0x61, - 0x74, 0x68, 0x12, 0x31, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x49, 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, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x60, 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, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, - 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, 0x49, 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, 0x2b, 0x0a, 0x04, 0x70, 0x61, - 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, - 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x50, 0x61, 0x74, - 0x68, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x50, 0x0a, 0x1b, 0x53, 0x74, 0x6f, 0x72, 0x61, + 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, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x4b, 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, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, - 0x77, 0x6e, 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, 0x4a, 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, 0x2b, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, - 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x50, 0x61, 0x74, 0x68, 0x52, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x22, 0x4f, 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, 0x2f, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x05, 0x66, - 0x69, 0x6c, 0x65, 0x73, 0x32, 0xad, 0x04, 0x0a, 0x09, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x56, 0x32, 0x12, 0x47, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x1e, 0x2e, 0x73, 0x68, 0x75, - 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x49, - 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x73, 0x68, 0x75, - 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x56, 0x32, 0x49, - 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0a, 0x52, - 0x65, 0x61, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, 0x73, 0x68, 0x75, 0x74, - 0x64, 0x6f, 0x77, 0x6e, 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, - 0x25, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x5e, 0x0a, 0x0b, 0x57, 0x72, 0x69, 0x74, - 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x25, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, - 0x77, 0x6e, 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, 0x26, - 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 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, 0x59, 0x0a, 0x0a, 0x48, 0x65, 0x61, 0x64, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x24, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, - 0x6e, 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, 0x25, 0x2e, 0x73, - 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x5f, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x26, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x27, 0x2e, 0x73, 0x68, - 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x5e, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, 0x26, 0x2e, 0x73, 0x68, 0x75, - 0x74, 0x64, 0x6f, 0x77, 0x6e, 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, + 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 ( @@ -925,46 +923,46 @@ func file_integrations_storage_v2_definition_storage_proto_rawDescGZIP() []byte 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: shutdown.StorageV2Path - (*StorageV2Object)(nil), // 1: shutdown.StorageV2Object - (*StorageV2ObjectInfo)(nil), // 2: shutdown.StorageV2ObjectInfo - (*StorageV2InitRequest)(nil), // 3: shutdown.StorageV2InitRequest - (*StorageV2InitResponse)(nil), // 4: shutdown.StorageV2InitResponse - (*StorageV2ReadObjectRequest)(nil), // 5: shutdown.StorageV2ReadObjectRequest - (*StorageV2ReadObjectResponse)(nil), // 6: shutdown.StorageV2ReadObjectResponse - (*StorageV2WriteObjectRequest)(nil), // 7: shutdown.StorageV2WriteObjectRequest - (*StorageV2WriteObjectResponse)(nil), // 8: shutdown.StorageV2WriteObjectResponse - (*StorageV2HeadObjectRequest)(nil), // 9: shutdown.StorageV2HeadObjectRequest - (*StorageV2HeadObjectResponse)(nil), // 10: shutdown.StorageV2HeadObjectResponse - (*StorageV2DeleteObjectRequest)(nil), // 11: shutdown.StorageV2DeleteObjectRequest - (*StorageV2DeleteObjectResponse)(nil), // 12: shutdown.StorageV2DeleteObjectResponse - (*StorageV2ListObjectsRequest)(nil), // 13: shutdown.StorageV2ListObjectsRequest - (*StorageV2ListObjectsResponse)(nil), // 14: shutdown.StorageV2ListObjectsResponse + (*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: shutdown.StorageV2Object.path:type_name -> shutdown.StorageV2Path - 2, // 1: shutdown.StorageV2Object.info:type_name -> shutdown.StorageV2ObjectInfo - 15, // 2: shutdown.StorageV2ObjectInfo.last_updated:type_name -> google.protobuf.Timestamp - 0, // 3: shutdown.StorageV2ReadObjectRequest.path:type_name -> shutdown.StorageV2Path - 0, // 4: shutdown.StorageV2WriteObjectRequest.path:type_name -> shutdown.StorageV2Path - 0, // 5: shutdown.StorageV2HeadObjectRequest.path:type_name -> shutdown.StorageV2Path - 2, // 6: shutdown.StorageV2HeadObjectResponse.info:type_name -> shutdown.StorageV2ObjectInfo - 0, // 7: shutdown.StorageV2DeleteObjectRequest.path:type_name -> shutdown.StorageV2Path - 0, // 8: shutdown.StorageV2ListObjectsRequest.path:type_name -> shutdown.StorageV2Path - 1, // 9: shutdown.StorageV2ListObjectsResponse.files:type_name -> shutdown.StorageV2Object - 3, // 10: shutdown.StorageV2.Init:input_type -> shutdown.StorageV2InitRequest - 5, // 11: shutdown.StorageV2.ReadObject:input_type -> shutdown.StorageV2ReadObjectRequest - 7, // 12: shutdown.StorageV2.WriteObject:input_type -> shutdown.StorageV2WriteObjectRequest - 9, // 13: shutdown.StorageV2.HeadObject:input_type -> shutdown.StorageV2HeadObjectRequest - 11, // 14: shutdown.StorageV2.DeleteObject:input_type -> shutdown.StorageV2DeleteObjectRequest - 13, // 15: shutdown.StorageV2.ListObjects:input_type -> shutdown.StorageV2ListObjectsRequest - 4, // 16: shutdown.StorageV2.Init:output_type -> shutdown.StorageV2InitResponse - 6, // 17: shutdown.StorageV2.ReadObject:output_type -> shutdown.StorageV2ReadObjectResponse - 8, // 18: shutdown.StorageV2.WriteObject:output_type -> shutdown.StorageV2WriteObjectResponse - 10, // 19: shutdown.StorageV2.HeadObject:output_type -> shutdown.StorageV2HeadObjectResponse - 12, // 20: shutdown.StorageV2.DeleteObject:output_type -> shutdown.StorageV2DeleteObjectResponse - 14, // 21: shutdown.StorageV2.ListObjects:output_type -> shutdown.StorageV2ListObjectsResponse + 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 diff --git a/integrations/storage/v2/definition/storage.proto b/integrations/storage/v2/definition/storage.proto index 29a038f94..fa641b2f7 100644 --- a/integrations/storage/v2/definition/storage.proto +++ b/integrations/storage/v2/definition/storage.proto @@ -20,7 +20,7 @@ syntax = "proto3"; -package shutdown; +package storage; import "google/protobuf/timestamp.proto"; diff --git a/integrations/storage/v2/definition/storage_grpc.pb.go b/integrations/storage/v2/definition/storage_grpc.pb.go index 646c6c356..799736731 100644 --- a/integrations/storage/v2/definition/storage_grpc.pb.go +++ b/integrations/storage/v2/definition/storage_grpc.pb.go @@ -46,7 +46,7 @@ func NewStorageV2Client(cc grpc.ClientConnInterface) StorageV2Client { func (c *storageV2Client) Init(ctx context.Context, in *StorageV2InitRequest, opts ...grpc.CallOption) (*StorageV2InitResponse, error) { out := new(StorageV2InitResponse) - err := c.cc.Invoke(ctx, "/shutdown.StorageV2/Init", in, out, opts...) + err := c.cc.Invoke(ctx, "/storage.StorageV2/Init", in, out, opts...) if err != nil { return nil, err } @@ -54,7 +54,7 @@ func (c *storageV2Client) Init(ctx context.Context, in *StorageV2InitRequest, op } 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], "/shutdown.StorageV2/ReadObject", opts...) + stream, err := c.cc.NewStream(ctx, &StorageV2_ServiceDesc.Streams[0], "/storage.StorageV2/ReadObject", opts...) if err != nil { return nil, err } @@ -86,7 +86,7 @@ func (x *storageV2ReadObjectClient) Recv() (*StorageV2ReadObjectResponse, error) } func (c *storageV2Client) WriteObject(ctx context.Context, opts ...grpc.CallOption) (StorageV2_WriteObjectClient, error) { - stream, err := c.cc.NewStream(ctx, &StorageV2_ServiceDesc.Streams[1], "/shutdown.StorageV2/WriteObject", opts...) + stream, err := c.cc.NewStream(ctx, &StorageV2_ServiceDesc.Streams[1], "/storage.StorageV2/WriteObject", opts...) if err != nil { return nil, err } @@ -121,7 +121,7 @@ func (x *storageV2WriteObjectClient) CloseAndRecv() (*StorageV2WriteObjectRespon func (c *storageV2Client) HeadObject(ctx context.Context, in *StorageV2HeadObjectRequest, opts ...grpc.CallOption) (*StorageV2HeadObjectResponse, error) { out := new(StorageV2HeadObjectResponse) - err := c.cc.Invoke(ctx, "/shutdown.StorageV2/HeadObject", in, out, opts...) + err := c.cc.Invoke(ctx, "/storage.StorageV2/HeadObject", in, out, opts...) if err != nil { return nil, err } @@ -130,7 +130,7 @@ func (c *storageV2Client) HeadObject(ctx context.Context, in *StorageV2HeadObjec func (c *storageV2Client) DeleteObject(ctx context.Context, in *StorageV2DeleteObjectRequest, opts ...grpc.CallOption) (*StorageV2DeleteObjectResponse, error) { out := new(StorageV2DeleteObjectResponse) - err := c.cc.Invoke(ctx, "/shutdown.StorageV2/DeleteObject", in, out, opts...) + err := c.cc.Invoke(ctx, "/storage.StorageV2/DeleteObject", in, out, opts...) if err != nil { return nil, err } @@ -138,7 +138,7 @@ func (c *storageV2Client) DeleteObject(ctx context.Context, in *StorageV2DeleteO } 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], "/shutdown.StorageV2/ListObjects", opts...) + stream, err := c.cc.NewStream(ctx, &StorageV2_ServiceDesc.Streams[2], "/storage.StorageV2/ListObjects", opts...) if err != nil { return nil, err } @@ -233,7 +233,7 @@ func _StorageV2_Init_Handler(srv interface{}, ctx context.Context, dec func(inte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/shutdown.StorageV2/Init", + FullMethod: "/storage.StorageV2/Init", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(StorageV2Server).Init(ctx, req.(*StorageV2InitRequest)) @@ -298,7 +298,7 @@ func _StorageV2_HeadObject_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/shutdown.StorageV2/HeadObject", + FullMethod: "/storage.StorageV2/HeadObject", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(StorageV2Server).HeadObject(ctx, req.(*StorageV2HeadObjectRequest)) @@ -316,7 +316,7 @@ func _StorageV2_DeleteObject_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/shutdown.StorageV2/DeleteObject", + FullMethod: "/storage.StorageV2/DeleteObject", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(StorageV2Server).DeleteObject(ctx, req.(*StorageV2DeleteObjectRequest)) @@ -349,7 +349,7 @@ func (x *storageV2ListObjectsServer) Send(m *StorageV2ListObjectsResponse) error // 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: "shutdown.StorageV2", + ServiceName: "storage.StorageV2", HandlerType: (*StorageV2Server)(nil), Methods: []grpc.MethodDesc{ { 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/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/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/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/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/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/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/logging/http.go b/pkg/logging/http.go new file mode 100644 index 000000000..16aa894ee --- /dev/null +++ b/pkg/logging/http.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 logging + +import ( + "net/http" + + "github.com/rs/zerolog" +) + +func HTTPRequestWrap(request *http.Request) Wrap { + return func(in *zerolog.Event) *zerolog.Event { + if request == nil { + return in + } + + in = in.Str("method", request.Method) + in = in.Str("url", request.RequestURI) + + return in + } +} diff --git a/pkg/server/server.go b/pkg/server/server.go index 907d39acf..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" @@ -108,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 != "" { serverLogger.Str("addr", cfg.Address).Str("secret", cfg.TLSSecretName).Str("secret-namespace", cfg.TLSSecretNamespace).Info("Using existing TLS Certificate") - 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) + fetcher = util.NewSecretTLSConfig(cli.Secrets(cfg.TLSSecretNamespace), cfg.TLSSecretName) } else { serverLogger.Str("addr", cfg.Address).Info("Using SelfSigned 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) - } + 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) } @@ -256,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/util/constants/profiles.go b/pkg/util/constants/profiles.go index 2669b47c6..63b7bb185 100644 --- a/pkg/util/constants/profiles.go +++ b/pkg/util/constants/profiles.go @@ -26,6 +26,11 @@ 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" 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/list.go b/pkg/util/list.go index 30e438d7d..afb752899 100644 --- a/pkg/util/list.go +++ b/pkg/util/list.go @@ -122,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 index 439189cc0..d2b2d3b38 100644 --- a/pkg/util/mod.go +++ b/pkg/util/mod.go @@ -22,16 +22,6 @@ package util func emptyMod[T any](_ *T) {} -func WithMods[T any](mods ...Mod[T]) Mod[T] { - return func(in *T) { - for _, m := range mods { - if m != nil { - m(in) - } - } - } -} - type Mod[T any] func(in *T) func (m Mod[T]) Optional() Mod[T] { @@ -47,3 +37,51 @@ func ApplyMods[T any](in *T, mods ...Mod[T]) { 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/refs.go b/pkg/util/refs.go index 9121c1b8e..c74ffb1e0 100644 --- a/pkg/util/refs.go +++ b/pkg/util/refs.go @@ -22,6 +22,8 @@ package util import ( "reflect" + + "github.com/pkg/errors" ) // NewPointer returns a reference to a copy of the pointer value @@ -135,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) 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 bbbcc147e..afd6d0c89 100644 --- a/pkg/util/tests/kubernetes.go +++ b/pkg/util/tests/kubernetes.go @@ -55,6 +55,7 @@ import ( 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" @@ -1506,13 +1507,8 @@ 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) 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/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/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/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(), + ), + ) +} From f16d663cdf331a748f4c99e8168afe3b3229b4de Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Sat, 14 Dec 2024 14:40:34 +0100 Subject: [PATCH 42/69] [Feature] [Platform] Add CA Integration propagation (#1782) --- CHANGELOG.md | 1 + docs/integration-sidecar.md | 8 +++- pkg/deployment/resources/arango_profiles.go | 53 ++++++++++++++++++++- 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b3f83bf62..e10442e00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ - (Feature) CertManager Integration - (Feature) (Networking) Gateway Options sync - (Feature) Webhooks +- (Feature) (Platform) Add CA Integration propagation ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/docs/integration-sidecar.md b/docs/integration-sidecar.md index 5e6b530da..102be9ba5 100644 --- a/docs/integration-sidecar.md +++ b/docs/integration-sidecar.md @@ -137,4 +137,10 @@ Example: `deployment` HTTP/S Endpoint of the ArangoDeployment Internal Service. -Example: `https://deployment.default.svc:8529` \ No newline at end of file +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` \ No newline at end of file diff --git a/pkg/deployment/resources/arango_profiles.go b/pkg/deployment/resources/arango_profiles.go index a533263fa..68937d19d 100644 --- a/pkg/deployment/resources/arango_profiles.go +++ b/pkg/deployment/resources/arango_profiles.go @@ -34,6 +34,8 @@ import ( 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" @@ -125,7 +127,10 @@ func (r *Resources) EnsureArangoProfiles(ctx context.Context, cachedStatus inspe integration, err := sidecar.NewIntegration(&schedulerContainerResourcesApi.Image{ Image: util.NewType(r.context.GetOperatorImage()), - }, spec.Integration.GetSidecar(), r.arangoDeploymentProfileTemplate(cachedStatus)) + }, spec.Integration.GetSidecar(), + r.arangoDeploymentProfileTemplate(cachedStatus), + r.arangoDeploymentCATemplate(), + ) if err != nil { return "", nil, err } @@ -220,6 +225,52 @@ func (r *Resources) arangoDeploymentProfileTemplate(cachedStatus inspectorInterf } } +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 From f80ad84cb962cc1d6d83d86403632464af4515b9 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Mon, 16 Dec 2024 18:48:35 +0100 Subject: [PATCH 43/69] [Maintenance] Use GoPretty for the Documentation (#1783) --- CHANGELOG.md | 1 + README.md | 134 +++++++------- docs/features/README.md | 76 ++++---- docs/generated/actions.md | 174 +++++++++--------- docs/generated/metrics/README.md | 72 ++++---- ...db_operator_agency_cache_health_present.md | 6 +- .../arangodb_operator_agency_cache_healthy.md | 6 +- .../arangodb_operator_agency_cache_leaders.md | 8 +- ...rator_agency_cache_member_commit_offset.md | 8 +- ...db_operator_agency_cache_member_serving.md | 8 +- .../arangodb_operator_agency_cache_present.md | 6 +- .../arangodb_operator_agency_cache_serving.md | 6 +- .../arangodb_operator_agency_errors.md | 6 +- .../arangodb_operator_agency_fetches.md | 6 +- .../metrics/arangodb_operator_agency_index.md | 6 +- ...arangodb_operator_deployment_conditions.md | 8 +- .../arangodb_operator_engine_assertions.md | 12 +- .../arangodb_operator_engine_ops_alerts.md | 12 +- ...angodb_operator_engine_panics_recovered.md | 4 +- ...erator_kubernetes_client_request_errors.md | 8 +- ...odb_operator_kubernetes_client_requests.md | 8 +- .../arangodb_operator_members_conditions.md | 10 +- ...members_unexpected_container_exit_codes.md | 16 +- .../arangodb_operator_objects_processed.md | 4 +- .../arangodb_operator_rebalancer_enabled.md | 6 +- ...ngodb_operator_rebalancer_moves_current.md | 6 +- ...angodb_operator_rebalancer_moves_failed.md | 6 +- ...odb_operator_rebalancer_moves_generated.md | 6 +- ...odb_operator_rebalancer_moves_succeeded.md | 6 +- ...tor_resources_arangodeployment_accepted.md | 6 +- ...urces_arangodeployment_immutable_errors.md | 6 +- ...r_resources_arangodeployment_propagated.md | 6 +- ...ources_arangodeployment_status_restores.md | 6 +- ...tor_resources_arangodeployment_uptodate.md | 6 +- ...rces_arangodeployment_validation_errors.md | 6 +- ...rces_arangodeploymentreplication_active.md | 6 +- ...rces_arangodeploymentreplication_failed.md | 6 +- ...esources_deployment_config_map_duration.md | 4 +- ...sources_deployment_config_map_inspected.md | 4 +- go.mod | 8 +- go.sum | 10 + internal/actions.go | 55 +++--- internal/md/column.go | 76 -------- internal/md/table.go | 145 --------------- internal/metrics.go | 106 +++++------ internal/readme.go | 151 +++++++-------- internal/readme_cli.go | 8 +- pkg/util/pretty/marsh_table.go | 146 +++++++++++++++ .../util/pretty/marsh_table_test.go | 23 ++- .../sections.go => pkg/util/pretty/replace.go | 4 +- {internal/md => pkg/util/pretty}/wrap.go | 4 +- pkg/util/tags.go | 68 +++++++ 52 files changed, 752 insertions(+), 743 deletions(-) delete mode 100644 internal/md/column.go delete mode 100644 internal/md/table.go create mode 100644 pkg/util/pretty/marsh_table.go rename internal/md/row.go => pkg/util/pretty/marsh_table_test.go (64%) rename internal/md/sections.go => pkg/util/pretty/replace.go (96%) rename {internal/md => pkg/util/pretty}/wrap.go (92%) create mode 100644 pkg/util/tags.go diff --git a/CHANGELOG.md b/CHANGELOG.md index e10442e00..8b47bc6d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ - (Feature) (Networking) Gateway Options sync - (Feature) Webhooks - (Feature) (Platform) Add CA Integration propagation +- (Maintenance) Use GoPretty for the Documentation ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/README.md b/README.md index 4482a8762..12a71956c 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,37 @@ 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.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 | [END_INJECT]: # (featuresCommunityTable) @@ -125,13 +125,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) diff --git a/docs/features/README.md b/docs/features/README.md index c59b17ffb..4d4a54c4f 100644 --- a/docs/features/README.md +++ b/docs/features/README.md @@ -6,47 +6,47 @@ 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.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 | ## 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/go.mod b/go.mod index b02eb624d..5c4ae039c 100644 --- a/go.mod +++ b/go.mod @@ -56,9 +56,9 @@ require ( github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.9.0 - golang.org/x/sync v0.8.0 + golang.org/x/sync v0.10.0 golang.org/x/sys v0.25.0 - golang.org/x/text v0.18.0 + golang.org/x/text v0.21.0 golang.org/x/time v0.5.0 google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 google.golang.org/grpc v1.65.0 @@ -75,6 +75,7 @@ require ( require ( github.com/Masterminds/semver/v3 v3.3.0 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 ) @@ -164,7 +165,7 @@ require ( 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.9 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect @@ -186,6 +187,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // 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 diff --git a/go.sum b/go.sum index ce87eb016..9615446a5 100644 --- a/go.sum +++ b/go.sum @@ -1234,6 +1234,8 @@ github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+h 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= @@ -1316,6 +1318,8 @@ github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APP 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= @@ -1431,6 +1435,8 @@ github.com/prometheus/prom2json v1.3.3 h1:IYfSMiZ7sSOfliBoo89PcufjWO4eAR0gznGcET 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/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -1749,6 +1755,8 @@ 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= @@ -1876,6 +1884,8 @@ 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= 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/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 644cde57e..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 } @@ -77,7 +77,7 @@ func GenerateCLIArangoDBOperatorOpsReadme(root string) error { readmeSections["arangodb_operator_ops_cmd_debug_package"] = section } - if err := md.ReplaceSectionsInFile(path.Join(root, "docs", "cli", "arangodb_operator_ops.md"), readmeSections); err != nil { + if err := pretty.ReplaceSectionsInFile(path.Join(root, "docs", "cli", "arangodb_operator_ops.md"), readmeSections); err != nil { return err } @@ -99,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/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/internal/md/row.go b/pkg/util/pretty/marsh_table_test.go similarity index 64% rename from internal/md/row.go rename to pkg/util/pretty/marsh_table_test.go index 451a3c46c..11c045505 100644 --- a/internal/md/row.go +++ b/pkg/util/pretty/marsh_table_test.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,4 +18,23 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package md +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/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 +} From 7f13420832adf70ddd7aa5d3259377ccc8b6cf35 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Wed, 18 Dec 2024 12:48:56 +0100 Subject: [PATCH 44/69] [Maintenance] Bump Kubernetes dependency to 1.31.2 (#1785) --- CHANGELOG.md | 1 + Makefile | 2 +- go.mod | 38 ++++++++++++++--------------- go.sum | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b47bc6d6..7bff2faf8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ - (Feature) Webhooks - (Feature) (Platform) Add CA Integration propagation - (Maintenance) Use GoPretty for the Documentation +- (Maintenance) Bump Kubernetes dependency to 1.31.2 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/Makefile b/Makefile index 0ebfab476..1ea3ce7b3 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ ifeq ($(shell uname),Darwin) endif KUBERNETES_VERSION_MINOR:=31 -KUBERNETES_VERSION_PATCH:=1 +KUBERNETES_VERSION_PATCH:=2 PROJECT := arangodb_operator SCRIPTDIR := $(shell pwd) diff --git a/go.mod b/go.mod index 5c4ae039c..a2b3f0ada 100644 --- a/go.mod +++ b/go.mod @@ -10,17 +10,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.31.1 - k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.31.1 - k8s.io/apimachinery => k8s.io/apimachinery v0.31.1 - k8s.io/apiserver => k8s.io/apiserver v0.31.1 - k8s.io/client-go => k8s.io/client-go v0.31.1 - k8s.io/cloud-provider => k8s.io/cloud-provider v0.31.1 - k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.31.1 + 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.31.1 - k8s.io/kubernetes => k8s.io/kubernetes v0.31.1 - k8s.io/metrics => k8s.io/metrics v0.31.1 + 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 ( @@ -57,17 +57,17 @@ require ( github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.9.0 golang.org/x/sync v0.10.0 - golang.org/x/sys v0.25.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/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 google.golang.org/grpc v1.65.0 google.golang.org/protobuf v1.34.2 gopkg.in/yaml.v3 v3.0.1 - k8s.io/api v0.31.1 - k8s.io/apiextensions-apiserver v0.31.1 - k8s.io/apimachinery v0.31.1 - k8s.io/client-go v0.31.1 + 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 ) @@ -207,17 +207,17 @@ require ( 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.27.0 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/net v0.26.0 // indirect golang.org/x/oauth2 v0.21.0 // indirect - golang.org/x/term v0.24.0 // indirect + golang.org/x/term v0.27.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // 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/apiserver v0.31.1 // indirect + k8s.io/apiserver v0.31.2 // indirect k8s.io/cli-runtime v0.31.1 // indirect - k8s.io/component-base 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 diff --git a/go.sum b/go.sum index 9615446a5..5b27a2a13 100644 --- a/go.sum +++ b/go.sum @@ -787,6 +787,8 @@ github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migc 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= @@ -798,6 +800,8 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy 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= @@ -907,8 +911,11 @@ github.com/coreos/go-iptables v0.4.3/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmeka 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/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= @@ -1104,6 +1111,8 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z 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= @@ -1193,11 +1202,15 @@ 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= @@ -1481,6 +1494,8 @@ github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0 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= @@ -1520,8 +1535,14 @@ github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go 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= @@ -1531,24 +1552,38 @@ 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= @@ -1571,6 +1606,8 @@ golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45 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= @@ -1586,6 +1623,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 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= @@ -1849,6 +1888,8 @@ 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.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1864,6 +1905,8 @@ 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= @@ -2297,6 +2340,8 @@ gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWM 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= @@ -2320,24 +2365,46 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 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= @@ -2397,6 +2464,8 @@ 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= From 50061844d83da31b41681953ad0b1335c753bcc9 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Thu, 19 Dec 2024 13:17:35 +0100 Subject: [PATCH 45/69] [Documentation] Remove Interactive args for the DebugPackage command (#1787) --- CHANGELOG.md | 1 + docs/how-to/debugging.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bff2faf8..e09bd295e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ - (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 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD 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 ``` From b9c340d27038a2f716ba54afe373a26abd374fce Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 3 Jan 2025 21:21:42 +0100 Subject: [PATCH 46/69] [Maintenance] PropagationMode Enum docs (#1789) --- CHANGELOG.md | 1 + Makefile | 3 + docs/api/ArangoDeployment.V1.md | 56 ++++++++++++----- .../v1/server_group_init_containers.go | 8 ++- .../v2alpha1/server_group_init_containers.go | 8 ++- .../database-deployment.schema.generated.yaml | 63 +++++++++++++++++++ pkg/deployment/reconcile/plan_builder_high.go | 12 ++-- 7 files changed, 129 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e09bd295e..5b14662cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ - (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 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/Makefile b/Makefile index 1ea3ce7b3..7fd17fff1 100644 --- a/Makefile +++ b/Makefile @@ -843,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" @@ -858,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" @@ -873,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" diff --git a/docs/api/ArangoDeployment.V1.md b/docs/api/ArangoDeployment.V1.md index da6cab973..2f558a065 100644 --- a/docs/api/ArangoDeployment.V1.md +++ b/docs/api/ArangoDeployment.V1.md @@ -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.43/pkg/apis/deployment/v1/server_group_init_containers.go#L93) Containers contains list of containers @@ -180,10 +180,14 @@ 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.43/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 @@ -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.43/pkg/apis/deployment/v1/server_group_init_containers.go#L93) Containers contains list of containers @@ -1246,10 +1250,14 @@ 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.43/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 @@ -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.43/pkg/apis/deployment/v1/server_group_init_containers.go#L93) Containers contains list of containers @@ -2180,10 +2188,14 @@ 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.43/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 @@ -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.43/pkg/apis/deployment/v1/server_group_init_containers.go#L93) Containers contains list of containers @@ -3246,10 +3258,14 @@ 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.43/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 @@ -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.43/pkg/apis/deployment/v1/server_group_init_containers.go#L93) Containers contains list of containers @@ -4923,10 +4939,14 @@ 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.43/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 @@ -6047,7 +6067,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.43/pkg/apis/deployment/v1/server_group_init_containers.go#L93) Containers contains list of containers @@ -6058,10 +6078,14 @@ 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.43/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 @@ -6973,7 +6997,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.43/pkg/apis/deployment/v1/server_group_init_containers.go#L93) Containers contains list of containers @@ -6984,10 +7008,14 @@ 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.43/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 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/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/crd/crds/database-deployment.schema.generated.yaml b/pkg/crd/crds/database-deployment.schema.generated.yaml index c5f11187a..f16523776 100644 --- a/pkg/crd/crds/database-deployment.schema.generated.yaml +++ b/pkg/crd/crds/database-deployment.schema.generated.yaml @@ -885,6 +885,9 @@ v1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -3150,6 +3153,9 @@ v1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -5333,6 +5339,9 @@ v1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -7598,6 +7607,9 @@ v1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -10974,6 +10986,9 @@ v1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -13300,6 +13315,9 @@ v1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -15476,6 +15494,9 @@ v1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -17752,6 +17773,9 @@ v1alpha: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -20017,6 +20041,9 @@ v1alpha: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -22200,6 +22227,9 @@ v1alpha: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -24465,6 +24495,9 @@ v1alpha: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -27841,6 +27874,9 @@ v1alpha: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -30167,6 +30203,9 @@ v1alpha: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -32343,6 +32382,9 @@ v1alpha: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -34619,6 +34661,9 @@ v2alpha1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -36884,6 +36929,9 @@ v2alpha1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -39067,6 +39115,9 @@ v2alpha1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -41332,6 +41383,9 @@ v2alpha1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -44708,6 +44762,9 @@ v2alpha1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -47034,6 +47091,9 @@ v2alpha1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: @@ -49210,6 +49270,9 @@ v2alpha1: type: array mode: description: Mode keep container replace mode + enum: + - update + - ignore type: string type: object internalPort: 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 From ba9ed23ac27893ea5ff08d1a7e045c86d5219a73 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Tue, 7 Jan 2025 10:46:20 +0100 Subject: [PATCH 47/69] [Feature] Deprecate AF Mode (#1581) --- CHANGELOG.md | 4 +- README.md | 46 ++++++++++--------- docs/cli/arangodb_operator.md | 43 ++++++++--------- docs/features/README.md | 3 +- internal/features.yaml | 8 ++++ ...iloverleadership.go => active-failover.go} | 16 ++++++- pkg/deployment/features/features.go | 24 ++++++++-- pkg/deployment/features/local.go | 40 ++++++++++++---- pkg/deployment/features/rebalancer.go | 4 +- pkg/deployment/features/version_3_10.go | 4 +- .../reconcile/plan_builder_rotate_upgrade.go | 20 +++++++- .../plan_builder_rotate_upgrade_decision.go | 8 ++-- .../plan_builder_rotate_upgrade_test.go | 4 +- pkg/deployment/resources/pod_creator.go | 6 ++- 14 files changed, 157 insertions(+), 73 deletions(-) rename pkg/deployment/features/{failoverleadership.go => active-failover.go} (69%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b14662cf..423fecd13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ - (Maintenance) Bump Kubernetes dependency to 1.31.2 - (Documentation) Remove Interactive args for the DebugPackage command - (Maintenance) PropagationMode Enum docs +- (Feature) Deprecate AF Mode ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD @@ -121,6 +122,7 @@ - (Feature) DebugPackage ArangoProfiles - (Feature) Scheduler CLI - (Feature) Parametrize ForceDelete timeout +<<<<<<< HEAD - (Feature) Scheduler BatchJob Integration Definition - (Feature) Scheduler CronJob Integration Definition - (Feature) Scheduler BatchJob Integration Service @@ -166,7 +168,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/README.md b/README.md index 12a71956c..0f8d82808 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ covers individual newer features separately. | [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 | +| [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 | @@ -110,6 +110,7 @@ covers individual newer features separately. | 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 | @@ -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) diff --git a/docs/cli/arangodb_operator.md b/docs/cli/arangodb_operator.md index b362f1117..63f39fa00 100644 --- a/docs/cli/arangodb_operator.md +++ b/docs/cli/arangodb_operator.md @@ -42,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) diff --git a/docs/features/README.md b/docs/features/README.md index 4d4a54c4f..8fc2c97d4 100644 --- a/docs/features/README.md +++ b/docs/features/README.md @@ -21,7 +21,7 @@ title: List of all features | [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 | +| [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 | @@ -31,6 +31,7 @@ title: List of all features | 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 | 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/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/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/resources/pod_creator.go b/pkg/deployment/resources/pod_creator.go index 2609f916b..a80fd48c3 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. @@ -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) From 5b68fdebf96debec09d4f348ed41115a96159386 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Tue, 7 Jan 2025 18:14:02 +0100 Subject: [PATCH 48/69] [Maintenace] Switch license to 2025 (#1791) --- .gitattributes | 3 ++- CHANGELOG.md | 1 + pkg/apis/analytics/v1alpha1/zz_generated.deepcopy.go | 2 +- pkg/apis/apps/v1/zz_generated.deepcopy.go | 2 +- pkg/apis/backup/v1/zz_generated.deepcopy.go | 2 +- pkg/apis/deployment/v1/zz_generated.deepcopy.go | 2 +- pkg/apis/deployment/v2alpha1/zz_generated.deepcopy.go | 2 +- pkg/apis/ml/v1alpha1/zz_generated.deepcopy.go | 2 +- pkg/apis/ml/v1beta1/zz_generated.deepcopy.go | 2 +- pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go | 2 +- pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go | 2 +- pkg/apis/replication/v1/zz_generated.deepcopy.go | 2 +- pkg/apis/replication/v2alpha1/zz_generated.deepcopy.go | 2 +- .../v1alpha1/container/resources/zz_generated.deepcopy.go | 2 +- pkg/apis/scheduler/v1alpha1/container/zz_generated.deepcopy.go | 2 +- .../scheduler/v1alpha1/pod/resources/zz_generated.deepcopy.go | 2 +- pkg/apis/scheduler/v1alpha1/pod/zz_generated.deepcopy.go | 2 +- pkg/apis/scheduler/v1alpha1/zz_generated.deepcopy.go | 2 +- .../v1beta1/container/resources/zz_generated.deepcopy.go | 2 +- pkg/apis/scheduler/v1beta1/container/zz_generated.deepcopy.go | 2 +- .../scheduler/v1beta1/integration/zz_generated.deepcopy.go | 2 +- .../scheduler/v1beta1/pod/resources/zz_generated.deepcopy.go | 2 +- pkg/apis/scheduler/v1beta1/pod/zz_generated.deepcopy.go | 2 +- pkg/apis/scheduler/v1beta1/policy/zz_generated.deepcopy.go | 2 +- pkg/apis/scheduler/v1beta1/zz_generated.deepcopy.go | 2 +- pkg/apis/shared/v1/zz_generated.deepcopy.go | 2 +- pkg/apis/storage/v1alpha/zz_generated.deepcopy.go | 2 +- pkg/generated/clientset/versioned/clientset.go | 2 +- pkg/generated/clientset/versioned/fake/clientset_generated.go | 2 +- pkg/generated/clientset/versioned/fake/doc.go | 2 +- pkg/generated/clientset/versioned/fake/register.go | 2 +- pkg/generated/clientset/versioned/scheme/doc.go | 2 +- pkg/generated/clientset/versioned/scheme/register.go | 2 +- .../versioned/typed/analytics/v1alpha1/analytics_client.go | 2 +- .../clientset/versioned/typed/analytics/v1alpha1/doc.go | 2 +- .../clientset/versioned/typed/analytics/v1alpha1/fake/doc.go | 2 +- .../typed/analytics/v1alpha1/fake/fake_analytics_client.go | 2 +- .../typed/analytics/v1alpha1/fake/fake_graphanalyticsengine.go | 2 +- .../versioned/typed/analytics/v1alpha1/generated_expansion.go | 2 +- .../versioned/typed/analytics/v1alpha1/graphanalyticsengine.go | 2 +- pkg/generated/clientset/versioned/typed/apps/v1/apps_client.go | 2 +- pkg/generated/clientset/versioned/typed/apps/v1/arangojob.go | 2 +- pkg/generated/clientset/versioned/typed/apps/v1/doc.go | 2 +- pkg/generated/clientset/versioned/typed/apps/v1/fake/doc.go | 2 +- .../clientset/versioned/typed/apps/v1/fake/fake_apps_client.go | 2 +- .../clientset/versioned/typed/apps/v1/fake/fake_arangojob.go | 2 +- .../clientset/versioned/typed/apps/v1/generated_expansion.go | 2 +- .../clientset/versioned/typed/backup/v1/arangobackup.go | 2 +- .../clientset/versioned/typed/backup/v1/arangobackuppolicy.go | 2 +- .../clientset/versioned/typed/backup/v1/backup_client.go | 2 +- pkg/generated/clientset/versioned/typed/backup/v1/doc.go | 2 +- pkg/generated/clientset/versioned/typed/backup/v1/fake/doc.go | 2 +- .../versioned/typed/backup/v1/fake/fake_arangobackup.go | 2 +- .../versioned/typed/backup/v1/fake/fake_arangobackuppolicy.go | 2 +- .../versioned/typed/backup/v1/fake/fake_backup_client.go | 2 +- .../clientset/versioned/typed/backup/v1/generated_expansion.go | 2 +- .../typed/deployment/v1/arangoclustersynchronization.go | 2 +- .../versioned/typed/deployment/v1/arangodeployment.go | 2 +- .../clientset/versioned/typed/deployment/v1/arangomember.go | 2 +- .../clientset/versioned/typed/deployment/v1/arangotask.go | 2 +- .../versioned/typed/deployment/v1/deployment_client.go | 2 +- pkg/generated/clientset/versioned/typed/deployment/v1/doc.go | 2 +- .../clientset/versioned/typed/deployment/v1/fake/doc.go | 2 +- .../deployment/v1/fake/fake_arangoclustersynchronization.go | 2 +- .../typed/deployment/v1/fake/fake_arangodeployment.go | 2 +- .../versioned/typed/deployment/v1/fake/fake_arangomember.go | 2 +- .../versioned/typed/deployment/v1/fake/fake_arangotask.go | 2 +- .../typed/deployment/v1/fake/fake_deployment_client.go | 2 +- .../versioned/typed/deployment/v1/generated_expansion.go | 2 +- .../typed/deployment/v2alpha1/arangoclustersynchronization.go | 2 +- .../versioned/typed/deployment/v2alpha1/arangodeployment.go | 2 +- .../versioned/typed/deployment/v2alpha1/arangomember.go | 2 +- .../versioned/typed/deployment/v2alpha1/arangotask.go | 2 +- .../versioned/typed/deployment/v2alpha1/deployment_client.go | 2 +- .../clientset/versioned/typed/deployment/v2alpha1/doc.go | 2 +- .../clientset/versioned/typed/deployment/v2alpha1/fake/doc.go | 2 +- .../v2alpha1/fake/fake_arangoclustersynchronization.go | 2 +- .../typed/deployment/v2alpha1/fake/fake_arangodeployment.go | 2 +- .../typed/deployment/v2alpha1/fake/fake_arangomember.go | 2 +- .../typed/deployment/v2alpha1/fake/fake_arangotask.go | 2 +- .../typed/deployment/v2alpha1/fake/fake_deployment_client.go | 2 +- .../versioned/typed/deployment/v2alpha1/generated_expansion.go | 2 +- .../clientset/versioned/typed/ml/v1alpha1/arangomlbatchjob.go | 2 +- .../clientset/versioned/typed/ml/v1alpha1/arangomlcronjob.go | 2 +- .../clientset/versioned/typed/ml/v1alpha1/arangomlextension.go | 2 +- .../clientset/versioned/typed/ml/v1alpha1/arangomlstorage.go | 2 +- pkg/generated/clientset/versioned/typed/ml/v1alpha1/doc.go | 2 +- .../clientset/versioned/typed/ml/v1alpha1/fake/doc.go | 2 +- .../versioned/typed/ml/v1alpha1/fake/fake_arangomlbatchjob.go | 2 +- .../versioned/typed/ml/v1alpha1/fake/fake_arangomlcronjob.go | 2 +- .../versioned/typed/ml/v1alpha1/fake/fake_arangomlextension.go | 2 +- .../versioned/typed/ml/v1alpha1/fake/fake_arangomlstorage.go | 2 +- .../versioned/typed/ml/v1alpha1/fake/fake_ml_client.go | 2 +- .../versioned/typed/ml/v1alpha1/generated_expansion.go | 2 +- .../clientset/versioned/typed/ml/v1alpha1/ml_client.go | 2 +- .../clientset/versioned/typed/ml/v1beta1/arangomlextension.go | 2 +- .../clientset/versioned/typed/ml/v1beta1/arangomlstorage.go | 2 +- pkg/generated/clientset/versioned/typed/ml/v1beta1/doc.go | 2 +- pkg/generated/clientset/versioned/typed/ml/v1beta1/fake/doc.go | 2 +- .../versioned/typed/ml/v1beta1/fake/fake_arangomlextension.go | 2 +- .../versioned/typed/ml/v1beta1/fake/fake_arangomlstorage.go | 2 +- .../versioned/typed/ml/v1beta1/fake/fake_ml_client.go | 2 +- .../versioned/typed/ml/v1beta1/generated_expansion.go | 2 +- .../clientset/versioned/typed/ml/v1beta1/ml_client.go | 2 +- .../versioned/typed/networking/v1alpha1/arangoroute.go | 2 +- .../clientset/versioned/typed/networking/v1alpha1/doc.go | 2 +- .../clientset/versioned/typed/networking/v1alpha1/fake/doc.go | 2 +- .../typed/networking/v1alpha1/fake/fake_arangoroute.go | 2 +- .../typed/networking/v1alpha1/fake/fake_networking_client.go | 2 +- .../versioned/typed/networking/v1alpha1/generated_expansion.go | 2 +- .../versioned/typed/networking/v1alpha1/networking_client.go | 2 +- .../versioned/typed/platform/v1alpha1/arangoplatformchart.go | 2 +- .../versioned/typed/platform/v1alpha1/arangoplatformstorage.go | 2 +- .../clientset/versioned/typed/platform/v1alpha1/doc.go | 2 +- .../clientset/versioned/typed/platform/v1alpha1/fake/doc.go | 2 +- .../typed/platform/v1alpha1/fake/fake_arangoplatformchart.go | 2 +- .../typed/platform/v1alpha1/fake/fake_arangoplatformstorage.go | 2 +- .../typed/platform/v1alpha1/fake/fake_platform_client.go | 2 +- .../versioned/typed/platform/v1alpha1/generated_expansion.go | 2 +- .../versioned/typed/platform/v1alpha1/platform_client.go | 2 +- .../typed/replication/v1/arangodeploymentreplication.go | 2 +- pkg/generated/clientset/versioned/typed/replication/v1/doc.go | 2 +- .../clientset/versioned/typed/replication/v1/fake/doc.go | 2 +- .../replication/v1/fake/fake_arangodeploymentreplication.go | 2 +- .../typed/replication/v1/fake/fake_replication_client.go | 2 +- .../versioned/typed/replication/v1/generated_expansion.go | 2 +- .../versioned/typed/replication/v1/replication_client.go | 2 +- .../typed/replication/v2alpha1/arangodeploymentreplication.go | 2 +- .../clientset/versioned/typed/replication/v2alpha1/doc.go | 2 +- .../clientset/versioned/typed/replication/v2alpha1/fake/doc.go | 2 +- .../v2alpha1/fake/fake_arangodeploymentreplication.go | 2 +- .../typed/replication/v2alpha1/fake/fake_replication_client.go | 2 +- .../typed/replication/v2alpha1/generated_expansion.go | 2 +- .../versioned/typed/replication/v2alpha1/replication_client.go | 2 +- .../versioned/typed/scheduler/v1alpha1/arangoprofile.go | 2 +- .../clientset/versioned/typed/scheduler/v1alpha1/doc.go | 2 +- .../clientset/versioned/typed/scheduler/v1alpha1/fake/doc.go | 2 +- .../typed/scheduler/v1alpha1/fake/fake_arangoprofile.go | 2 +- .../typed/scheduler/v1alpha1/fake/fake_scheduler_client.go | 2 +- .../versioned/typed/scheduler/v1alpha1/generated_expansion.go | 2 +- .../versioned/typed/scheduler/v1alpha1/scheduler_client.go | 2 +- .../versioned/typed/scheduler/v1beta1/arangoprofile.go | 2 +- .../typed/scheduler/v1beta1/arangoschedulerbatchjob.go | 2 +- .../typed/scheduler/v1beta1/arangoschedulercronjob.go | 2 +- .../typed/scheduler/v1beta1/arangoschedulerdeployment.go | 2 +- .../versioned/typed/scheduler/v1beta1/arangoschedulerpod.go | 2 +- .../clientset/versioned/typed/scheduler/v1beta1/doc.go | 2 +- .../clientset/versioned/typed/scheduler/v1beta1/fake/doc.go | 2 +- .../typed/scheduler/v1beta1/fake/fake_arangoprofile.go | 2 +- .../scheduler/v1beta1/fake/fake_arangoschedulerbatchjob.go | 2 +- .../scheduler/v1beta1/fake/fake_arangoschedulercronjob.go | 2 +- .../scheduler/v1beta1/fake/fake_arangoschedulerdeployment.go | 2 +- .../typed/scheduler/v1beta1/fake/fake_arangoschedulerpod.go | 2 +- .../typed/scheduler/v1beta1/fake/fake_scheduler_client.go | 2 +- .../versioned/typed/scheduler/v1beta1/generated_expansion.go | 2 +- .../versioned/typed/scheduler/v1beta1/scheduler_client.go | 2 +- .../versioned/typed/storage/v1alpha/arangolocalstorage.go | 2 +- pkg/generated/clientset/versioned/typed/storage/v1alpha/doc.go | 2 +- .../clientset/versioned/typed/storage/v1alpha/fake/doc.go | 2 +- .../typed/storage/v1alpha/fake/fake_arangolocalstorage.go | 2 +- .../typed/storage/v1alpha/fake/fake_storage_client.go | 2 +- .../versioned/typed/storage/v1alpha/generated_expansion.go | 2 +- .../versioned/typed/storage/v1alpha/storage_client.go | 2 +- .../informers/externalversions/analytics/interface.go | 2 +- .../analytics/v1alpha1/graphanalyticsengine.go | 2 +- .../informers/externalversions/analytics/v1alpha1/interface.go | 2 +- pkg/generated/informers/externalversions/apps/interface.go | 2 +- pkg/generated/informers/externalversions/apps/v1/arangojob.go | 2 +- pkg/generated/informers/externalversions/apps/v1/interface.go | 2 +- pkg/generated/informers/externalversions/backup/interface.go | 2 +- .../informers/externalversions/backup/v1/arangobackup.go | 2 +- .../informers/externalversions/backup/v1/arangobackuppolicy.go | 2 +- .../informers/externalversions/backup/v1/interface.go | 2 +- .../informers/externalversions/deployment/interface.go | 2 +- .../deployment/v1/arangoclustersynchronization.go | 2 +- .../externalversions/deployment/v1/arangodeployment.go | 2 +- .../informers/externalversions/deployment/v1/arangomember.go | 2 +- .../informers/externalversions/deployment/v1/arangotask.go | 2 +- .../informers/externalversions/deployment/v1/interface.go | 2 +- .../deployment/v2alpha1/arangoclustersynchronization.go | 2 +- .../externalversions/deployment/v2alpha1/arangodeployment.go | 2 +- .../externalversions/deployment/v2alpha1/arangomember.go | 2 +- .../externalversions/deployment/v2alpha1/arangotask.go | 2 +- .../externalversions/deployment/v2alpha1/interface.go | 2 +- pkg/generated/informers/externalversions/factory.go | 2 +- pkg/generated/informers/externalversions/generic.go | 2 +- .../externalversions/internalinterfaces/factory_interfaces.go | 2 +- pkg/generated/informers/externalversions/ml/interface.go | 2 +- .../informers/externalversions/ml/v1alpha1/arangomlbatchjob.go | 2 +- .../informers/externalversions/ml/v1alpha1/arangomlcronjob.go | 2 +- .../externalversions/ml/v1alpha1/arangomlextension.go | 2 +- .../informers/externalversions/ml/v1alpha1/arangomlstorage.go | 2 +- .../informers/externalversions/ml/v1alpha1/interface.go | 2 +- .../informers/externalversions/ml/v1beta1/arangomlextension.go | 2 +- .../informers/externalversions/ml/v1beta1/arangomlstorage.go | 2 +- .../informers/externalversions/ml/v1beta1/interface.go | 2 +- .../informers/externalversions/networking/interface.go | 2 +- .../externalversions/networking/v1alpha1/arangoroute.go | 2 +- .../externalversions/networking/v1alpha1/interface.go | 2 +- pkg/generated/informers/externalversions/platform/interface.go | 2 +- .../externalversions/platform/v1alpha1/arangoplatformchart.go | 2 +- .../platform/v1alpha1/arangoplatformstorage.go | 2 +- .../informers/externalversions/platform/v1alpha1/interface.go | 2 +- .../informers/externalversions/replication/interface.go | 2 +- .../replication/v1/arangodeploymentreplication.go | 2 +- .../informers/externalversions/replication/v1/interface.go | 2 +- .../replication/v2alpha1/arangodeploymentreplication.go | 2 +- .../externalversions/replication/v2alpha1/interface.go | 2 +- .../informers/externalversions/scheduler/interface.go | 2 +- .../externalversions/scheduler/v1alpha1/arangoprofile.go | 2 +- .../informers/externalversions/scheduler/v1alpha1/interface.go | 2 +- .../externalversions/scheduler/v1beta1/arangoprofile.go | 2 +- .../scheduler/v1beta1/arangoschedulerbatchjob.go | 2 +- .../scheduler/v1beta1/arangoschedulercronjob.go | 2 +- .../scheduler/v1beta1/arangoschedulerdeployment.go | 2 +- .../externalversions/scheduler/v1beta1/arangoschedulerpod.go | 2 +- .../informers/externalversions/scheduler/v1beta1/interface.go | 2 +- pkg/generated/informers/externalversions/storage/interface.go | 2 +- .../externalversions/storage/v1alpha/arangolocalstorage.go | 2 +- .../informers/externalversions/storage/v1alpha/interface.go | 2 +- .../listers/analytics/v1alpha1/expansion_generated.go | 2 +- .../listers/analytics/v1alpha1/graphanalyticsengine.go | 2 +- pkg/generated/listers/apps/v1/arangojob.go | 2 +- pkg/generated/listers/apps/v1/expansion_generated.go | 2 +- pkg/generated/listers/backup/v1/arangobackup.go | 2 +- pkg/generated/listers/backup/v1/arangobackuppolicy.go | 2 +- pkg/generated/listers/backup/v1/expansion_generated.go | 2 +- .../listers/deployment/v1/arangoclustersynchronization.go | 2 +- pkg/generated/listers/deployment/v1/arangodeployment.go | 2 +- pkg/generated/listers/deployment/v1/arangomember.go | 2 +- pkg/generated/listers/deployment/v1/arangotask.go | 2 +- pkg/generated/listers/deployment/v1/expansion_generated.go | 2 +- .../deployment/v2alpha1/arangoclustersynchronization.go | 2 +- pkg/generated/listers/deployment/v2alpha1/arangodeployment.go | 2 +- pkg/generated/listers/deployment/v2alpha1/arangomember.go | 2 +- pkg/generated/listers/deployment/v2alpha1/arangotask.go | 2 +- .../listers/deployment/v2alpha1/expansion_generated.go | 2 +- pkg/generated/listers/ml/v1alpha1/arangomlbatchjob.go | 2 +- pkg/generated/listers/ml/v1alpha1/arangomlcronjob.go | 2 +- pkg/generated/listers/ml/v1alpha1/arangomlextension.go | 2 +- pkg/generated/listers/ml/v1alpha1/arangomlstorage.go | 2 +- pkg/generated/listers/ml/v1alpha1/expansion_generated.go | 2 +- pkg/generated/listers/ml/v1beta1/arangomlextension.go | 2 +- pkg/generated/listers/ml/v1beta1/arangomlstorage.go | 2 +- pkg/generated/listers/ml/v1beta1/expansion_generated.go | 2 +- pkg/generated/listers/networking/v1alpha1/arangoroute.go | 2 +- .../listers/networking/v1alpha1/expansion_generated.go | 2 +- pkg/generated/listers/platform/v1alpha1/arangoplatformchart.go | 2 +- .../listers/platform/v1alpha1/arangoplatformstorage.go | 2 +- pkg/generated/listers/platform/v1alpha1/expansion_generated.go | 2 +- .../listers/replication/v1/arangodeploymentreplication.go | 2 +- pkg/generated/listers/replication/v1/expansion_generated.go | 2 +- .../replication/v2alpha1/arangodeploymentreplication.go | 2 +- .../listers/replication/v2alpha1/expansion_generated.go | 2 +- pkg/generated/listers/scheduler/v1alpha1/arangoprofile.go | 2 +- .../listers/scheduler/v1alpha1/expansion_generated.go | 2 +- pkg/generated/listers/scheduler/v1beta1/arangoprofile.go | 2 +- .../listers/scheduler/v1beta1/arangoschedulerbatchjob.go | 2 +- .../listers/scheduler/v1beta1/arangoschedulercronjob.go | 2 +- .../listers/scheduler/v1beta1/arangoschedulerdeployment.go | 2 +- pkg/generated/listers/scheduler/v1beta1/arangoschedulerpod.go | 2 +- pkg/generated/listers/scheduler/v1beta1/expansion_generated.go | 2 +- pkg/generated/listers/storage/v1alpha/arangolocalstorage.go | 2 +- pkg/generated/listers/storage/v1alpha/expansion_generated.go | 2 +- pkg/operatorV2/handler_p0.generated.go | 2 +- pkg/operatorV2/handler_p1.generated.go | 2 +- pkg/operatorV2/handler_p2.generated.go | 2 +- pkg/operatorV2/handler_p3.generated.go | 2 +- pkg/operatorV2/handler_p4.generated.go | 2 +- pkg/operatorV2/handler_p5.generated.go | 2 +- pkg/operatorV2/handler_p6.generated.go | 2 +- pkg/operatorV2/handler_p7.generated.go | 2 +- pkg/operatorV2/handler_p8.generated.go | 2 +- pkg/operatorV2/handler_p9.generated.go | 2 +- tools/codegen/license-header.txt | 2 +- 275 files changed, 276 insertions(+), 274 deletions(-) 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/CHANGELOG.md b/CHANGELOG.md index 423fecd13..3328d3638 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,7 @@ - (Documentation) Remove Interactive args for the DebugPackage command - (Maintenance) PropagationMode Enum docs - (Feature) Deprecate AF Mode +- (Maintenance) Switch License to 2025 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD 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/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/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/zz_generated.deepcopy.go b/pkg/apis/ml/v1beta1/zz_generated.deepcopy.go index ee09100a2..1ea0c1108 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. diff --git a/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go index 1702fa4bc..7058314e5 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. diff --git a/pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go index eed78e47e..a325e8aa6 100644 --- a/pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/platform/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/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/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/v1/zz_generated.deepcopy.go b/pkg/apis/shared/v1/zz_generated.deepcopy.go index 2940a876b..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. 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/generated/clientset/versioned/clientset.go b/pkg/generated/clientset/versioned/clientset.go index ee030d823..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. diff --git a/pkg/generated/clientset/versioned/fake/clientset_generated.go b/pkg/generated/clientset/versioned/fake/clientset_generated.go index 279d9943b..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. 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 ebd2e5994..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. 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 adb58206b..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. 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 4c7521a98..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. 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 fc879c3e7..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. 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 c4a7e3594..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. 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 a8004a682..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. 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 004484e76..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. diff --git a/pkg/generated/clientset/versioned/typed/backup/v1/arangobackuppolicy.go b/pkg/generated/clientset/versioned/typed/backup/v1/arangobackuppolicy.go index 7438f03ba..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. 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 590321ff2..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. 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 b8202e1c4..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. 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 2f755d165..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. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/arangodeployment.go b/pkg/generated/clientset/versioned/typed/deployment/v1/arangodeployment.go index 7463f2987..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. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/arangomember.go b/pkg/generated/clientset/versioned/typed/deployment/v1/arangomember.go index c94a5519c..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. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v1/arangotask.go b/pkg/generated/clientset/versioned/typed/deployment/v1/arangotask.go index 5ac3ae6b0..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. 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 dae624cc7..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. 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 9fc2a2ecc..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. 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 6c1bd43ba..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. 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 2d9d1ce64..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. 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 54fbf66ed..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. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangodeployment.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangodeployment.go index 85754bb08..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. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangomember.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangomember.go index 878a57b08..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. diff --git a/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangotask.go b/pkg/generated/clientset/versioned/typed/deployment/v2alpha1/arangotask.go index e28ac7187..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. 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 8f6422d4e..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. 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 1533324cd..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. 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 43ce713e1..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. 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 0963e77d9..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. 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 40211c527..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. diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlcronjob.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlcronjob.go index a53beadb7..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. diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlextension.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlextension.go index 1f49d52a1..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. diff --git a/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlstorage.go b/pkg/generated/clientset/versioned/typed/ml/v1alpha1/arangomlstorage.go index c86092cec..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. 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 4adb6880b..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. 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 e1775cef3..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. 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 cc62ff07c..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. 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 f200c5b2b..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. 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 22608a295..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. diff --git a/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlstorage.go b/pkg/generated/clientset/versioned/typed/ml/v1beta1/arangomlstorage.go index 10fadc48f..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. 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 ddea7663c..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. 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 03f59d0fb..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. 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 159303b61..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. 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 0454b0d00..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. 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 index 44d6495a9..48fa466da 100644 --- a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformchart.go +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformchart.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/arangoplatformstorage.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformstorage.go index 11034f8e1..9e496bbb6 100644 --- a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformstorage.go +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformstorage.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/doc.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/doc.go index f45dab6c5..2ad43a88a 100644 --- a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/doc.go +++ b/pkg/generated/clientset/versioned/typed/platform/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/platform/v1alpha1/fake/doc.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/doc.go index cc487d814..cb60dd032 100644 --- a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/doc.go +++ b/pkg/generated/clientset/versioned/typed/platform/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/platform/v1alpha1/fake/fake_arangoplatformchart.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformchart.go index 9f10e028d..c9ce234b1 100644 --- a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformchart.go +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformchart.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/fake/fake_arangoplatformstorage.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformstorage.go index 746fdf899..a01131f94 100644 --- a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformstorage.go +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformstorage.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/fake/fake_platform_client.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_platform_client.go index 0942ded58..6a3eb7f6a 100644 --- 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 @@ -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/generated_expansion.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/generated_expansion.go index ecd4c552c..03e6342de 100644 --- a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/generated_expansion.go +++ b/pkg/generated/clientset/versioned/typed/platform/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/platform/v1alpha1/platform_client.go b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/platform_client.go index 9825a5e0e..b437c4137 100644 --- a/pkg/generated/clientset/versioned/typed/platform/v1alpha1/platform_client.go +++ b/pkg/generated/clientset/versioned/typed/platform/v1alpha1/platform_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/arangodeploymentreplication.go b/pkg/generated/clientset/versioned/typed/replication/v1/arangodeploymentreplication.go index b8df5c12b..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. 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 3fe5228e0..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. 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 31586b064..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. 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 eeef822a4..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. 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 62cee9225..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. 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 a00a44622..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. 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 66ef3e278..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. diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerbatchjob.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerbatchjob.go index 8a516e3f5..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. diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulercronjob.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulercronjob.go index 23acfd96e..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. diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerdeployment.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerdeployment.go index 702f30e9f..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. diff --git a/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerpod.go b/pkg/generated/clientset/versioned/typed/scheduler/v1beta1/arangoschedulerpod.go index 71939a237..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. 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 38675965a..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. 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 4988c00d9..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. 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 727ee379b..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. 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 ba6d76840..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. 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 1ccfe08cb..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. 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 3de58671f..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. 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 336cca367..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. 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 a557b93a2..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. diff --git a/pkg/generated/informers/externalversions/generic.go b/pkg/generated/informers/externalversions/generic.go index af370ff0f..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. 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 index 8b92b8640..013b8b853 100644 --- a/pkg/generated/informers/externalversions/platform/interface.go +++ b/pkg/generated/informers/externalversions/platform/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/v1alpha1/arangoplatformchart.go b/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformchart.go index d57a8961b..b1d2bf506 100644 --- a/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformchart.go +++ b/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformchart.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/v1alpha1/arangoplatformstorage.go b/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformstorage.go index 5458fb7df..db7270268 100644 --- a/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformstorage.go +++ b/pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformstorage.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/v1alpha1/interface.go b/pkg/generated/informers/externalversions/platform/v1alpha1/interface.go index ecd0dfa66..1b54a3fc4 100644 --- a/pkg/generated/informers/externalversions/platform/v1alpha1/interface.go +++ b/pkg/generated/informers/externalversions/platform/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/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 3cfe50505..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. diff --git a/pkg/generated/listers/apps/v1/arangojob.go b/pkg/generated/listers/apps/v1/arangojob.go index c7325e3fa..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. 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 a54ff84dd..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. diff --git a/pkg/generated/listers/backup/v1/arangobackuppolicy.go b/pkg/generated/listers/backup/v1/arangobackuppolicy.go index 4cb870a4f..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. 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 fe34f3792..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. diff --git a/pkg/generated/listers/deployment/v1/arangodeployment.go b/pkg/generated/listers/deployment/v1/arangodeployment.go index e7c7db277..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. diff --git a/pkg/generated/listers/deployment/v1/arangomember.go b/pkg/generated/listers/deployment/v1/arangomember.go index 629952edf..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. diff --git a/pkg/generated/listers/deployment/v1/arangotask.go b/pkg/generated/listers/deployment/v1/arangotask.go index 6fe5a9cd9..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. 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 6110eeee0..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. diff --git a/pkg/generated/listers/deployment/v2alpha1/arangodeployment.go b/pkg/generated/listers/deployment/v2alpha1/arangodeployment.go index 33f9c67a2..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. diff --git a/pkg/generated/listers/deployment/v2alpha1/arangomember.go b/pkg/generated/listers/deployment/v2alpha1/arangomember.go index 2087c5393..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. diff --git a/pkg/generated/listers/deployment/v2alpha1/arangotask.go b/pkg/generated/listers/deployment/v2alpha1/arangotask.go index 161b1bf95..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. 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 4a1bbe6a0..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. diff --git a/pkg/generated/listers/ml/v1alpha1/arangomlcronjob.go b/pkg/generated/listers/ml/v1alpha1/arangomlcronjob.go index 2f96658ee..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. diff --git a/pkg/generated/listers/ml/v1alpha1/arangomlextension.go b/pkg/generated/listers/ml/v1alpha1/arangomlextension.go index af0208d6c..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. diff --git a/pkg/generated/listers/ml/v1alpha1/arangomlstorage.go b/pkg/generated/listers/ml/v1alpha1/arangomlstorage.go index 4537182ca..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. 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 ca225c3dd..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. diff --git a/pkg/generated/listers/ml/v1beta1/arangomlstorage.go b/pkg/generated/listers/ml/v1beta1/arangomlstorage.go index 44e05a651..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. 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 ac8bd7027..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. 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 index 8c43e7c2a..d7ab993fd 100644 --- a/pkg/generated/listers/platform/v1alpha1/arangoplatformchart.go +++ b/pkg/generated/listers/platform/v1alpha1/arangoplatformchart.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/arangoplatformstorage.go b/pkg/generated/listers/platform/v1alpha1/arangoplatformstorage.go index 30318f3eb..92a66801f 100644 --- a/pkg/generated/listers/platform/v1alpha1/arangoplatformstorage.go +++ b/pkg/generated/listers/platform/v1alpha1/arangoplatformstorage.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/expansion_generated.go b/pkg/generated/listers/platform/v1alpha1/expansion_generated.go index 66f835ad4..c7079c637 100644 --- a/pkg/generated/listers/platform/v1alpha1/expansion_generated.go +++ b/pkg/generated/listers/platform/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/replication/v1/arangodeploymentreplication.go b/pkg/generated/listers/replication/v1/arangodeploymentreplication.go index a437bc59a..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. 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 0a8aa9ab3..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. 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 02e6294ff..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. 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 6a96724e6..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. diff --git a/pkg/generated/listers/scheduler/v1beta1/arangoschedulerbatchjob.go b/pkg/generated/listers/scheduler/v1beta1/arangoschedulerbatchjob.go index 4c92637cf..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. diff --git a/pkg/generated/listers/scheduler/v1beta1/arangoschedulercronjob.go b/pkg/generated/listers/scheduler/v1beta1/arangoschedulercronjob.go index ebf8a66c6..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. diff --git a/pkg/generated/listers/scheduler/v1beta1/arangoschedulerdeployment.go b/pkg/generated/listers/scheduler/v1beta1/arangoschedulerdeployment.go index 146a060a4..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. diff --git a/pkg/generated/listers/scheduler/v1beta1/arangoschedulerpod.go b/pkg/generated/listers/scheduler/v1beta1/arangoschedulerpod.go index 0b8a73661..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. 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 908ec0097..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. 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/operatorV2/handler_p0.generated.go b/pkg/operatorV2/handler_p0.generated.go index f29852614..e91c58db9 100644 --- a/pkg/operatorV2/handler_p0.generated.go +++ b/pkg/operatorV2/handler_p0.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/operatorV2/handler_p1.generated.go b/pkg/operatorV2/handler_p1.generated.go index 381d562d2..fbaf3b77a 100644 --- a/pkg/operatorV2/handler_p1.generated.go +++ b/pkg/operatorV2/handler_p1.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/operatorV2/handler_p2.generated.go b/pkg/operatorV2/handler_p2.generated.go index 5176b8cab..065132334 100644 --- a/pkg/operatorV2/handler_p2.generated.go +++ b/pkg/operatorV2/handler_p2.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/operatorV2/handler_p3.generated.go b/pkg/operatorV2/handler_p3.generated.go index 31b05f6b2..f51cd529f 100644 --- a/pkg/operatorV2/handler_p3.generated.go +++ b/pkg/operatorV2/handler_p3.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/operatorV2/handler_p4.generated.go b/pkg/operatorV2/handler_p4.generated.go index b1249dcec..5be593055 100644 --- a/pkg/operatorV2/handler_p4.generated.go +++ b/pkg/operatorV2/handler_p4.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/operatorV2/handler_p5.generated.go b/pkg/operatorV2/handler_p5.generated.go index b8803f296..a1d1c1562 100644 --- a/pkg/operatorV2/handler_p5.generated.go +++ b/pkg/operatorV2/handler_p5.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/operatorV2/handler_p6.generated.go b/pkg/operatorV2/handler_p6.generated.go index 5811317f2..a8d31b938 100644 --- a/pkg/operatorV2/handler_p6.generated.go +++ b/pkg/operatorV2/handler_p6.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/operatorV2/handler_p7.generated.go b/pkg/operatorV2/handler_p7.generated.go index edd4fe844..17b2691f4 100644 --- a/pkg/operatorV2/handler_p7.generated.go +++ b/pkg/operatorV2/handler_p7.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/operatorV2/handler_p8.generated.go b/pkg/operatorV2/handler_p8.generated.go index 72c210d3e..60dd2ee55 100644 --- a/pkg/operatorV2/handler_p8.generated.go +++ b/pkg/operatorV2/handler_p8.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/operatorV2/handler_p9.generated.go b/pkg/operatorV2/handler_p9.generated.go index d21ed0f0e..b85aeb016 100644 --- a/pkg/operatorV2/handler_p9.generated.go +++ b/pkg/operatorV2/handler_p9.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/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. From 3bbe1c54408eddf4feed66770277350d6f657084 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Wed, 8 Jan 2025 10:57:14 +0100 Subject: [PATCH 49/69] [Feature] Migrate Storage V1 to CE (#1790) --- .golangci.yaml | 8 + CHANGELOG.md | 1 + README.md | 2 +- docs/cli/arangodb_operator.md | 2 +- go.mod | 24 +- go.sum | 20 + .../storage/v1}/configuration.go | 53 +- .../storage/v1/definition}/consts.go | 4 +- .../storage/v1/shared/s3}/configuration.go | 16 +- .../storage/v1/shared/s3/folder_counter.go | 65 ++ .../v1/shared/s3/folder_counter_test.go | 99 +++ integrations/storage/v1/shared/s3/id.go | 32 + integrations/storage/v1/shared/s3/impl.go | 142 +++ .../storage/v1/shared/s3/impl_methods.go | 829 ++++++++++++++++++ .../storage/v1/shared/s3/impl_test.go | 314 +++++++ integrations/storage/v1/shared/s3/io.go | 180 ++++ integrations/storage/v1/shared/s3/logger.go | 25 + integrations/storage/v1/shared/s3/object.go | 43 + .../storage/v1/shared/s3/suite_test.go | 20 +- integrations/storage/v1/storage.go | 42 + integrations/storage/v2/shared/s3/io_test.go | 43 +- integrations/storage/v2/suite_test.go | 42 +- pkg/deployment/resources/arango_profiles.go | 15 +- .../sidecar/integration.storage.v1.go | 286 ++++++ .../sidecar/integration.storage.v2.go | 6 +- pkg/integrations/storage_v1.go | 32 +- pkg/util/tests/aws.go | 69 ++ 27 files changed, 2265 insertions(+), 149 deletions(-) rename {pkg/ml/storage/s3 => integrations/storage/v1}/configuration.go (53%) rename {pkg/ml/storage => integrations/storage/v1/definition}/consts.go (90%) rename {pkg/ml/storage => integrations/storage/v1/shared/s3}/configuration.go (77%) create mode 100644 integrations/storage/v1/shared/s3/folder_counter.go create mode 100644 integrations/storage/v1/shared/s3/folder_counter_test.go create mode 100644 integrations/storage/v1/shared/s3/id.go create mode 100644 integrations/storage/v1/shared/s3/impl.go create mode 100644 integrations/storage/v1/shared/s3/impl_methods.go create mode 100644 integrations/storage/v1/shared/s3/impl_test.go create mode 100644 integrations/storage/v1/shared/s3/io.go create mode 100644 integrations/storage/v1/shared/s3/logger.go create mode 100644 integrations/storage/v1/shared/s3/object.go rename pkg/ml/storage/service.community.go => integrations/storage/v1/shared/s3/suite_test.go (63%) create mode 100644 integrations/storage/v1/storage.go create mode 100644 pkg/integrations/sidecar/integration.storage.v1.go create mode 100644 pkg/util/tests/aws.go diff --git a/.golangci.yaml b/.golangci.yaml index 77ba09fc0..78a74808d 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -57,6 +57,14 @@ 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 diff --git a/CHANGELOG.md b/CHANGELOG.md index 3328d3638..0634c12ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,7 @@ - (Maintenance) PropagationMode Enum docs - (Feature) Deprecate AF Mode - (Maintenance) Switch License to 2025 +- (Feature) Migrate Storage V1 to CE ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/README.md b/README.md index 0f8d82808..8c4f34e3f 100644 --- a/README.md +++ b/README.md @@ -197,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, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, 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.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 diff --git a/docs/cli/arangodb_operator.md b/docs/cli/arangodb_operator.md index 63f39fa00..074cc3c2b 100644 --- a/docs/cli/arangodb_operator.md +++ b/docs/cli/arangodb_operator.md @@ -82,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, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, 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.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 diff --git a/go.mod b/go.mod index a2b3f0ada..e96d89907 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,6 @@ module github.com/arangodb/kube-arangodb -go 1.22.0 - -toolchain go1.22.7 +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 @@ -55,14 +53,14 @@ require ( github.com/rs/zerolog v1.19.0 github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.9.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/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 - google.golang.org/grpc v1.65.0 - google.golang.org/protobuf v1.34.2 + 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.31.2 k8s.io/apiextensions-apiserver v0.31.2 @@ -74,13 +72,15 @@ require ( 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.15.0 // indirect + 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 @@ -100,7 +100,7 @@ require ( 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-20240423153145-555b57ec207b // 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 @@ -208,10 +208,10 @@ require ( go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect golang.org/x/arch v0.3.0 // indirect golang.org/x/crypto v0.31.0 // indirect - golang.org/x/net v0.26.0 // indirect - golang.org/x/oauth2 v0.21.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-20240528184218-531527333157 // 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 diff --git a/go.sum b/go.sum index 5b27a2a13..609882be3 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ 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= @@ -813,8 +815,12 @@ github.com/arangodb-helper/go-helper v0.4.2/go.mod h1:RHgEwQTFWdJ9wFDGUCgUZzaz9N 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= @@ -899,6 +905,8 @@ github.com/cncf/xds/go v0.0.0-20230428030218-4003588d1b74/go.mod h1:eXthEFrGJvWH 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= @@ -1740,6 +1748,8 @@ 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.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1774,6 +1784,8 @@ 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= @@ -2248,6 +2260,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5/go. 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= @@ -2260,6 +2274,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5/go. 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= @@ -2307,6 +2323,8 @@ google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt 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= @@ -2328,6 +2346,8 @@ google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw 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= diff --git a/pkg/ml/storage/s3/configuration.go b/integrations/storage/v1/configuration.go similarity index 53% rename from pkg/ml/storage/s3/configuration.go rename to integrations/storage/v1/configuration.go index 4cc33344a..a6fd59084 100644 --- a/pkg/ml/storage/s3/configuration.go +++ b/integrations/storage/v1/configuration.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. @@ -18,31 +18,42 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package s3 +package v1 -import "github.com/arangodb/kube-arangodb/pkg/util/errors" +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 { - 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 + Type ConfigurationType + + S3 pbImplStorageV1SharedS3.Configuration } 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.Endpoint == "" { - return errors.Errorf("Endpoint is not defined") - } 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/v1/definition/consts.go similarity index 90% rename from pkg/ml/storage/consts.go rename to integrations/storage/v1/definition/consts.go index a170c7072..d8303c0c9 100644 --- a/pkg/ml/storage/consts.go +++ b/integrations/storage/v1/definition/consts.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. @@ -18,6 +18,6 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package storage +package definition const Name = "storage.v1" diff --git a/pkg/ml/storage/configuration.go b/integrations/storage/v1/shared/s3/configuration.go similarity index 77% rename from pkg/ml/storage/configuration.go rename to integrations/storage/v1/shared/s3/configuration.go index 578519bed..87e3c5347 100644 --- a/pkg/ml/storage/configuration.go +++ b/integrations/storage/v1/shared/s3/configuration.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. @@ -18,20 +18,14 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package storage +package s3 import ( - "github.com/arangodb/kube-arangodb/pkg/ml/storage/s3" -) - -type Type string - -const ( - S3 = Type("s3") + awsHelper "github.com/arangodb/kube-arangodb/pkg/util/aws" ) type Configuration struct { - Type Type + BucketName string - S3 s3.Configuration + 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/pkg/ml/storage/service.community.go b/integrations/storage/v1/shared/s3/suite_test.go similarity index 63% rename from pkg/ml/storage/service.community.go rename to integrations/storage/v1/shared/s3/suite_test.go index 2bd609d7e..1a50da100 100644 --- a/pkg/ml/storage/service.community.go +++ b/integrations/storage/v1/shared/s3/suite_test.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,19 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -//go:build !enterprise - -package storage +package s3 import ( - "context" + "testing" - "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/svc" + "github.com/arangodb/kube-arangodb/pkg/util/tests" ) -func NewService(_ context.Context, _ Configuration) (svc.Handler, error) { - return nil, errors.New("this service is available only in enterprise edition of operator") +func getClient(t *testing.T) Configuration { + var scfg Configuration + + scfg.Client = tests.GetAWSClientConfig(t) + scfg.BucketName = tests.GetAWSS3Bucket(t) + + return scfg } diff --git a/integrations/storage/v1/storage.go b/integrations/storage/v1/storage.go new file mode 100644 index 000000000..82e60b68c --- /dev/null +++ b/integrations/storage/v1/storage.go @@ -0,0 +1,42 @@ +// +// 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" + "github.com/arangodb/kube-arangodb/pkg/util/errors" + "github.com/arangodb/kube-arangodb/pkg/util/svc" +) + +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/shared/s3/io_test.go b/integrations/storage/v2/shared/s3/io_test.go index 999d71bc7..7a950a624 100644 --- a/integrations/storage/v2/shared/s3/io_test.go +++ b/integrations/storage/v2/shared/s3/io_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. @@ -31,45 +31,14 @@ import ( pbImplStorageV2Shared "github.com/arangodb/kube-arangodb/integrations/storage/v2/shared" "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" + "github.com/arangodb/kube-arangodb/pkg/util/tests" ) func getClient(t *testing.T) pbImplStorageV2Shared.IO { - v, ok := TestAwsProfile.Lookup() - if !ok { - t.Skipf("Client does not exists") - } - - b, ok := TestAWSBucket.Lookup() - if !ok { - t.Skipf("Bucket does not exists") - } - - var c awsHelper.Config - c.Region = "eu-central-1" - - c.Provider.Config = awsHelper.ProviderConfig{ - Profile: v, - } - - r, ok := TestAwsRole.Lookup() - if ok { - c.Provider.Impersonate = awsHelper.ProviderImpersonate{ - Role: r, - Name: "Test", - } - } - var cfg Configuration - cfg.Client = c - cfg.BucketName = b + cfg.Client = tests.GetAWSClientConfig(t) + cfg.BucketName = tests.GetAWSS3Bucket(t) cfg.BucketPrefix = fmt.Sprintf("test/%s/", uuid.NewUUID()) z, err := cfg.New() @@ -118,4 +87,8 @@ func Test(t *testing.T) { 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/suite_test.go b/integrations/storage/v2/suite_test.go index 6b72cf374..5e48a1d5f 100644 --- a/integrations/storage/v2/suite_test.go +++ b/integrations/storage/v2/suite_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. @@ -32,50 +32,16 @@ import ( 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" - awsHelper "github.com/arangodb/kube-arangodb/pkg/util/aws" "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" ) -const ( - TestAwsProfile util.EnvironmentVariable = "TEST_AWS_PROFILE" - TestAwsRole util.EnvironmentVariable = "TEST_AWS_ROLE" - TestAWSBucket util.EnvironmentVariable = "TEST_AWS_BUCKET" -) - func getClient(t *testing.T, mods ...Mod) Configuration { - v, ok := TestAwsProfile.Lookup() - if !ok { - t.Skipf("Client does not exists") - } - - b, ok := TestAWSBucket.Lookup() - if !ok { - t.Skipf("Bucket 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", - } - } - var scfg pbImplStorageV2SharedS3.Configuration - scfg.Client = c - scfg.BucketName = b + scfg.Client = tests.GetAWSClientConfig(t) + scfg.BucketName = tests.GetAWSS3Bucket(t) scfg.BucketPrefix = fmt.Sprintf("test/%s/", uuid.NewUUID()) var cfg Configuration diff --git a/pkg/deployment/resources/arango_profiles.go b/pkg/deployment/resources/arango_profiles.go index 68937d19d..d08393a71 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. @@ -160,6 +160,19 @@ func (r *Resources) EnsureArangoProfiles(ctx context.Context, cachedStatus inspe })), 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 { 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 index 44bada0a8..f0f513fde 100644 --- a/pkg/integrations/sidecar/integration.storage.v2.go +++ b/pkg/integrations/sidecar/integration.storage.v2.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. @@ -27,8 +27,8 @@ import ( 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/ml/storage" "github.com/arangodb/kube-arangodb/pkg/util/aws" "github.com/arangodb/kube-arangodb/pkg/util/constants" "github.com/arangodb/kube-arangodb/pkg/util/errors" @@ -84,7 +84,7 @@ func (i IntegrationStorageV2) Envs() ([]core.EnvVar, error) { envs = append(envs, core.EnvVar{ Name: "INTEGRATION_STORAGE_V2_TYPE", - Value: string(storage.S3), + Value: string(pbImplStorageV2.ConfigurationTypeS3), }, core.EnvVar{ Name: "INTEGRATION_STORAGE_V2_S3_ENDPOINT", diff --git a/pkg/integrations/storage_v1.go b/pkg/integrations/storage_v1.go index ce57fcc1a..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,21 +52,21 @@ 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 { 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 +} From e69ad33ea5917e843a982bdecd6cacc3cf9fe132 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Thu, 9 Jan 2025 19:34:37 +0100 Subject: [PATCH 50/69] [Feature] Improve Helm Chart Manager (#1792) --- CHANGELOG.md | 1 + pkg/util/http/downloader.go | 67 +++++++ pkg/util/k8sutil/helm/chart_manager.go | 164 ++---------------- pkg/util/k8sutil/helm/chart_manager_repo.go | 128 ++++++++++++++ .../helm/chart_manager_repo_version.go | 65 +++++++ pkg/util/k8sutil/helm/chart_manager_test.go | 29 +++- 6 files changed, 296 insertions(+), 158 deletions(-) create mode 100644 pkg/util/http/downloader.go create mode 100644 pkg/util/k8sutil/helm/chart_manager_repo.go create mode 100644 pkg/util/k8sutil/helm/chart_manager_repo_version.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 0634c12ff..41b8a329e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,7 @@ - (Feature) Deprecate AF Mode - (Maintenance) Switch License to 2025 - (Feature) Migrate Storage V1 to CE +- (Feature) Improve Helm Chart Manager ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD 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/k8sutil/helm/chart_manager.go b/pkg/util/k8sutil/helm/chart_manager.go index b146a764a..4f9695b76 100644 --- a/pkg/util/k8sutil/helm/chart_manager.go +++ b/pkg/util/k8sutil/helm/chart_manager.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 helm import ( "context" "fmt" - "io" "net/http" "sort" "sync" @@ -31,17 +30,17 @@ import ( "helm.sh/helm/v3/pkg/repo" "github.com/arangodb/kube-arangodb/pkg/util" - "github.com/arangodb/kube-arangodb/pkg/util/errors" + operatorHTTP "github.com/arangodb/kube-arangodb/pkg/util/http" ) -func NewChartManager(ctx context.Context, client *http.Client, url string) (ChartManager, error) { +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: url, + url: fmt.Sprintf(format, args...), } if err := m.Reload(ctx); err != nil { @@ -55,9 +54,8 @@ type ChartManager interface { Reload(ctx context.Context) error Repositories() []string - Versions(repo string) []string - Latest(repo string) (string, bool) - Chart(ctx context.Context, repo, version string) (Chart, error) + + Get(name string) (ChartManagerRepo, bool) } type manager struct { @@ -70,125 +68,17 @@ type manager struct { index *repo.IndexFile } -func (m *manager) Latest(repoName string) (string, bool) { - m.lock.Lock() - defer m.lock.Unlock() - - if v := m.latest(repoName); v == nil { - return "", false - } else { - return v.Version, true - } -} - -func (m *manager) latest(repoName string) *repo.ChartVersion { - r, ok := m.index.Entries[repoName] - if !ok { - return nil - } - - if len(r) == 0 { - return nil - } - - if len(r) == 1 { - return r[0] - } - - var p = 0 - - for id := range r { - if id == p { - continue +func (m *manager) Get(name string) (ChartManagerRepo, bool) { + for entry := range m.index.Entries { + if entry == name { + return chartManagerRepo{ + manager: m, + name: name, + }, true } - - if r[id].Created.After(r[p].Created) { - p = id - } - } - - if p == -1 { - return nil - } - - return r[p] -} - -func (m *manager) Chart(ctx context.Context, repoName, version string) (Chart, error) { - m.lock.Lock() - defer m.lock.Unlock() - - r, ok := m.index.Entries[repoName] - if !ok { - return nil, errors.Errorf("Repo `%s` not found", repoName) - } - - var ver *repo.ChartVersion - - if version == "latest" { - ver = m.latest(repoName) - } else { - vs, ok := util.PickFromList(r, func(v *repo.ChartVersion) bool { - if v == nil { - return false - } - - return v.Version == version - }) - if !ok { - return nil, errors.Errorf("Repo `%s` does not contains version `%s`", repoName, version) - } - ver = vs - } - - if len(ver.URLs) == 0 { - return nil, errors.Errorf("Chart `%s-%s` does not have any urls defined", repoName, version) - } - - var errs = make([]error, len(ver.URLs)) - - for id, url := range ver.URLs { - data, err := m.download(ctx, url) - if err != nil { - errs[id] = err - continue - } - - return data, nil } - return nil, errors.Errors(errs...) -} - -func (m *manager) download(ctx context.Context, url string) ([]byte, error) { - req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) - if err != nil { - return nil, err - } - - resp, err := m.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", resp.StatusCode) - } - - return data, nil + return nil, false } func (m *manager) Repositories() []string { @@ -206,35 +96,11 @@ func (m *manager) Repositories() []string { return s } -func (m *manager) Versions(repo string) []string { - m.lock.Lock() - defer m.lock.Unlock() - - r, ok := m.index.Entries[repo] - 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 (m *manager) Reload(ctx context.Context) error { m.lock.Lock() defer m.lock.Unlock() - data, err := m.download(ctx, fmt.Sprintf("%s/index.yaml", m.url)) + data, err := operatorHTTP.Download(ctx, m.client, fmt.Sprintf("%s/index.yaml", m.url)) if err != nil { return err } 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 index 583b1c835..ef83d3f39 100644 --- a/pkg/util/k8sutil/helm/chart_manager_test.go +++ b/pkg/util/k8sutil/helm/chart_manager_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. @@ -41,31 +41,42 @@ func Test_Manager(t *testing.T) { 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 := mgr.Latest(repo) + v, ok := r.Latest() require.True(t, ok) - vdata, err := mgr.Chart(context.Background(), repo, v) + 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) - data, err := mgr.Chart(context.Background(), repo, "latest") + vl, ok := r.Get("latest") + require.True(t, ok) + + vldata, err := vl.Get(context.Background()) require.NoError(t, err) - chart, err := data.Get() + chart, err := vldata.Get() require.NoError(t, err) require.NotNil(t, chart.Chart().Metadata) - require.EqualValues(t, v, vchart.Chart().Metadata.Version) - require.EqualValues(t, v, chart.Chart().Metadata.Version) + 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(mgr.Versions(repo), 5) { + for _, version := range limitArray(r.Versions(), 5) { t.Run(version, func(t *testing.T) { - data, err := mgr.Chart(context.Background(), repo, version) + v, ok := r.Get(version) + require.True(t, ok) + + data, err := v.Get(context.Background()) require.NoError(t, err) c, err := data.Get() From 1868116dc419af899cea44194137dd85cc5cd665 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Mon, 13 Jan 2025 13:39:03 +0100 Subject: [PATCH 51/69] [Bugfix] [Platform] Proper Path handler in StorageV2 (#1793) --- CHANGELOG.md | 1 + integrations/storage/v2/definition/helpers.go | 24 +++++++++++- integrations/storage/v2/shared/s3/io.go | 13 +++++-- integrations/storage/v2/shared/s3/list.go | 5 +-- integrations/storage/v2/storage.go | 5 +-- integrations/storage/v2/storage_test.go | 38 ++++++------------- 6 files changed, 47 insertions(+), 39 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41b8a329e..a336b238d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,7 @@ - (Maintenance) Switch License to 2025 - (Feature) Migrate Storage V1 to CE - (Feature) Improve Helm Chart Manager +- (Bugfix) (Platform) Proper Path handler in StorageV2 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/integrations/storage/v2/definition/helpers.go b/integrations/storage/v2/definition/helpers.go index 17759f599..ddaa4e5c6 100644 --- a/integrations/storage/v2/definition/helpers.go +++ b/integrations/storage/v2/definition/helpers.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. @@ -83,3 +83,25 @@ func Receive(ctx context.Context, client StorageV2Client, key string, out io.Wri 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/shared/s3/io.go b/integrations/storage/v2/shared/s3/io.go index 6059d66a5..2f8d05bb0 100644 --- a/integrations/storage/v2/shared/s3/io.go +++ b/integrations/storage/v2/shared/s3/io.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,7 +22,8 @@ package s3 import ( "context" - "fmt" + "path" + "strings" "github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/s3/s3iface" @@ -39,8 +40,12 @@ type ios struct { downloader *s3manager.Downloader } -func (i *ios) key(key string) string { - return fmt.Sprintf("%s%s", i.config.BucketPrefix, key) +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) { diff --git a/integrations/storage/v2/shared/s3/list.go b/integrations/storage/v2/shared/s3/list.go index 9ecbedc27..7cedc85d5 100644 --- a/integrations/storage/v2/shared/s3/list.go +++ b/integrations/storage/v2/shared/s3/list.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 s3 import ( "context" "io" - "strings" "sync" "github.com/aws/aws-sdk-go/service/s3" @@ -86,7 +85,7 @@ func (l *listIterator) Next(ctx context.Context) ([]pbImplStorageV2Shared.File, info.LastUpdatedAt = util.TypeOrDefault(obj.LastModified) results = append(results, pbImplStorageV2Shared.File{ - Key: strings.TrimPrefix(*obj.Key, l.parent.key(l.key)), + Key: l.parent.clean(*obj.Key), Info: info, }) diff --git a/integrations/storage/v2/storage.go b/integrations/storage/v2/storage.go index e26545d2a..26b856b38 100644 --- a/integrations/storage/v2/storage.go +++ b/integrations/storage/v2/storage.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. @@ -235,9 +235,6 @@ func (i *implementation) ListObjects(req *pbStorageV2.StorageV2ListObjectsReques 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") - } lister, err := i.io.List(ctx, path) if err != nil { diff --git a/integrations/storage/v2/storage_test.go b/integrations/storage/v2/storage_test.go index d9d745544..ab4adcdf5 100644 --- a/integrations/storage/v2/storage_test.go +++ b/integrations/storage/v2/storage_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. @@ -26,7 +26,6 @@ import ( "crypto/rand" "fmt" "sort" - "strings" "testing" "github.com/stretchr/testify/require" @@ -36,27 +35,8 @@ import ( 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" - ugrpc "github.com/arangodb/kube-arangodb/pkg/util/grpc" ) -func listAllFilesHelper(t *testing.T, ctx context.Context, h pbStorageV2.StorageV2Client, prefix string) []*pbStorageV2.StorageV2Object { - var r []*pbStorageV2.StorageV2Object - - res, err := h.ListObjects(ctx, &pbStorageV2.StorageV2ListObjectsRequest{ - Path: &pbStorageV2.StorageV2Path{ - Path: prefix, - }, - }) - require.NoError(t, err) - - require.NoError(t, ugrpc.Recv[*pbStorageV2.StorageV2ListObjectsResponse](res, func(response *pbStorageV2.StorageV2ListObjectsResponse) error { - r = append(r, response.GetFiles()...) - return nil - })) - - return r -} - func Test_List(t *testing.T) { ctx, c := context.WithCancel(context.Background()) defer c() @@ -163,27 +143,30 @@ func testFileListing(t *testing.T, ctx context.Context, h pbStorageV2.StorageV2C }) t.Run("List", func(t *testing.T) { - revcFiles := listAllFilesHelper(t, ctx, h, prefix) + revcFiles, err := pbStorageV2.List(ctx, h, prefix) + require.NoError(t, err) require.Len(t, revcFiles, len(files)) for id := range files { - require.EqualValues(t, strings.TrimPrefix(files[id], prefix), revcFiles[id].GetPath().GetPath()) + 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 := listAllFilesHelper(t, ctx, h, fmt.Sprintf("%spath0000/", prefix)) + revcFiles, err := pbStorageV2.List(ctx, h, fmt.Sprintf("%spath0000/", prefix)) + require.NoError(t, err) require.Len(t, revcFiles, 1) - require.EqualValues(t, "file", revcFiles[0].GetPath().GetPath()) + 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 := listAllFilesHelper(t, ctx, h, fmt.Sprintf("%snon-existent/", prefix)) + revcFiles, err := pbStorageV2.List(ctx, h, fmt.Sprintf("%snon-existent/", prefix)) + require.NoError(t, err) require.Len(t, revcFiles, 0) }) @@ -281,7 +264,8 @@ func testS3BucketFileHandling(t *testing.T, ctx context.Context, h pbStorageV2.S }) t.Run("List Objects", func(t *testing.T) { - revcFiles := listAllFilesHelper(t, ctx, h, prefix) + revcFiles, err := pbStorageV2.List(ctx, h, "/") + require.NoError(t, err) t.Logf("Size: %d", len(revcFiles)) }) From a5f5804062f4413f5978508123e4d44fe895877f Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:18:29 +0100 Subject: [PATCH 52/69] [Feature] Helm Chart Values merge methods (#1794) --- CHANGELOG.md | 1 + pkg/util/k8sutil/helm/client.go | 6 +- pkg/util/k8sutil/helm/values.go | 61 +++++--- pkg/util/k8sutil/helm/values_merge_method.go | 105 +++++++++++++ .../k8sutil/helm/values_merge_method_test.go | 145 ++++++++++++++++++ 5 files changed, 295 insertions(+), 23 deletions(-) create mode 100644 pkg/util/k8sutil/helm/values_merge_method.go create mode 100644 pkg/util/k8sutil/helm/values_merge_method_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index a336b238d..08116cedd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,7 @@ - (Feature) Migrate Storage V1 to CE - (Feature) Improve Helm Chart Manager - (Bugfix) (Platform) Proper Path handler in StorageV2 +- (Feature) Helm Chart Values merge methods ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/pkg/util/k8sutil/helm/client.go b/pkg/util/k8sutil/helm/client.go index 5654a30ca..419a188d9 100644 --- a/pkg/util/k8sutil/helm/client.go +++ b/pkg/util/k8sutil/helm/client.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. @@ -184,7 +184,7 @@ func (c *client) Install(ctx context.Context, chart Chart, values Values, mods . return nil, err } - result, err := act.Run(chartData.Chart(), valuesData) + result, err := act.RunWithContext(ctx, chartData.Chart(), valuesData) if err != nil { return nil, err } @@ -230,7 +230,7 @@ func (c *client) Upgrade(ctx context.Context, name string, chart Chart, values V } } - result, err := act.Run(name, chartData.Chart(), valuesData) + result, err := act.RunWithContext(ctx, name, chartData.Chart(), valuesData) if err != nil { return nil, err } diff --git a/pkg/util/k8sutil/helm/values.go b/pkg/util/k8sutil/helm/values.go index 9e05ac958..44f67631a 100644 --- a/pkg/util/k8sutil/helm/values.go +++ b/pkg/util/k8sutil/helm/values.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,37 @@ import ( "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 { @@ -38,35 +69,25 @@ func NewValues(in any) (Values, error) { type Values []byte func (v Values) Equals(other Values) bool { - a, err := v.Marshal() - if err != nil { - return false - } - - if len(a) == 0 { - a = nil - } - - ad, err := json.Marshal(a) + a, err := v.MarshalJSON() if err != nil { return false } - b, err := other.Marshal() + b, err := other.MarshalJSON() if err != nil { return false } - if len(b) == 0 { - b = nil - } + return util.SHA256(a) == util.SHA256(b) +} - bd, err := json.Marshal(b) - if err != nil { - return false - } +func (v Values) MarshalJSON() ([]byte, error) { + return v, nil +} - return util.SHA256(ad) == util.SHA256(bd) +func (v Values) String() string { + return string(v) } func (v Values) Marshal() (map[string]interface{}, error) { 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()) + }) +} From 27d3e61d753266f432a71066827c247640e01c0d Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Tue, 14 Jan 2025 17:39:09 +0100 Subject: [PATCH 53/69] [Feature] [Platform] Expose Route Name via Header (#1795) --- CHANGELOG.md | 1 + docs/cli/arangodb_operator_ops.md | 35 ++-- docs/integration-sidecar.md | 53 ++++- .../scheduler/v2/definition/helm.pb.go | 197 +++++++++++------- .../scheduler/v2/definition/helm.proto | 8 + .../scheduler/v2/definition/helpers.go | 8 +- pkg/debug_package/generator.go | 3 +- .../generators/kubernetes/configmaps.go | 63 ++++++ .../generators/kubernetes/lister.go | 12 +- .../generators/kubernetes/secrets.go | 4 +- pkg/deployment/resources/arango_profiles.go | 126 ++++++++++- .../resources/config_map_gateway.go | 9 +- .../gateway/gateway_config_destination.go | 19 +- 13 files changed, 427 insertions(+), 111 deletions(-) create mode 100644 pkg/debug_package/generators/kubernetes/configmaps.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 08116cedd..9d0adde5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,7 @@ - (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 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/docs/cli/arangodb_operator_ops.md b/docs/cli/arangodb_operator_ops.md index 32a94180c..4ad48d8e2 100644 --- a/docs/cli/arangodb_operator_ops.md +++ b/docs/cli/arangodb_operator_ops.md @@ -98,22 +98,23 @@ 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-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) + --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/integration-sidecar.md b/docs/integration-sidecar.md index 102be9ba5..34d3c9bad 100644 --- a/docs/integration-sidecar.md +++ b/docs/integration-sidecar.md @@ -133,7 +133,7 @@ ArangoDeployment name. Example: `deployment` -#### ARANGO_DEPLOYMENT_ENDPOINT +#### ARANGO_DEPLOYMENT_ENDPOINT / ARANGODB_ENDPOINT HTTP/S Endpoint of the ArangoDeployment Internal Service. @@ -143,4 +143,53 @@ Example: `https://deployment.default.svc:8529` Path to the CA in the PEM format. If not set, TLS is disabled. -Example: `/etc/deployment-int/ca/ca.pem` \ No newline at end of file +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/integrations/scheduler/v2/definition/helm.pb.go b/integrations/scheduler/v2/definition/helm.pb.go index 195b36596..ad88c9aed 100644 --- a/integrations/scheduler/v2/definition/helm.pb.go +++ b/integrations/scheduler/v2/definition/helm.pb.go @@ -533,6 +533,8 @@ type SchedulerV2InstallRequestOptions struct { // 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() { @@ -574,6 +576,13 @@ func (x *SchedulerV2InstallRequestOptions) GetLabels() map[string]string { 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 @@ -707,6 +716,8 @@ type SchedulerV2UpgradeRequestOptions struct { // 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() { @@ -748,6 +759,13 @@ func (x *SchedulerV2UpgradeRequestOptions) GetLabels() map[string]string { 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 @@ -869,6 +887,9 @@ 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() { @@ -903,6 +924,13 @@ 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 @@ -1197,98 +1225,104 @@ var file_integrations_scheduler_v2_definition_helm_proto_rawDesc = []byte{ 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, - 0xae, 0x01, 0x0a, 0x20, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x72, 0x56, 0x32, 0x49, + 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, 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, - 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, + 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, 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, 0xae, 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, 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, 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, 0x24, 0x0a, 0x22, 0x53, 0x63, 0x68, + 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, 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, + 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, 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, + 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 ( @@ -1614,10 +1648,13 @@ func file_integrations_scheduler_v2_definition_helm_proto_init() { 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{}{} diff --git a/integrations/scheduler/v2/definition/helm.proto b/integrations/scheduler/v2/definition/helm.proto index 3b1aad2dc..0f3ece133 100644 --- a/integrations/scheduler/v2/definition/helm.proto +++ b/integrations/scheduler/v2/definition/helm.proto @@ -102,6 +102,9 @@ message SchedulerV2InstallRequest { message SchedulerV2InstallRequestOptions { // Release Labels map labels = 1; + + // Waits for the upgrade to be completed + optional bool wait = 2; } // Response @@ -130,6 +133,9 @@ message SchedulerV2UpgradeRequest { message SchedulerV2UpgradeRequestOptions { // Release Labels map labels = 1; + + // Waits for the upgrade to be completed + optional bool wait = 2; } // Response @@ -154,6 +160,8 @@ message SchedulerV2UninstallRequest { // Request Options message SchedulerV2UninstallRequestOptions { + // Waits for the upgrade to be completed + optional bool wait = 1; } // Response diff --git a/integrations/scheduler/v2/definition/helpers.go b/integrations/scheduler/v2/definition/helpers.go index 4bac86284..fa60ffee2 100644 --- a/integrations/scheduler/v2/definition/helpers.go +++ b/integrations/scheduler/v2/definition/helpers.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. @@ -91,6 +91,7 @@ func (i *SchedulerV2InstallRequestOptions) Options() []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) }) } @@ -107,6 +108,7 @@ func (i *SchedulerV2UpgradeRequestOptions) Options() []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) }) } @@ -144,6 +146,10 @@ func (i *SchedulerV2UninstallRequestOptions) Options() []util.Mod[action.Uninsta var opts []util.Mod[action.Uninstall] + opts = append(opts, func(in *action.Uninstall) { + in.Wait = util.OptionalType(i.Wait, false) + }) + return opts } diff --git a/pkg/debug_package/generator.go b/pkg/debug_package/generator.go index 60c4886d2..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(), 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 e580d3643..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. @@ -30,5 +30,13 @@ import ( ) 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{}, extract) + return list.APIList[L, T](ctx, k, meta.ListOptions{}, func(in L) []T { + z := extract(in) + + for id := range z { + z[id].SetManagedFields(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/resources/arango_profiles.go b/pkg/deployment/resources/arango_profiles.go index d08393a71..3b0abf34f 100644 --- a/pkg/deployment/resources/arango_profiles.go +++ b/pkg/deployment/resources/arango_profiles.go @@ -27,6 +27,7 @@ import ( 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" @@ -49,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) @@ -130,6 +136,8 @@ func (r *Resources) EnsureArangoProfiles(ctx context.Context, cachedStatus inspe }, spec.Integration.GetSidecar(), r.arangoDeploymentProfileTemplate(cachedStatus), r.arangoDeploymentCATemplate(), + r.templateKubernetesEnvs(), + r.templateResourceEnvs(), ) if err != nil { return "", nil, err @@ -218,18 +226,128 @@ func (r *Resources) arangoDeploymentProfileTemplate(cachedStatus inspectorInterf 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: "ARANGO_DEPLOYMENT_NAME", - Value: deploymentName, + 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: "ARANGO_DEPLOYMENT_ENDPOINT", - Value: r.arangoDeploymentInternalAddress(cachedStatus), + 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, + }, + }, }, }, }, diff --git a/pkg/deployment/resources/config_map_gateway.go b/pkg/deployment/resources/config_map_gateway.go index a97036914..0e840a453 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. @@ -44,6 +44,10 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/patcher" ) +const ( + EnvoyRouteHeader = "arangodb-platform-route" +) + func (r *Resources) ensureGatewayConfig(ctx context.Context, cachedStatus inspectorInterface.Inspector, configMaps generic.ModClient[*core.ConfigMap]) error { deploymentName := r.context.GetAPIObject().GetName() configMapName := GetGatewayConfigMapName(deploymentName) @@ -229,6 +233,9 @@ func (r *Resources) renderGatewayConfig(cachedStatus inspectorInterface.Inspecto pbImplEnvoyAuthV3.AuthConfigAuthPassModeKey: string(target.Authentication.PassMode), }, } + dest.ResponseHeaders = map[string]string{ + EnvoyRouteHeader: at.GetName(), + } cfg.Destinations[at.Spec.GetRoute().GetPath()] = dest } diff --git a/pkg/deployment/resources/gateway/gateway_config_destination.go b/pkg/deployment/resources/gateway/gateway_config_destination.go index b78d368b8..fb2ddda7e 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. @@ -24,6 +24,7 @@ import ( "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" @@ -70,6 +71,8 @@ type ConfigDestination struct { UpgradeConfigs ConfigDestinationsUpgrade `json:"upgradeConfigs,omitempty"` TLS ConfigDestinationTLS `json:"tls,omitempty"` + + ResponseHeaders map[string]string `json:"responseHeaders,omitempty"` } func (c *ConfigDestination) Validate() error { @@ -106,12 +109,26 @@ func (c *ConfigDestination) RenderRoute(name, prefix string) (*routeAPI.Route, e return nil, err } + 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, + }) + } + return &routeAPI.Route{ Match: &routeAPI.RouteMatch{ PathSpecifier: &routeAPI.RouteMatch_Prefix{ Prefix: prefix, }, }, + ResponseHeadersToAdd: headers, Action: &routeAPI.Route_Route{ Route: &routeAPI.RouteAction{ ClusterSpecifier: &routeAPI.RouteAction_Cluster{ From 36105b7602581b369841cc7827c49173c3ffb498 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Wed, 15 Jan 2025 19:22:22 +0100 Subject: [PATCH 54/69] [Feature] [Platform] Route Upstream Timeout (#1796) --- CHANGELOG.md | 1 + docs/api/ArangoRoute.V1Alpha1.md | 28 +++- .../v1alpha1/route_spec_destination.go | 22 ++- .../v1alpha1/route_status_target.go | 9 +- .../v1alpha1/zz_generated.deepcopy.go | 15 +- pkg/apis/shared/errors.go | 7 +- .../networking-route.schema.generated.yaml | 3 + .../resources/config_map_gateway.go | 79 ++++++++--- .../resources/config_map_gateway_member.go | 13 +- .../resources/config_maps_member.go | 16 +-- .../gateway/gateway_authz_extension.go | 5 +- .../resources/gateway/gateway_config.go | 11 +- .../gateway/gateway_config_destination.go | 133 ++++++++++++++---- .../gateway_config_destination_static.go | 51 +++++++ .../gateway_config_destination_type.go | 7 +- .../gateway/gateway_config_options.go | 37 +++++ .../resources/gateway/gateway_config_test.go | 64 ++++++++- pkg/deployment/resources/pod_creator.go | 4 +- .../resources/pod_creator_gateway.go | 45 +++--- .../pod_creator_gateway_container.go | 9 +- .../route/handler_destination_endpoints.go | 3 +- .../route/handler_destination_service.go | 3 +- .../gateway/consts.go => platform/state.go} | 14 +- pkg/util/constants/envoy.go | 33 +++++ pkg/util/constants/gateway.go | 47 +++++++ 25 files changed, 541 insertions(+), 118 deletions(-) create mode 100644 pkg/deployment/resources/gateway/gateway_config_destination_static.go create mode 100644 pkg/deployment/resources/gateway/gateway_config_options.go rename pkg/{deployment/resources/gateway/consts.go => platform/state.go} (73%) create mode 100644 pkg/util/constants/envoy.go create mode 100644 pkg/util/constants/gateway.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d0adde5f..ac20f3c68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ - (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 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/docs/api/ArangoRoute.V1Alpha1.md b/docs/api/ArangoRoute.V1Alpha1.md index 676ae906c..26bec1a7f 100644 --- a/docs/api/ArangoRoute.V1Alpha1.md +++ b/docs/api/ArangoRoute.V1Alpha1.md @@ -83,7 +83,7 @@ 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#L46) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination.go#L51) Path defines service path used for overrides @@ -91,7 +91,7 @@ Path defines service path used for overrides ### .spec.destination.protocol -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination.go#L40) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination.go#L45) Protocol defines http protocol used for the route @@ -103,7 +103,7 @@ Possible Values: ### .spec.destination.schema -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination.go#L35) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination.go#L40) Schema defines HTTP/S schema used for connection @@ -153,6 +153,14 @@ UID keeps the information about object UID *** +### .spec.destination.timeout + +Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/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) @@ -273,7 +281,7 @@ Possible Values: ### .status.target.path -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target.go#L49) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target.go#L51) Path specifies request path override @@ -281,12 +289,20 @@ Path specifies request path override ### .status.target.protocol -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target.go#L40) +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/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.43/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) @@ -297,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.43/pkg/apis/networking/v1alpha1/route_status_target.go#L36) Type define destination type diff --git a/pkg/apis/networking/v1alpha1/route_spec_destination.go b/pkg/apis/networking/v1alpha1/route_spec_destination.go index c4d32f683..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 @@ -47,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 { @@ -89,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 diff --git a/pkg/apis/networking/v1alpha1/route_status_target.go b/pkg/apis/networking/v1alpha1/route_status_target.go index 2b8cb5bd7..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" ) @@ -47,6 +49,9 @@ type ArangoRouteStatusTarget struct { // 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 { @@ -73,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.Protocol.String(), a.Path, a.Authentication.Hash(), a.Options.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/zz_generated.deepcopy.go b/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go index 7058314e5..c6698d399 100644 --- a/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go @@ -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" ) @@ -167,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 } @@ -211,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 { @@ -237,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 { @@ -378,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 { @@ -418,6 +424,7 @@ func (in *ArangoRouteStatusTarget) DeepCopyInto(out *ArangoRouteStatusTarget) { *out = new(ArangoRouteStatusTargetOptions) (*in).DeepCopyInto(*out) } + out.Timeout = in.Timeout return } 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/crd/crds/networking-route.schema.generated.yaml b/pkg/crd/crds/networking-route.schema.generated.yaml index d8ba4e7d7..cfa8761cb 100644 --- a/pkg/crd/crds/networking-route.schema.generated.yaml +++ b/pkg/crd/crds/networking-route.schema.generated.yaml @@ -81,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: diff --git a/pkg/deployment/resources/config_map_gateway.go b/pkg/deployment/resources/config_map_gateway.go index 0e840a453..6c8d23d35 100644 --- a/pkg/deployment/resources/config_map_gateway.go +++ b/pkg/deployment/resources/config_map_gateway.go @@ -34,6 +34,7 @@ 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" @@ -44,21 +45,35 @@ import ( "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/patcher" ) -const ( - EnvoyRouteHeader = "arangodb-platform-route" -) - func (r *Resources) ensureGatewayConfig(ctx context.Context, cachedStatus inspectorInterface.Inspector, configMaps generic.ModClient[*core.ConfigMap]) error { - deploymentName := r.context.GetAPIObject().GetName() - configMapName := GetGatewayConfigMapName(deploymentName) - - log := r.log.Str("section", "gateway-config").Str("name", configMapName) - 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")) @@ -74,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, } @@ -108,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 { @@ -137,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()), @@ -150,6 +189,9 @@ func (r *Resources) renderGatewayConfig(cachedStatus inspectorInterface.Inspecto }, }, AuthExtension: &gateway.ConfigAuthZExtension{}, + Timeout: &meta.Duration{ + Duration: constants.MaxGatewayTimeout, + }, } if spec.TLS.IsSecure() { @@ -227,6 +269,7 @@ func (r *Resources) renderGatewayConfig(cachedStatus inspectorInterface.Inspecto } } 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), @@ -234,7 +277,7 @@ func (r *Resources) renderGatewayConfig(cachedStatus inspectorInterface.Inspecto }, } dest.ResponseHeaders = map[string]string{ - EnvoyRouteHeader: at.GetName(), + 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 90bd1117d..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,6 +29,7 @@ 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" @@ -38,15 +39,6 @@ import ( "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 generic.ModClient[*core.ConfigMap]) error { @@ -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/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 f55d8a20a..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. @@ -43,6 +43,7 @@ import ( 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" ) @@ -56,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 { @@ -212,6 +215,9 @@ func (c Config) RenderClusters() ([]*clusterAPI.Cluster, error) { return nil, err } + if c == nil { + continue + } clusters = append(clusters, c) } @@ -267,7 +273,7 @@ func (c Config) RenderIntegrationSidecarFilter() (*httpConnectionManagerAPI.Http } return &httpConnectionManagerAPI.HttpFilter{ - Name: IntegrationSidecarFilterName, + Name: constants.EnvoyIntegrationSidecarFilterName, ConfigType: &httpConnectionManagerAPI.HttpFilter_TypedConfig{ TypedConfig: e, }, @@ -300,6 +306,7 @@ func (c Config) RenderFilters() ([]*listenerAPI.Filter, error) { 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", diff --git a/pkg/deployment/resources/gateway/gateway_config_destination.go b/pkg/deployment/resources/gateway/gateway_config_destination.go index fb2ddda7e..feed655e6 100644 --- a/pkg/deployment/resources/gateway/gateway_config_destination.go +++ b/pkg/deployment/resources/gateway/gateway_config_destination.go @@ -21,6 +21,7 @@ package gateway import ( + "encoding/json" "time" clusterAPI "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3" @@ -29,8 +30,10 @@ import ( 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" ) @@ -72,22 +75,53 @@ type ConfigDestination struct { 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("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()), - ) + + 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 { @@ -99,16 +133,9 @@ func (c *ConfigDestination) GetPath() string { } func (c *ConfigDestination) RenderRoute(name, prefix string) (*routeAPI.Route, error) { - var tcg []TypedFilterConfigGen - - if c != nil && c.AuthExtension != nil { - tcg = append(tcg, c.AuthExtension) - } - tc, err := NewTypedFilterConfig(tcg...) - if err != nil { - return nil, err + if c == nil { + return nil, errors.Errorf("Route cannot be nil") } - var headers []*coreAPI.HeaderValueOption for k, v := range c.ResponseHeaders { @@ -122,24 +149,72 @@ func (c *ConfigDestination) RenderRoute(name, prefix string) (*routeAPI.Route, e }) } - return &routeAPI.Route{ + var tcg []TypedFilterConfigGen + + if c.AuthExtension != nil { + tcg = append(tcg, c.AuthExtension) + } + tc, err := NewTypedFilterConfig(tcg...) + if err != nil { + return nil, err + } + + r := &routeAPI.Route{ Match: &routeAPI.RouteMatch{ PathSpecifier: &routeAPI.RouteMatch_Prefix{ Prefix: prefix, }, }, ResponseHeadersToAdd: headers, - Action: &routeAPI.Route_Route{ - Route: &routeAPI.RouteAction{ - ClusterSpecifier: &routeAPI.RouteAction_Cluster{ - Cluster: name, + + 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, + }, }, - UpgradeConfigs: c.getUpgradeConfigs().render(), - 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 { @@ -151,6 +226,10 @@ func (c *ConfigDestination) getUpgradeConfigs() ConfigDestinationsUpgrade { } 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 diff --git a/pkg/deployment/resources/gateway/gateway_config_destination_static.go b/pkg/deployment/resources/gateway/gateway_config_destination_static.go new file mode 100644 index 000000000..7979127ec --- /dev/null +++ b/pkg/deployment/resources/gateway/gateway_config_destination_static.go @@ -0,0 +1,51 @@ +// +// 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 + +import ( + "net/http" +) + +type ConfigDestinationStatic struct { + Code *uint32 `json:"insecure,omitempty"` + + 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 +} + +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_type.go b/pkg/deployment/resources/gateway/gateway_config_destination_type.go index 4e281900a..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. @@ -34,6 +34,7 @@ type ConfigDestinationType int const ( ConfigDestinationTypeHTTP ConfigDestinationType = iota ConfigDestinationTypeHTTPS + ConfigDestinationTypeStatic ) func (c *ConfigDestinationType) Get() ConfigDestinationType { @@ -42,7 +43,7 @@ func (c *ConfigDestinationType) Get() ConfigDestinationType { } switch v := *c; v { - case ConfigDestinationTypeHTTP, ConfigDestinationTypeHTTPS: + case ConfigDestinationTypeHTTP, ConfigDestinationTypeHTTPS, ConfigDestinationTypeStatic: return v default: return ConfigDestinationTypeHTTP @@ -78,7 +79,7 @@ func (c *ConfigDestinationType) RenderUpstreamTransportSocket(protocol *ConfigDe 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_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_test.go b/pkg/deployment/resources/gateway/gateway_config_test.go index 05fcfd119..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. @@ -401,4 +401,66 @@ 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), + }, + "/_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/pod_creator.go b/pkg/deployment/resources/pod_creator.go index a80fd48c3..efaef3ef5 100644 --- a/pkg/deployment/resources/pod_creator.go +++ b/pkg/deployment/resources/pod_creator.go @@ -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...) 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 cfbd6bc6c..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 { @@ -133,9 +134,9 @@ func (a *ArangoGatewayContainer) GetEnvs() ([]core.EnvVar, []core.EnvFromSource) 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/handlers/networking/route/handler_destination_endpoints.go b/pkg/handlers/networking/route/handler_destination_endpoints.go index 9d7f469e1..c4a94fffb 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. @@ -119,6 +119,7 @@ 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() diff --git a/pkg/handlers/networking/route/handler_destination_service.go b/pkg/handlers/networking/route/handler_destination_service.go index 175917e3b..5ccb1a3b3 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. @@ -118,6 +118,7 @@ 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() diff --git a/pkg/deployment/resources/gateway/consts.go b/pkg/platform/state.go similarity index 73% rename from pkg/deployment/resources/gateway/consts.go rename to pkg/platform/state.go index a624495df..57417f28c 100644 --- a/pkg/deployment/resources/gateway/consts.go +++ b/pkg/platform/state.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. @@ -18,8 +18,12 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package gateway +package platform -const ( - IntegrationSidecarFilterName = "envoy.filters.http.ext_authz" -) +type State struct { + Configuration StateConfiguration `json:"configuration,omitempty"` +} + +type StateConfiguration struct { + Hash string `json:"hash,omitempty"` +} 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" +) From 5eef795a0358cde5e150ab44f71483375f1da5ad Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 17 Jan 2025 16:11:11 +0100 Subject: [PATCH 55/69] [Feature] Fix CRD Generation and golangci version (#1799) --- .golangci.yaml | 12 +- CHANGELOG.md | 1 + Makefile | 4 +- .../crds/backups-backup.yaml | 44 - .../crds/backups-backuppolicy.yaml | 23 - .../crds/database-deployment.yaml | 7 - .../crds/database-task.yaml | 7 - .../replication-deploymentreplication.yaml | 7 - .../crds/backups-backup.yaml | 44 - .../crds/backups-backuppolicy.yaml | 23 - .../crds/database-deployment.yaml | 7 - .../crds/database-task.yaml | 7 - .../replication-deploymentreplication.yaml | 7 - .../crds/backups-backup.yaml | 44 - .../crds/backups-backuppolicy.yaml | 23 - .../crds/database-deployment.yaml | 7 - .../crds/database-task.yaml | 7 - .../replication-deploymentreplication.yaml | 7 - chart/kube-arangodb/crds/backups-backup.yaml | 44 - .../crds/backups-backuppolicy.yaml | 23 - .../crds/database-deployment.yaml | 7 - chart/kube-arangodb/crds/database-task.yaml | 7 - .../replication-deploymentreplication.yaml | 7 - internal/cr_validation_test.go | 93 +- .../crds/backups-backup.schema.generated.yaml | 93 - pkg/crd/crds/backups-backup.yaml | 44 - ...backups-backuppolicy.schema.generated.yaml | 99 - pkg/crd/crds/backups-backuppolicy.yaml | 23 - .../database-deployment.schema.generated.yaml | 16888 ---------------- pkg/crd/crds/database-deployment.yaml | 7 - .../crds/database-task.schema.generated.yaml | 16 - pkg/crd/crds/database-task.yaml | 7 - .../crds/ml-extension.schema.generated.yaml | 30 + pkg/crd/crds/ml-storage.schema.generated.yaml | 21 + ...eploymentreplication.schema.generated.yaml | 115 - .../replication-deploymentreplication.yaml | 7 - .../scheduler-batchjob.schema.generated.yaml | 1 + .../scheduler-cronjob.schema.generated.yaml | 1 + ...scheduler-deployment.schema.generated.yaml | 1 + .../crds/scheduler-pod.schema.generated.yaml | 1 + .../scheduler-profile.schema.generated.yaml | 10 + .../reconcile/action_wait_for_member_up.go | 62 +- pkg/deployment/reconcile/plan_builder_test.go | 4 +- pkg/handlers/backup/finalizer.go | 4 +- pkg/handlers/backup/handler.go | 4 +- pkg/handlers/policy/handler.go | 6 +- pkg/util/k8sutil/helm/client_test.go | 4 +- 47 files changed, 149 insertions(+), 17761 deletions(-) diff --git a/.golangci.yaml b/.golangci.yaml index 78a74808d..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: diff --git a/CHANGELOG.md b/CHANGELOG.md index ac20f3c68..543ab62e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -47,6 +47,7 @@ - (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 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/Makefile b/Makefile index 7fd17fff1..8b7d0dd69 100644 --- a/Makefile +++ b/Makefile @@ -774,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" 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/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-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/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/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/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/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/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/internal/cr_validation_test.go b/internal/cr_validation_test.go index c3f37e3de..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. @@ -76,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, @@ -85,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, @@ -134,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, @@ -150,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, @@ -166,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, @@ -187,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, @@ -208,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, @@ -217,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, @@ -231,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, @@ -240,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, @@ -249,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, @@ -258,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, @@ -267,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, @@ -281,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, @@ -295,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, @@ -304,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, @@ -313,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, @@ -322,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, @@ -331,7 +296,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "platform-storage": { - fmt.Sprintf("%s/pkg/apis/platform/v1alpha1", root): { + fmt.Sprintf("%s/pkg/apis/platform", root): { "v1alpha1": { objects: map[string]interface{}{ "spec": platformApi.ArangoPlatformStorage{}.Spec, @@ -340,7 +305,7 @@ func Test_GenerateCRValidationSchemas(t *testing.T) { }, }, "platform-chart": { - fmt.Sprintf("%s/pkg/apis/platform/v1alpha1", root): { + fmt.Sprintf("%s/pkg/apis/platform", root): { "v1alpha1": { objects: map[string]interface{}{ "spec": platformApi.ArangoPlatformChart{}.Spec, @@ -362,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/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/database-deployment.schema.generated.yaml b/pkg/crd/crds/database-deployment.schema.generated.yaml index f16523776..79e36ed27 100644 --- a/pkg/crd/crds/database-deployment.schema.generated.yaml +++ b/pkg/crd/crds/database-deployment.schema.generated.yaml @@ -16886,16894 +16886,6 @@ v1: type: object x-kubernetes-preserve-unknown-fields: true type: object -v1alpha: - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - mode: - description: Mode keep container replace mode - enum: - - update - - ignore - 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 - request: - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - 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: - 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 - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - mode: - description: Mode keep container replace mode - enum: - - update - - ignore - 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 - request: - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - 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: - 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 - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - mode: - description: Mode keep container replace mode - enum: - - update - - ignore - 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 - request: - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - 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: - 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 - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - mode: - description: Mode keep container replace mode - enum: - - update - - ignore - 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 - request: - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - 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: - 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 - 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 - request: - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - 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 - request: - 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 - request: - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - mode: - description: Mode keep container replace mode - enum: - - update - - ignore - 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 - request: - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - 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: - 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 - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - mode: - description: Mode keep container replace mode - enum: - - update - - ignore - 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 - request: - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - 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: - 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 - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - subPath: - type: string - subPathExpr: - type: string - type: object - type: array - workingDir: - type: string - type: object - type: array - mode: - description: Mode keep container replace mode - enum: - - update - - ignore - 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 - request: - 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 - request: - 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 - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - type: object - 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 - recursiveReadOnly: - type: string - 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: - 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 - 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: 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-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 e5ff82aa6..86ebc9b0b 100644 --- a/pkg/crd/crds/ml-extension.schema.generated.yaml +++ b/pkg/crd/crds/ml-extension.schema.generated.yaml @@ -13249,6 +13249,7 @@ v1beta1: spec: properties: deployment: + description: Deployment specifies how the ML extension will be deployed into cluster properties: affinity: properties: @@ -13663,6 +13664,7 @@ v1beta1: type: object type: array gpu: + description: GPU defined if GPU Jobs are enabled. type: boolean hostIPC: type: boolean @@ -13932,6 +13934,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: @@ -14017,6 +14020,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: @@ -14108,8 +14112,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: @@ -14182,6 +14194,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 @@ -14918,6 +14931,7 @@ v1beta1: type: string type: object init: + description: ArangoMLExtensionTemplate define Init job specification properties: affinity: properties: @@ -16563,6 +16577,7 @@ v1beta1: type: string type: object integrationSidecar: + description: IntegrationSidecar define the integration sidecar spec properties: args: items: @@ -17065,10 +17080,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: @@ -18714,6 +18732,7 @@ v1beta1: type: string type: object gpu: + description: GPU defines templates for GPU jobs properties: affinity: properties: @@ -20360,8 +20379,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: @@ -22007,6 +22028,7 @@ v1beta1: type: string type: object gpu: + description: GPU defines templates for GPU jobs properties: affinity: properties: @@ -23653,8 +23675,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: @@ -25300,6 +25324,7 @@ v1beta1: type: string type: object gpu: + description: GPU defines templates for GPU jobs properties: affinity: properties: @@ -26947,16 +26972,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 properties: checksum: description: UID keeps the information about object Checksum diff --git a/pkg/crd/crds/ml-storage.schema.generated.yaml b/pkg/crd/crds/ml-storage.schema.generated.yaml index ba6474cfd..c3fa10cdb 100644 --- a/pkg/crd/crds/ml-storage.schema.generated.yaml +++ b/pkg/crd/crds/ml-storage.schema.generated.yaml @@ -587,12 +587,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 @@ -608,6 +616,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 @@ -623,18 +634,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/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 eeaf58df4..32d84e8a5 100644 --- a/pkg/crd/crds/scheduler-batchjob.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-batchjob.schema.generated.yaml @@ -61,6 +61,7 @@ v1beta1: podReplacementPolicy: type: string profiles: + description: Profiles keeps list of the profiles items: type: string type: array diff --git a/pkg/crd/crds/scheduler-cronjob.schema.generated.yaml b/pkg/crd/crds/scheduler-cronjob.schema.generated.yaml index 1913cbbcf..7a70cf436 100644 --- a/pkg/crd/crds/scheduler-cronjob.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-cronjob.schema.generated.yaml @@ -3122,6 +3122,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 b05cef7ad..949aa680c 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 diff --git a/pkg/crd/crds/scheduler-pod.schema.generated.yaml b/pkg/crd/crds/scheduler-pod.schema.generated.yaml index ff933e2f7..c84370963 100644 --- a/pkg/crd/crds/scheduler-pod.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-pod.schema.generated.yaml @@ -2000,6 +2000,7 @@ v1beta1: priorityClassName: type: string profiles: + description: Profiles keeps list of the profiles items: type: string type: array diff --git a/pkg/crd/crds/scheduler-profile.schema.generated.yaml b/pkg/crd/crds/scheduler-profile.schema.generated.yaml index 32d5ca1dd..d8d93d526 100644 --- a/pkg/crd/crds/scheduler-profile.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-profile.schema.generated.yaml @@ -1787,8 +1787,10 @@ v1beta1: spec: properties: selectors: + description: Selectors keeps information about ProfileSelectors properties: label: + description: Label keeps information about label selector properties: matchExpressions: items: @@ -1810,10 +1812,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: @@ -2399,9 +2404,11 @@ v1beta1: workingDir: type: string type: object + description: Containers applies values per container type: object type: object pod: + description: Pod Template properties: affinity: properties: @@ -3554,6 +3561,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/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/plan_builder_test.go b/pkg/deployment/reconcile/plan_builder_test.go index 7adb522c8..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. @@ -703,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/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/policy/handler.go b/pkg/handlers/policy/handler.go index 94c669faa..06af36a14 100644 --- a/pkg/handlers/policy/handler.go +++ b/pkg/handlers/policy/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. @@ -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) } diff --git a/pkg/util/k8sutil/helm/client_test.go b/pkg/util/k8sutil/helm/client_test.go index 65103c8e8..144572eca 100644 --- a/pkg/util/k8sutil/helm/client_test.go +++ b/pkg/util/k8sutil/helm/client_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. @@ -120,7 +120,7 @@ func Test_Connection(t *testing.T) { require.NoError(t, mans[0].Object.Unmarshal(&d)) - t.Logf(string(d.GetUID())) + t.Log(string(d.GetUID())) }) t.Run("Test", func(t *testing.T) { From f39e053f68a2a06c5f261069617775f116802d74 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:58:43 +0100 Subject: [PATCH 56/69] [Feature] [ML] Allow to use PlatformStorage (#1798) --- CHANGELOG.md | 1 + docs/api/ArangoMLExtension.V1Beta1.md | 12 +++++ docs/platform.md | 24 +++++++++- pkg/apis/ml/v1beta1/extension_spec.go | 19 ++++++-- .../ml/v1beta1/extension_spec_storage_type.go | 48 +++++++++++++++++++ pkg/apis/ml/v1beta1/zz_generated.deepcopy.go | 5 ++ .../crds/ml-extension.schema.generated.yaml | 8 +++- 7 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 pkg/apis/ml/v1beta1/extension_spec_storage_type.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 543ab62e8..a1c4e129b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,7 @@ - (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 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/docs/api/ArangoMLExtension.V1Beta1.md b/docs/api/ArangoMLExtension.V1Beta1.md index 7cd7e931a..353e58ba4 100644 --- a/docs/api/ArangoMLExtension.V1Beta1.md +++ b/docs/api/ArangoMLExtension.V1Beta1.md @@ -3188,6 +3188,18 @@ Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2 UID keeps the information about object UID +*** + +### .spec.storageType + +Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/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 diff --git a/docs/platform.md b/docs/platform.md index 8c4ede722..b3866b7f5 100644 --- a/docs/platform.md +++ b/docs/platform.md @@ -3,4 +3,26 @@ layout: page has_children: true title: ArangoDBPlatform has_toc: false ---- \ No newline at end of file +--- + +# 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/pkg/apis/ml/v1beta1/extension_spec.go b/pkg/apis/ml/v1beta1/extension_spec.go index 0dccbea43..74d938576 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,7 +112,7 @@ 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", shared.ValidateOptionalInterface(a.GetStorage())), shared.PrefixResourceErrors("init", a.GetInit().Validate()), shared.PrefixResourceErrors("deployment", a.GetDeployment().Validate()), shared.PrefixResourceErrors("jobsTemplates", a.GetJobsTemplates().Validate()), 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 1ea0c1108..3e590ea56 100644 --- a/pkg/apis/ml/v1beta1/zz_generated.deepcopy.go +++ b/pkg/apis/ml/v1beta1/zz_generated.deepcopy.go @@ -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/crd/crds/ml-extension.schema.generated.yaml b/pkg/crd/crds/ml-extension.schema.generated.yaml index 86ebc9b0b..6cb83f505 100644 --- a/pkg/crd/crds/ml-extension.schema.generated.yaml +++ b/pkg/crd/crds/ml-extension.schema.generated.yaml @@ -26986,7 +26986,7 @@ v1beta1: type: object type: object storage: - description: Storage specifies the ArangoMLStorage used within Extension + description: Storage specifies the ArangoMLStorage used within Extension, if extension storage is used properties: checksum: description: UID keeps the information about object Checksum @@ -27001,6 +27001,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 From 7f663d5c8961f100ca9584e179559b341d2aa40e Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Fri, 24 Jan 2025 12:03:53 +0100 Subject: [PATCH 57/69] [Documentation] Replace Member procedure (#1800) --- .../templates/webhook/mutation.yaml | 25 +++++++++++++++++++ .../templates/webhook/mutation.yaml | 25 +++++++++++++++++++ .../templates/webhook/mutation.yaml | 25 +++++++++++++++++++ .../templates/webhook/mutation.yaml | 25 +++++++++++++++++++ docs/how-to/replace-pod.md | 25 +++++++++++++++++++ 5 files changed, 125 insertions(+) create mode 100644 docs/how-to/replace-pod.md diff --git a/chart/kube-arangodb-arm64/templates/webhook/mutation.yaml b/chart/kube-arangodb-arm64/templates/webhook/mutation.yaml index 905d6a86e..27efd0821 100644 --- a/chart/kube-arangodb-arm64/templates/webhook/mutation.yaml +++ b/chart/kube-arangodb-arm64/templates/webhook/mutation.yaml @@ -38,5 +38,30 @@ webhooks: 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/mutation.yaml b/chart/kube-arangodb-enterprise-arm64/templates/webhook/mutation.yaml index 905d6a86e..27efd0821 100644 --- a/chart/kube-arangodb-enterprise-arm64/templates/webhook/mutation.yaml +++ b/chart/kube-arangodb-enterprise-arm64/templates/webhook/mutation.yaml @@ -38,5 +38,30 @@ webhooks: 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/mutation.yaml b/chart/kube-arangodb-enterprise/templates/webhook/mutation.yaml index 905d6a86e..27efd0821 100644 --- a/chart/kube-arangodb-enterprise/templates/webhook/mutation.yaml +++ b/chart/kube-arangodb-enterprise/templates/webhook/mutation.yaml @@ -38,5 +38,30 @@ webhooks: 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/mutation.yaml b/chart/kube-arangodb/templates/webhook/mutation.yaml index 905d6a86e..27efd0821 100644 --- a/chart/kube-arangodb/templates/webhook/mutation.yaml +++ b/chart/kube-arangodb/templates/webhook/mutation.yaml @@ -38,5 +38,30 @@ webhooks: 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/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` From 57f3ff61da7ae9ba33a1e600d30aea89e6686dcf Mon Sep 17 00:00:00 2001 From: ajanikow <12255597+ajanikow@users.noreply.github.com> Date: Sat, 25 Jan 2025 21:54:32 +0000 Subject: [PATCH 58/69] Updated to 1.2.44-preview-1 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 65f113ed6..cfb5a0ef6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.43+git \ No newline at end of file +1.2.44-preview-1+git \ No newline at end of file From be31c6e8c541b62c8600d3d079a8eb2ac7dbb970 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Tue, 28 Jan 2025 12:39:28 +0100 Subject: [PATCH 59/69] [Maintenance] Bump Go to 1.22.11 (#1803) --- .circleci/continue_config.yml | 3 ++- CHANGELOG.md | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.circleci/continue_config.yml b/.circleci/continue_config.yml index 4cae94177..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.8 + - 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: @@ -33,6 +33,7 @@ jobs: GO111MODULES: off KEEP_GOPATH: 1 steps: + - run: apt-get update && apt-get install -y unzip - setup_remote_docker: docker_layer_caching: true - checkout diff --git a/CHANGELOG.md b/CHANGELOG.md index a1c4e129b..3a88439cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ - (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 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD From e8f4987dee2da2ef79d8c3080bc6c0ba13a25a51 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Tue, 28 Jan 2025 15:32:16 +0100 Subject: [PATCH 60/69] [Feature] Split Helm and KClient (#1802) --- CHANGELOG.md | 1 + integrations/scheduler/v2/chart.go | 6 ++--- integrations/scheduler/v2/chart_test.go | 10 ++++----- integrations/scheduler/v2/implementation.go | 17 ++++++++------ .../scheduler/v2/implementation_test.go | 19 ++++++++-------- integrations/scheduler/v2/kubernetes.go | 4 ++-- integrations/scheduler/v2/suite_test.go | 22 +++++++++---------- pkg/integrations/scheduler_v2.go | 6 ++--- pkg/util/k8sutil/helm/client.go | 13 ++++------- pkg/util/k8sutil/helm/client_test.go | 6 ++--- pkg/util/k8sutil/helm/configuration.go | 11 +++++----- pkg/util/k8sutil/helm/suite_test.go | 8 +++---- pkg/util/kclient/client_factory.go | 5 +++-- pkg/util/{kclient => kconfig}/client.go | 8 +++---- pkg/util/{kclient => kconfig}/rest.go | 4 ++-- 15 files changed, 71 insertions(+), 69 deletions(-) rename pkg/util/{kclient => kconfig}/client.go (88%) rename pkg/util/{kclient => kconfig}/rest.go (97%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a88439cb..55858ffcd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ - (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 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD diff --git a/integrations/scheduler/v2/chart.go b/integrations/scheduler/v2/chart.go index 0107ba2ae..2868dbde2 100644 --- a/integrations/scheduler/v2/chart.go +++ b/integrations/scheduler/v2/chart.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. @@ -38,7 +38,7 @@ func (i *implementation) ListCharts(req *pbSchedulerV2.SchedulerV2ListChartsRequ var ct string for { - resp, err := i.client.Client().Arango().PlatformV1alpha1().ArangoPlatformCharts(i.client.Namespace()).List(ctx, meta.ListOptions{ + resp, err := i.kclient.Arango().PlatformV1alpha1().ArangoPlatformCharts(i.client.Namespace()).List(ctx, meta.ListOptions{ Limit: util.OptionalType(req.Items, 128), Continue: ct, }) @@ -67,7 +67,7 @@ func (i *implementation) ListCharts(req *pbSchedulerV2.SchedulerV2ListChartsRequ } func (i *implementation) GetChart(ctx context.Context, in *pbSchedulerV2.SchedulerV2GetChartRequest) (*pbSchedulerV2.SchedulerV2GetChartResponse, error) { - resp, err := i.client.Client().Arango().PlatformV1alpha1().ArangoPlatformCharts(i.client.Namespace()).Get(ctx, in.GetName(), meta.GetOptions{}) + 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) diff --git a/integrations/scheduler/v2/chart_test.go b/integrations/scheduler/v2/chart_test.go index 512b6fcce..e56da44ad 100644 --- a/integrations/scheduler/v2/chart_test.go +++ b/integrations/scheduler/v2/chart_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. @@ -43,7 +43,7 @@ func Test_Chart_List(t *testing.T) { ctx, c := context.WithCancel(context.Background()) defer c() - scheduler, h := InternalClient(t, ctx, func(c Configuration) Configuration { + scheduler, client, _ := InternalClient(t, ctx, func(c Configuration) Configuration { c.Namespace = tests.FakeNamespace c.Deployment = tests.FakeNamespace return c @@ -51,7 +51,7 @@ func Test_Chart_List(t *testing.T) { t.Run("Create Charts", func(t *testing.T) { for i := 0; i < 1024; i++ { - _, err := h.Client().Arango().PlatformV1alpha1().ArangoPlatformCharts(tests.FakeNamespace).Create(context.Background(), &platformApi.ArangoPlatformChart{ + _, err := client.Arango().PlatformV1alpha1().ArangoPlatformCharts(tests.FakeNamespace).Create(context.Background(), &platformApi.ArangoPlatformChart{ ObjectMeta: meta.ObjectMeta{ Name: fmt.Sprintf("chart-%05d", i), Namespace: tests.FakeNamespace, @@ -105,13 +105,13 @@ func Test_Chart_Get(t *testing.T) { ctx, c := context.WithCancel(context.Background()) defer c() - scheduler, h := InternalClient(t, ctx, func(c Configuration) Configuration { + scheduler, client, _ := InternalClient(t, ctx, func(c Configuration) Configuration { c.Namespace = tests.FakeNamespace c.Deployment = tests.FakeNamespace return c }) - z := h.Client().Arango().PlatformV1alpha1().ArangoPlatformCharts(tests.FakeNamespace) + z := client.Arango().PlatformV1alpha1().ArangoPlatformCharts(tests.FakeNamespace) t1, err := z.Create(context.Background(), &platformApi.ArangoPlatformChart{ ObjectMeta: meta.ObjectMeta{ diff --git a/integrations/scheduler/v2/implementation.go b/integrations/scheduler/v2/implementation.go index 149466ed3..12757dc60 100644 --- a/integrations/scheduler/v2/implementation.go +++ b/integrations/scheduler/v2/implementation.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. @@ -28,31 +28,34 @@ import ( 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(client helm.Client, cfg Configuration) (svc.Handler, error) { - return newInternal(client, cfg) +func New(kclient kclient.Client, client helm.Client, cfg Configuration) (svc.Handler, error) { + return newInternal(kclient, client, cfg) } -func newInternal(client helm.Client, c Configuration) (*implementation, error) { +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, + cfg: c, + client: client, + kclient: kclient, }, nil } type implementation struct { cfg Configuration - client helm.Client + kclient kclient.Client + client helm.Client pbSchedulerV2.UnimplementedSchedulerV2Server } diff --git a/integrations/scheduler/v2/implementation_test.go b/integrations/scheduler/v2/implementation_test.go index bb51d5194..a8219c16d 100644 --- a/integrations/scheduler/v2/implementation_test.go +++ b/integrations/scheduler/v2/implementation_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. @@ -34,11 +34,12 @@ import ( 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, c helm.Client) func() { +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 @@ -54,14 +55,14 @@ func cleanup(t *testing.T, c helm.Client) func() { } t.Run("Remove NS", func(t *testing.T) { - if err := c.Client().Kubernetes().CoreV1().Namespaces().Delete(context.Background(), tests.FakeNamespace, meta.DeleteOptions{}); !kerrors.IsNotFound(err) { + 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 := c.Client().Kubernetes().CoreV1().Namespaces().Get(context.Background(), tests.FakeNamespace, meta.GetOptions{}); !kerrors.IsNotFound(err) { + if _, err := client.Kubernetes().CoreV1().Namespaces().Get(context.Background(), tests.FakeNamespace, meta.GetOptions{}); !kerrors.IsNotFound(err) { require.NoError(t, err) continue } @@ -71,7 +72,7 @@ func cleanup(t *testing.T, c helm.Client) func() { }) t.Run("Create NS", func(t *testing.T) { - _, err = c.Client().Kubernetes().CoreV1().Namespaces().Create(context.Background(), &core.Namespace{ + _, err = client.Kubernetes().CoreV1().Namespaces().Create(context.Background(), &core.Namespace{ ObjectMeta: meta.ObjectMeta{ Name: tests.FakeNamespace, }, @@ -96,14 +97,14 @@ func cleanup(t *testing.T, c helm.Client) func() { } t.Run("Remove NS", func(t *testing.T) { - if err := c.Client().Kubernetes().CoreV1().Namespaces().Delete(context.Background(), tests.FakeNamespace, meta.DeleteOptions{}); !kerrors.IsNotFound(err) { + 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 := c.Client().Kubernetes().CoreV1().Namespaces().Get(context.Background(), tests.FakeNamespace, meta.GetOptions{}); !kerrors.IsNotFound(err) { + if _, err := client.Kubernetes().CoreV1().Namespaces().Get(context.Background(), tests.FakeNamespace, meta.GetOptions{}); !kerrors.IsNotFound(err) { require.NoError(t, err) continue } @@ -119,7 +120,7 @@ func Test_Implementation(t *testing.T) { ctx, c := context.WithCancel(context.Background()) defer c() - scheduler, h := ExternalClient(t, ctx, func(c Configuration) Configuration { + scheduler, kc, h := ExternalClient(t, ctx, func(c Configuration) Configuration { c.Namespace = tests.FakeNamespace c.Deployment = tests.FakeNamespace return c @@ -130,7 +131,7 @@ func Test_Implementation(t *testing.T) { }) require.NoError(t, err) - defer cleanup(t, h)() + defer cleanup(t, kc, h)() t.Run("Alive", func(t *testing.T) { _, err := scheduler.Alive(context.Background(), &pbSharedV1.Empty{}) diff --git a/integrations/scheduler/v2/kubernetes.go b/integrations/scheduler/v2/kubernetes.go index 92b531509..89485d89a 100644 --- a/integrations/scheduler/v2/kubernetes.go +++ b/integrations/scheduler/v2/kubernetes.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. @@ -112,7 +112,7 @@ func (i *implementation) KubernetesPermissionCheck(ctx context.Context, in *pbSc SubResource: in.GetSubResource(), Name: in.GetName(), Namespace: util.OptionalType(in.Namespace, i.client.Namespace()), - }.Verify(ctx, i.client.Client().Kubernetes()) + }.Verify(ctx, i.kclient.Kubernetes()) var res pbSchedulerV2.SchedulerV2KubernetesPermissionCheckResponse diff --git a/integrations/scheduler/v2/suite_test.go b/integrations/scheduler/v2/suite_test.go index 47a1a6caa..32c1c651c 100644 --- a/integrations/scheduler/v2/suite_test.go +++ b/integrations/scheduler/v2/suite_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. @@ -44,32 +44,32 @@ func init() { }) } -func Handler(t *testing.T, ctx context.Context, client helm.Client, mods ...Mod) svc.Handler { - handler, err := New(client, NewConfiguration().With(mods...)) +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, helm.Client) { +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, - Client: client, + Config: client.Config(), }) require.NoError(t, err) local := svc.NewService(svc.Configuration{ Address: "127.0.0.1:0", - }, Handler(t, ctx, h, mods...)) + }, Handler(t, ctx, client, h, mods...)) start := local.Start(ctx) - return tgrpc.NewGRPCClient(t, ctx, pbSchedulerV2.NewSchedulerV2Client, start.Address()), h + return tgrpc.NewGRPCClient(t, ctx, pbSchedulerV2.NewSchedulerV2Client, start.Address()), client, h } -func ExternalClient(t *testing.T, ctx context.Context, mods ...Mod) (pbSchedulerV2.SchedulerV2Client, helm.Client) { +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") @@ -83,15 +83,15 @@ func ExternalClient(t *testing.T, ctx context.Context, mods ...Mod) (pbScheduler h, err := helm.NewClient(helm.Configuration{ Namespace: tests.FakeNamespace, - Client: client, + Config: client.Config(), }) require.NoError(t, err) local := svc.NewService(svc.Configuration{ Address: "127.0.0.1:0", - }, Handler(t, ctx, h, mods...)) + }, Handler(t, ctx, client, h, mods...)) start := local.Start(ctx) - return tgrpc.NewGRPCClient(t, ctx, pbSchedulerV2.NewSchedulerV2Client, start.Address()), h + return tgrpc.NewGRPCClient(t, ctx, pbSchedulerV2.NewSchedulerV2Client, start.Address()), client, h } diff --git a/pkg/integrations/scheduler_v2.go b/pkg/integrations/scheduler_v2.go index b610c86b4..9dd0bacb6 100644 --- a/pkg/integrations/scheduler_v2.go +++ b/pkg/integrations/scheduler_v2.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. @@ -70,14 +70,14 @@ func (b *schedulerV2) Handler(ctx context.Context, cmd *cobra.Command) (svc.Hand helm, err := helm.NewClient(helm.Configuration{ Namespace: b.Configuration.Namespace, - Client: client, + 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(helm, b.Configuration) + return pbImplSchedulerV2.New(client, helm, b.Configuration) } func (*schedulerV2) Init(ctx context.Context, cmd *cobra.Command) error { diff --git a/pkg/util/k8sutil/helm/client.go b/pkg/util/k8sutil/helm/client.go index 419a188d9..053071635 100644 --- a/pkg/util/k8sutil/helm/client.go +++ b/pkg/util/k8sutil/helm/client.go @@ -38,7 +38,7 @@ import ( "k8s.io/client-go/util/flowcontrol" "github.com/arangodb/kube-arangodb/pkg/util" - "github.com/arangodb/kube-arangodb/pkg/util/kclient" + "github.com/arangodb/kube-arangodb/pkg/util/kconfig" ) func NewClient(cfg Configuration) (Client, error) { @@ -48,13 +48,13 @@ func NewClient(cfg Configuration) (Client, error) { var helm action.Configuration - if err := helm.Init(kclient.NewRESTClientGetter(cfg.Namespace, nil, cfg.Client.Config()), cfg.Namespace, string(cfg.Driver.Get()), func(format string, v ...interface{}) { + 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.Client.Config()) + dClient, err := discovery.NewDiscoveryClientForConfig(cfg.Config) if err != nil { return nil, err } @@ -69,7 +69,6 @@ func NewClient(cfg Configuration) (Client, error) { type Client interface { Namespace() string - Client() kclient.Client Alive(ctx context.Context) error @@ -103,10 +102,6 @@ func (c *client) Namespace() string { return c.cfg.Namespace } -func (c *client) Client() kclient.Client { - return c.cfg.Client -} - func (c *client) Status(ctx context.Context, name string, mods ...util.Mod[action.Status]) (*Release, error) { act := action.NewStatus(c.helm) @@ -334,7 +329,7 @@ func (c *client) restClientForApiVersion(gv schema.GroupVersion) (rest.Interface return v, nil } - configShallowCopy := *c.cfg.Client.Config() + 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") diff --git a/pkg/util/k8sutil/helm/client_test.go b/pkg/util/k8sutil/helm/client_test.go index 144572eca..b22d3a358 100644 --- a/pkg/util/k8sutil/helm/client_test.go +++ b/pkg/util/k8sutil/helm/client_test.go @@ -68,7 +68,7 @@ func cleanup(t *testing.T, c Client) func() { } func Test_Connection(t *testing.T) { - c := newClient(t, tests.FakeNamespace) + client, c := newClient(t, tests.FakeNamespace) require.NoError(t, c.Alive(context.Background())) @@ -245,7 +245,7 @@ func Test_Connection(t *testing.T) { }) t.Run("Verify", func(t *testing.T) { - cm, err := c.Client().Kubernetes().CoreV1().ConfigMaps(tests.FakeNamespace).Get(context.Background(), "test", meta.GetOptions{}) + cm, err := client.Kubernetes().CoreV1().ConfigMaps(tests.FakeNamespace).Get(context.Background(), "test", meta.GetOptions{}) require.NoError(t, err) require.Len(t, cm.Data, 0) }) @@ -261,7 +261,7 @@ func Test_Connection(t *testing.T) { }) t.Run("Verify", func(t *testing.T) { - cm, err := c.Client().Kubernetes().CoreV1().ConfigMaps(tests.FakeNamespace).Get(context.Background(), "test", meta.GetOptions{}) + 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") diff --git a/pkg/util/k8sutil/helm/configuration.go b/pkg/util/k8sutil/helm/configuration.go index c01833d08..9fc13ddb1 100644 --- a/pkg/util/k8sutil/helm/configuration.go +++ b/pkg/util/k8sutil/helm/configuration.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,15 @@ package helm import ( + "k8s.io/client-go/rest" + "github.com/arangodb/kube-arangodb/pkg/util/errors" - "github.com/arangodb/kube-arangodb/pkg/util/kclient" ) type Configuration struct { Namespace string - Client kclient.Client + Config *rest.Config Driver *ConfigurationDriver } @@ -42,8 +43,8 @@ func (c *Configuration) Validate() error { return errors.Errorf("Namespace cannot be empty") } - if c.Client == nil { - 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 { diff --git a/pkg/util/k8sutil/helm/suite_test.go b/pkg/util/k8sutil/helm/suite_test.go index 73b134dcd..5029ff2e9 100644 --- a/pkg/util/k8sutil/helm/suite_test.go +++ b/pkg/util/k8sutil/helm/suite_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. @@ -44,7 +44,7 @@ func newValues(t *testing.T, in any) Values { return v } -func newClient(t *testing.T, namespace string) Client { +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") @@ -58,8 +58,8 @@ func newClient(t *testing.T, namespace string) Client { c, err := NewClient(Configuration{ Namespace: namespace, - Client: client, + Config: client.Config(), }) require.NoError(t, err) - return c + return client, c } diff --git a/pkg/util/kclient/client_factory.go b/pkg/util/kclient/client_factory.go index 7a362a6e2..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()) 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/kclient/rest.go b/pkg/util/kconfig/rest.go similarity index 97% rename from pkg/util/kclient/rest.go rename to pkg/util/kconfig/rest.go index 3340d0baa..8baf97fc0 100644 --- a/pkg/util/kclient/rest.go +++ b/pkg/util/kconfig/rest.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. @@ -18,7 +18,7 @@ // Copyright holder is ArangoDB GmbH, Cologne, Germany // -package kclient +package kconfig import ( "k8s.io/apimachinery/pkg/api/meta" From c8ed83a2036450dd80296f1b19f1ba2d28ee3626 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Wed, 29 Jan 2025 09:06:54 +0100 Subject: [PATCH 61/69] [Bugfix] Fix ArangoRoute Target switch in case of temporary error (#1804) --- CHANGELOG.md | 1 + pkg/handlers/networking/route/handler.go | 6 +- .../networking/route/handler_deployment.go | 6 +- .../networking/route/handler_destination.go | 7 ++- .../route/handler_destination_endpoints.go | 17 ++---- .../route/handler_destination_service.go | 9 +-- .../route/handler_destination_service_test.go | 4 +- pkg/operatorV2/errors_reconcile.go | 14 ++--- pkg/operatorV2/errors_stop.go | 14 ++--- pkg/operatorV2/errors_temporary.go | 61 +++++++++++++++++++ pkg/util/errors/errors.go | 22 +------ pkg/util/errors/errors_test.go | 52 ++++++++++++++++ pkg/util/errors/grpc.go | 13 +--- pkg/util/errors/grpc_test.go | 41 +++++++++++++ 14 files changed, 195 insertions(+), 72 deletions(-) create mode 100644 pkg/operatorV2/errors_temporary.go create mode 100644 pkg/util/errors/errors_test.go create mode 100644 pkg/util/errors/grpc_test.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 55858ffcd..6e64a1537 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ - (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 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD 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 c4a94fffb..edf616d94 100644 --- a/pkg/handlers/networking/route/handler_destination_endpoints.go +++ b/pkg/handlers/networking/route/handler_destination_endpoints.go @@ -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 diff --git a/pkg/handlers/networking/route/handler_destination_service.go b/pkg/handlers/networking/route/handler_destination_service.go index 5ccb1a3b3..eac85d043 100644 --- a/pkg/handlers/networking/route/handler_destination_service.go +++ b/pkg/handlers/networking/route/handler_destination_service.go @@ -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) { diff --git a/pkg/handlers/networking/route/handler_destination_service_test.go b/pkg/handlers/networking/route/handler_destination_service_test.go index 0b960be69..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) { 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/util/errors/errors.go b/pkg/util/errors/errors.go index a0917b264..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. @@ -55,7 +55,7 @@ func ExtractCause[T error](err error) (T, bool) { var d T if err == nil { - return d, true + return d, false } var v T @@ -70,24 +70,6 @@ func ExtractCause[T error](err error) (T, bool) { return d, false } -func ExtractCauseHelper[T error](err error, extr func(err error) (T, bool)) (T, bool) { - var d T - - if err == nil { - return d, true - } - - if v, ok := extr(err); ok { - return v, true - } - - if err := CauseWithNil(err); err != nil { - return ExtractCauseHelper[T](err, extr) - } - - return d, false -} - func New(message string) error { return errors.New(message) } diff --git a/pkg/util/errors/errors_test.go b/pkg/util/errors/errors_test.go new file mode 100644 index 000000000..c6e01b87b --- /dev/null +++ b/pkg/util/errors/errors_test.go @@ -0,0 +1,52 @@ +// +// 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" +) + +type testCauseError string + +func (t testCauseError) Error() string { + return string(t) + +} + +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 index 94b1315f1..942ba608a 100644 --- a/pkg/util/errors/grpc.go +++ b/pkg/util/errors/grpc.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,8 +21,6 @@ package errors import ( - "errors" - "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) @@ -33,14 +31,7 @@ type grpcError interface { } func GRPCStatus(err error) (*status.Status, bool) { - v, ok := ExtractCauseHelper[grpcError](err, func(err error) (grpcError, bool) { - var gs grpcError - if errors.As(err, &gs) { - return gs, true - } - - return nil, false - }) + v, ok := ExtractCause[grpcError](err) if !ok { return status.New(codes.Unknown, err.Error()), 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"))) +} From df9da5c49a9dc47ffc0f063885df0335dad93c47 Mon Sep 17 00:00:00 2001 From: ajanikow <12255597+ajanikow@users.noreply.github.com> Date: Wed, 29 Jan 2025 09:27:38 +0000 Subject: [PATCH 62/69] Updated to 1.2.44-preview-2 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index cfb5a0ef6..80c8fdfcb 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.44-preview-1+git \ No newline at end of file +1.2.44-preview-2+git \ No newline at end of file From a4c62c6eb0fec5c4d97c786e8ddd9525414988d9 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Wed, 29 Jan 2025 13:13:48 +0100 Subject: [PATCH 63/69] [Feature] Enable Operator Handler StackTraces (#1805) --- CHANGELOG.md | 1 + pkg/logging/logger.go | 9 ++++++++- pkg/operatorV2/operator_worker.go | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e64a1537..1da2808ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,7 @@ - (Maintenance) Bump Go Image to 1.22.11 - (Feature) Split Helm and KClient - (Bugfix) Fix ArangoRoute Target switch in case of temporary error +- (Feature) Enable Operator Handler StackTraces ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) - (Feature) ArangoRoute CRD 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/operatorV2/operator_worker.go b/pkg/operatorV2/operator_worker.go index b568ab881..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,7 +71,7 @@ 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 } From e3d9fc0fd27ff864016fa4866674fbaf8ec07d46 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Wed, 29 Jan 2025 13:56:20 +0100 Subject: [PATCH 64/69] [Bugfix] Fix IntOrString Schema Type (#1806) --- CHANGELOG.md | 2 +- internal/schema_builder_test.go | 18 +- ...graphanalyticsengine.schema.generated.yaml | 11 + pkg/crd/crds/apps-job.schema.generated.yaml | 15 ++ .../database-deployment.schema.generated.yaml | 228 ++++++++++++++++++ .../database-member.schema.generated.yaml | 42 ++++ .../crds/ml-extension.schema.generated.yaml | 131 ++++++++++ .../crds/ml-job-batch.schema.generated.yaml | 15 ++ .../crds/ml-job-cron.schema.generated.yaml | 15 ++ pkg/crd/crds/ml-storage.schema.generated.yaml | 3 + .../scheduler-batchjob.schema.generated.yaml | 15 ++ .../scheduler-cronjob.schema.generated.yaml | 15 ++ ...scheduler-deployment.schema.generated.yaml | 15 ++ .../crds/scheduler-pod.schema.generated.yaml | 15 ++ .../scheduler-profile.schema.generated.yaml | 18 ++ 15 files changed, 556 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1da2808ef..f7406d676 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,7 @@ - (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 ## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14) @@ -135,7 +136,6 @@ - (Feature) DebugPackage ArangoProfiles - (Feature) Scheduler CLI - (Feature) Parametrize ForceDelete timeout -<<<<<<< HEAD - (Feature) Scheduler BatchJob Integration Definition - (Feature) Scheduler CronJob Integration Definition - (Feature) Scheduler BatchJob Integration Service 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/pkg/crd/crds/analytics-graphanalyticsengine.schema.generated.yaml b/pkg/crd/crds/analytics-graphanalyticsengine.schema.generated.yaml index eff820c4c..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 @@ -785,10 +786,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 schedulerName: @@ -1127,6 +1130,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1139,6 +1143,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -1251,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: @@ -1521,6 +1528,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1726,6 +1734,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2025,10 +2034,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 securityContext: diff --git a/pkg/crd/crds/apps-job.schema.generated.yaml b/pkg/crd/crds/apps-job.schema.generated.yaml index 3974be78d..0a20f50e7 100644 --- a/pkg/crd/crds/apps-job.schema.generated.yaml +++ b/pkg/crd/crds/apps-job.schema.generated.yaml @@ -559,6 +559,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -864,10 +865,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 restartPolicy: @@ -1111,6 +1114,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1416,10 +1420,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 restartPolicy: @@ -1669,6 +1675,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1974,10 +1981,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 restartPolicy: @@ -2169,6 +2178,7 @@ v1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2487,6 +2497,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2499,6 +2510,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2611,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: @@ -2881,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/database-deployment.schema.generated.yaml b/pkg/crd/crds/database-deployment.schema.generated.yaml index 79e36ed27..5f9b24089 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 @@ -702,10 +705,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 restartPolicy: @@ -1189,10 +1194,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 schedulerName: @@ -1343,6 +1350,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1648,10 +1656,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 restartPolicy: @@ -1982,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: @@ -2030,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: @@ -2141,6 +2155,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -2594,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. @@ -2601,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: @@ -2665,6 +2682,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2970,10 +2988,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 restartPolicy: @@ -3457,10 +3477,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 schedulerName: @@ -3611,6 +3633,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -3916,10 +3939,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 restartPolicy: @@ -4250,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: @@ -4298,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: @@ -4409,6 +4438,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -4780,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. @@ -4787,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: @@ -4851,6 +4883,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -5156,10 +5189,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 restartPolicy: @@ -5643,10 +5678,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 schedulerName: @@ -5797,6 +5834,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -6102,10 +6140,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 restartPolicy: @@ -6436,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: @@ -6484,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: @@ -6595,6 +6639,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -7048,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. @@ -7055,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: @@ -7119,6 +7166,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -7424,10 +7472,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 restartPolicy: @@ -7911,10 +7961,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 schedulerName: @@ -8065,6 +8117,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -8370,10 +8423,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 restartPolicy: @@ -8704,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: @@ -8752,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: @@ -8863,6 +8922,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -9274,10 +9334,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 securityContext: @@ -9449,6 +9511,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -9748,10 +9811,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 securityContext: @@ -9953,10 +10018,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 type: object @@ -10016,10 +10083,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 serviceMonitor: @@ -10427,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. @@ -10434,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: @@ -10498,6 +10569,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -10803,10 +10875,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 restartPolicy: @@ -11290,10 +11364,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 schedulerName: @@ -11444,6 +11520,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -11749,10 +11826,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 restartPolicy: @@ -12083,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: @@ -12131,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: @@ -12242,6 +12325,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -12756,6 +12840,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. @@ -12763,6 +12848,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -12827,6 +12913,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -13132,10 +13219,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 restartPolicy: @@ -13619,10 +13708,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 schedulerName: @@ -13773,6 +13864,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -14078,10 +14170,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 restartPolicy: @@ -14412,10 +14506,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: @@ -14460,10 +14556,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: @@ -14571,6 +14669,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -14935,6 +15034,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. @@ -14942,6 +15042,7 @@ v1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -15006,6 +15107,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -15311,10 +15413,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 restartPolicy: @@ -15798,10 +15902,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 schedulerName: @@ -15952,6 +16058,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -16257,10 +16364,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 restartPolicy: @@ -16591,10 +16700,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: @@ -16639,10 +16750,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: @@ -16750,6 +16863,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -17214,6 +17328,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. @@ -17221,6 +17336,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -17285,6 +17401,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -17590,10 +17707,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 restartPolicy: @@ -18077,10 +18196,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 schedulerName: @@ -18231,6 +18352,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -18536,10 +18658,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 restartPolicy: @@ -18870,10 +18994,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: @@ -18918,10 +19044,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: @@ -19029,6 +19157,7 @@ v2alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -19482,6 +19611,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. @@ -19489,6 +19619,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -19553,6 +19684,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -19858,10 +19990,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 restartPolicy: @@ -20345,10 +20479,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 schedulerName: @@ -20499,6 +20635,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -20804,10 +20941,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 restartPolicy: @@ -21138,10 +21277,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: @@ -21186,10 +21327,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: @@ -21297,6 +21440,7 @@ v2alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -21668,6 +21812,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. @@ -21675,6 +21820,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -21739,6 +21885,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -22044,10 +22191,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 restartPolicy: @@ -22531,10 +22680,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 schedulerName: @@ -22685,6 +22836,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -22990,10 +23142,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 restartPolicy: @@ -23324,10 +23478,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: @@ -23372,10 +23528,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: @@ -23483,6 +23641,7 @@ v2alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -23936,6 +24095,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. @@ -23943,6 +24103,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -24007,6 +24168,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -24312,10 +24474,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 restartPolicy: @@ -24799,10 +24963,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 schedulerName: @@ -24953,6 +25119,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -25258,10 +25425,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 restartPolicy: @@ -25592,10 +25761,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: @@ -25640,10 +25811,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: @@ -25751,6 +25924,7 @@ v2alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -26162,10 +26336,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 securityContext: @@ -26337,6 +26513,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -26636,10 +26813,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 securityContext: @@ -26841,10 +27020,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 type: object @@ -26904,10 +27085,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 serviceMonitor: @@ -27315,6 +27498,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. @@ -27322,6 +27506,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -27386,6 +27571,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -27691,10 +27877,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 restartPolicy: @@ -28178,10 +28366,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 schedulerName: @@ -28332,6 +28522,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -28637,10 +28828,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 restartPolicy: @@ -28971,10 +29164,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: @@ -29019,10 +29214,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: @@ -29130,6 +29327,7 @@ v2alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -29644,6 +29842,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. @@ -29651,6 +29850,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -29715,6 +29915,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -30020,10 +30221,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 restartPolicy: @@ -30507,10 +30710,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 schedulerName: @@ -30661,6 +30866,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -30966,10 +31172,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 restartPolicy: @@ -31300,10 +31508,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: @@ -31348,10 +31558,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: @@ -31459,6 +31671,7 @@ v2alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath @@ -31823,6 +32036,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. @@ -31830,6 +32044,7 @@ v2alpha1: size: description: Size define size of the ephemeral volume type: string + x-kubernetes-int-or-string: true type: object type: object exporterPort: @@ -31894,6 +32109,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -32199,10 +32415,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 restartPolicy: @@ -32686,10 +32904,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 schedulerName: @@ -32840,6 +33060,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -33145,10 +33366,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 restartPolicy: @@ -33479,10 +33702,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: @@ -33527,10 +33752,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: @@ -33638,6 +33865,7 @@ v2alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object hostPath: description: HostPath diff --git a/pkg/crd/crds/database-member.schema.generated.yaml b/pkg/crd/crds/database-member.schema.generated.yaml index 54c387a9b..cab809b2a 100644 --- a/pkg/crd/crds/database-member.schema.generated.yaml +++ b/pkg/crd/crds/database-member.schema.generated.yaml @@ -36,10 +36,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 volumeClaimTemplate: @@ -156,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: @@ -204,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: @@ -709,6 +715,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1014,10 +1021,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 restartPolicy: @@ -1261,6 +1270,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1566,10 +1576,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 restartPolicy: @@ -1819,6 +1831,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2124,10 +2137,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 restartPolicy: @@ -2319,6 +2334,7 @@ v1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2637,6 +2653,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2649,6 +2666,7 @@ v1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2761,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: @@ -3031,6 +3051,7 @@ v1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -3235,10 +3256,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 volumeClaimTemplate: @@ -3355,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: @@ -3403,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: @@ -3908,6 +3935,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -4213,10 +4241,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 restartPolicy: @@ -4460,6 +4490,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -4765,10 +4796,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 restartPolicy: @@ -5018,6 +5051,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -5323,10 +5357,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 restartPolicy: @@ -5518,6 +5554,7 @@ v2alpha1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -5836,6 +5873,7 @@ v2alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -5848,6 +5886,7 @@ v2alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -5960,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: @@ -6230,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/ml-extension.schema.generated.yaml b/pkg/crd/crds/ml-extension.schema.generated.yaml index 6cb83f505..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 @@ -790,10 +791,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 schedulerName: @@ -1132,6 +1135,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1144,6 +1148,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -1256,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: @@ -1526,6 +1533,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2062,6 +2070,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2459,10 +2468,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 schedulerName: @@ -2776,6 +2787,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2788,6 +2800,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2900,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: @@ -3170,6 +3185,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -3712,6 +3728,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -4109,10 +4126,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 schedulerName: @@ -4426,6 +4445,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -4438,6 +4458,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -4550,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: @@ -4820,6 +4843,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -5356,6 +5380,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -5753,10 +5778,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 schedulerName: @@ -6070,6 +6097,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -6082,6 +6110,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -6194,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: @@ -6464,6 +6495,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -7004,6 +7036,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -7401,10 +7434,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 schedulerName: @@ -7718,6 +7753,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -7730,6 +7766,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -7842,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: @@ -8112,6 +8151,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -8648,6 +8688,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -9045,10 +9086,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 schedulerName: @@ -9362,6 +9405,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -9374,6 +9418,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -9486,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: @@ -9756,6 +9803,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -10296,6 +10344,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -10693,10 +10742,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 schedulerName: @@ -11010,6 +11061,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -11022,6 +11074,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -11134,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: @@ -11404,6 +11459,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -11940,6 +11996,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -12337,10 +12394,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 schedulerName: @@ -12654,6 +12713,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -12666,6 +12726,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -12778,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: @@ -13048,6 +13111,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -13627,6 +13691,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -14037,10 +14102,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 schedulerName: @@ -14379,6 +14446,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -14391,6 +14459,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -14503,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: @@ -14773,6 +14844,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -15309,6 +15381,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -15708,10 +15781,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 schedulerName: @@ -16025,6 +16100,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -16037,6 +16113,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -16149,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: @@ -16419,6 +16498,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -16621,6 +16701,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -16920,10 +17001,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 securityContext: @@ -17464,6 +17547,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -17863,10 +17947,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 schedulerName: @@ -18180,6 +18266,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -18192,6 +18279,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -18304,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: @@ -18574,6 +18664,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -19110,6 +19201,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -19509,10 +19601,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 schedulerName: @@ -19826,6 +19920,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -19838,6 +19933,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -19950,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: @@ -20220,6 +20318,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -20760,6 +20859,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -21159,10 +21259,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 schedulerName: @@ -21476,6 +21578,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -21488,6 +21591,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -21600,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: @@ -21870,6 +21976,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -22406,6 +22513,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -22805,10 +22913,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 schedulerName: @@ -23122,6 +23232,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -23134,6 +23245,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -23246,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: @@ -23516,6 +23630,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -24056,6 +24171,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -24455,10 +24571,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 schedulerName: @@ -24772,6 +24890,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -24784,6 +24903,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -24896,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: @@ -25166,6 +25288,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -25702,6 +25825,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -26101,10 +26225,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 schedulerName: @@ -26418,6 +26544,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -26430,6 +26557,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -26542,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: @@ -26812,6 +26942,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object diff --git a/pkg/crd/crds/ml-job-batch.schema.generated.yaml b/pkg/crd/crds/ml-job-batch.schema.generated.yaml index 241368011..599eb698e 100644 --- a/pkg/crd/crds/ml-job-batch.schema.generated.yaml +++ b/pkg/crd/crds/ml-job-batch.schema.generated.yaml @@ -553,6 +553,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -858,10 +859,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 restartPolicy: @@ -1105,6 +1108,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1410,10 +1414,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 restartPolicy: @@ -1663,6 +1669,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1968,10 +1975,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 restartPolicy: @@ -2163,6 +2172,7 @@ v1alpha1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2481,6 +2491,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2493,6 +2504,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2605,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: @@ -2875,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 7873cad9e..3ace9c2c3 100644 --- a/pkg/crd/crds/ml-job-cron.schema.generated.yaml +++ b/pkg/crd/crds/ml-job-cron.schema.generated.yaml @@ -638,6 +638,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -943,10 +944,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 restartPolicy: @@ -1190,6 +1193,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1495,10 +1499,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 restartPolicy: @@ -1748,6 +1754,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2053,10 +2060,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 restartPolicy: @@ -2248,6 +2257,7 @@ v1alpha1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2566,6 +2576,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2578,6 +2589,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2690,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: @@ -2960,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 c3fa10cdb..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 @@ -415,10 +416,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 securityContext: diff --git a/pkg/crd/crds/scheduler-batchjob.schema.generated.yaml b/pkg/crd/crds/scheduler-batchjob.schema.generated.yaml index 32d84e8a5..7137a2630 100644 --- a/pkg/crd/crds/scheduler-batchjob.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-batchjob.schema.generated.yaml @@ -558,6 +558,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -863,10 +864,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 restartPolicy: @@ -1110,6 +1113,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1415,10 +1419,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 restartPolicy: @@ -1668,6 +1674,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1973,10 +1980,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 restartPolicy: @@ -2168,6 +2177,7 @@ v1beta1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2486,6 +2496,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2498,6 +2509,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2610,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: @@ -2880,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 7a70cf436..0687025a3 100644 --- a/pkg/crd/crds/scheduler-cronjob.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-cronjob.schema.generated.yaml @@ -638,6 +638,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -943,10 +944,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 restartPolicy: @@ -1190,6 +1193,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1495,10 +1499,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 restartPolicy: @@ -1748,6 +1754,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2053,10 +2060,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 restartPolicy: @@ -2248,6 +2257,7 @@ v1beta1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2566,6 +2576,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2578,6 +2589,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2690,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: @@ -2960,6 +2974,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.schema.generated.yaml b/pkg/crd/crds/scheduler-deployment.schema.generated.yaml index 949aa680c..d3392f582 100644 --- a/pkg/crd/crds/scheduler-deployment.schema.generated.yaml +++ b/pkg/crd/crds/scheduler-deployment.schema.generated.yaml @@ -514,6 +514,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -819,10 +820,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 restartPolicy: @@ -1066,6 +1069,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1371,10 +1375,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 restartPolicy: @@ -1624,6 +1630,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1929,10 +1936,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 restartPolicy: @@ -2124,6 +2133,7 @@ v1beta1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2442,6 +2452,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2454,6 +2465,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2566,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: @@ -2836,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-pod.schema.generated.yaml b/pkg/crd/crds/scheduler-pod.schema.generated.yaml index c84370963..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 @@ -686,10 +687,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 restartPolicy: @@ -933,6 +936,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1238,10 +1242,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 restartPolicy: @@ -1491,6 +1497,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1796,10 +1803,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 restartPolicy: @@ -1991,6 +2000,7 @@ v1beta1: overhead: additionalProperties: type: string + x-kubernetes-int-or-string: true type: object preemptionPolicy: type: string @@ -2314,6 +2324,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2326,6 +2337,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -2438,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: @@ -2708,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 d8d93d526..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 @@ -164,6 +165,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -458,10 +460,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 securityContext: @@ -1222,6 +1226,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1234,6 +1239,7 @@ v1alpha1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -1346,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: @@ -1616,6 +1624,7 @@ v1alpha1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1851,6 +1860,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -1949,6 +1959,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -2245,10 +2256,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 securityContext: @@ -3011,6 +3024,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object @@ -3023,6 +3037,7 @@ v1beta1: type: string sizeLimit: type: string + x-kubernetes-int-or-string: true type: object ephemeral: properties: @@ -3135,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: @@ -3405,6 +3422,7 @@ v1beta1: type: string divisor: type: string + x-kubernetes-int-or-string: true resource: type: string type: object From 6e022ac8b469d45afdb4e88284acf689d70e270a Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Wed, 29 Jan 2025 15:53:25 +0100 Subject: [PATCH 65/69] [Feature] Add spec validation for MLExtension (#1807) --- CHANGELOG.md | 1 + pkg/apis/ml/v1beta1/extension_spec.go | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f7406d676..21bc04347 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ - (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 diff --git a/pkg/apis/ml/v1beta1/extension_spec.go b/pkg/apis/ml/v1beta1/extension_spec.go index 74d938576..6cb745f3d 100644 --- a/pkg/apis/ml/v1beta1/extension_spec.go +++ b/pkg/apis/ml/v1beta1/extension_spec.go @@ -112,10 +112,17 @@ func (a *ArangoMLExtensionSpec) Validate() error { return shared.WithErrors(shared.PrefixResourceErrors("spec", shared.PrefixResourceErrors("metadataService", a.GetMetadataService().Validate()), - shared.PrefixResourceErrors("storage", shared.ValidateOptionalInterface(a.GetStorage())), + 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)), )) } From 1aa6b727aa0d8f6c55d9f980275de0177cf99e22 Mon Sep 17 00:00:00 2001 From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com> Date: Thu, 30 Jan 2025 14:02:02 +0100 Subject: [PATCH 66/69] [Documentation] Profile Label (#1808) Co-authored-by: Simran --- docs/api/ArangoDeployment.V1.md | 32 +++++++-- docs/integration-sidecar.md | 66 +++++++++++++++++++ pkg/apis/deployment/v1/tls_sni_spec.go | 8 ++- pkg/apis/deployment/v2alpha1/tls_sni_spec.go | 8 ++- .../database-deployment.schema.generated.yaml | 4 ++ 5 files changed, 112 insertions(+), 6 deletions(-) diff --git a/docs/api/ArangoDeployment.V1.md b/docs/api/ArangoDeployment.V1.md index 2f558a065..9a00ff91d 100644 --- a/docs/api/ArangoDeployment.V1.md +++ b/docs/api/ArangoDeployment.V1.md @@ -5886,9 +5886,21 @@ Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2 *** -### .spec.sync.tls.sni.mapping.\ +### .spec.sync.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.43/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 +``` *** @@ -7834,9 +7846,21 @@ Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2 *** -### .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.43/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 +``` *** diff --git a/docs/integration-sidecar.md b/docs/integration-sidecar.md index 34d3c9bad..849eddc08 100644 --- a/docs/integration-sidecar.md +++ b/docs/integration-sidecar.md @@ -10,6 +10,72 @@ has_toc: false ## 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 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/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/crd/crds/database-deployment.schema.generated.yaml b/pkg/crd/crds/database-deployment.schema.generated.yaml index 5f9b24089..1ce3e16ce 100644 --- a/pkg/crd/crds/database-deployment.schema.generated.yaml +++ b/pkg/crd/crds/database-deployment.schema.generated.yaml @@ -12510,6 +12510,7 @@ v1: items: type: string type: array + description: The mapping of the Server Name Indication options. type: object type: object ttl: @@ -16960,6 +16961,7 @@ v1: items: type: string type: array + description: The mapping of the Server Name Indication options. type: object type: object ttl: @@ -29512,6 +29514,7 @@ v2alpha1: items: type: string type: array + description: The mapping of the Server Name Indication options. type: object type: object ttl: @@ -33962,6 +33965,7 @@ v2alpha1: items: type: string type: array + description: The mapping of the Server Name Indication options. type: object type: object ttl: From 82486e68225ccd34a15c5d0977ad004609384bb2 Mon Sep 17 00:00:00 2001 From: ajanikow <12255597+ajanikow@users.noreply.github.com> Date: Thu, 30 Jan 2025 15:03:17 +0000 Subject: [PATCH 67/69] Updated to 1.2.44-preview-3 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 80c8fdfcb..237b10d38 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.44-preview-2+git \ No newline at end of file +1.2.44-preview-3+git \ No newline at end of file From 69f69462e7506919e7c629296ae577653c1a653c Mon Sep 17 00:00:00 2001 From: ajanikow <12255597+ajanikow@users.noreply.github.com> Date: Mon, 3 Feb 2025 16:57:01 +0000 Subject: [PATCH 68/69] Update CHANGELOG to 1.2.44 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21bc04347..12bb2d199 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ # Change Log ## [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 From 040822352532d986d893aeb4e0201b0deb5815c6 Mon Sep 17 00:00:00 2001 From: ajanikow <12255597+ajanikow@users.noreply.github.com> Date: Mon, 3 Feb 2025 17:13:44 +0000 Subject: [PATCH 69/69] Updated to 1.2.44 --- README.md | 44 +- VERSION | 2 +- chart/kube-arangodb-arm64/Chart.yaml | 2 +- chart/kube-arangodb-arm64/values.yaml | 2 +- chart/kube-arangodb-crd/Chart.yaml | 2 +- .../kube-arangodb-enterprise-arm64/Chart.yaml | 2 +- .../values.yaml | 2 +- chart/kube-arangodb-enterprise/Chart.yaml | 2 +- chart/kube-arangodb-enterprise/values.yaml | 2 +- chart/kube-arangodb/Chart.yaml | 2 +- chart/kube-arangodb/values.yaml | 2 +- docs/api/ArangoBackup.V1.md | 62 +- docs/api/ArangoBackupPolicy.V1.md | 32 +- docs/api/ArangoDeployment.V1.md | 1518 ++++++++--------- docs/api/ArangoDeploymentReplication.V1.md | 24 +- docs/api/ArangoJob.V1.md | 4 +- docs/api/ArangoLocalStorage.V1Alpha.md | 16 +- docs/api/ArangoMLBatchJob.V1Alpha1.md | 14 +- docs/api/ArangoMLCronJob.V1Alpha1.md | 14 +- docs/api/ArangoMLExtension.V1Alpha1.md | 606 +++---- docs/api/ArangoMLExtension.V1Beta1.md | 652 +++---- docs/api/ArangoMLStorage.V1Alpha1.md | 62 +- docs/api/ArangoMLStorage.V1Beta1.md | 28 +- docs/api/ArangoMember.V1.md | 20 +- docs/api/ArangoPlatformChart.V1Alpha1.md | 2 +- docs/api/ArangoPlatformStorage.V1Alpha1.md | 26 +- docs/api/ArangoProfile.V1Alpha1.md | 72 +- docs/api/ArangoProfile.V1Beta1.md | 74 +- docs/api/ArangoRoute.V1Alpha1.md | 74 +- docs/api/GraphAnalyticsEngine.V1Alpha1.md | 152 +- examples/reboot-pod.yaml | 2 +- manifests/arango-all.yaml | 272 +-- manifests/arango-apps.yaml | 76 +- manifests/arango-backup.yaml | 70 +- manifests/arango-crd.yaml | 142 +- manifests/arango-deployment-replication.yaml | 70 +- manifests/arango-deployment.yaml | 208 ++- manifests/arango-k2kclustersync.yaml | 70 +- manifests/arango-ml.yaml | 70 +- manifests/arango-storage.yaml | 72 +- manifests/enterprise-all.yaml | 272 +-- manifests/enterprise-apps.yaml | 76 +- manifests/enterprise-backup.yaml | 70 +- manifests/enterprise-crd.yaml | 142 +- .../enterprise-deployment-replication.yaml | 70 +- manifests/enterprise-deployment.yaml | 208 ++- manifests/enterprise-k2kclustersync.yaml | 70 +- manifests/enterprise-ml.yaml | 70 +- manifests/enterprise-storage.yaml | 72 +- .../all/enterprise-all.yaml | 272 +-- .../apps/enterprise-apps.yaml | 76 +- .../backup/enterprise-backup.yaml | 70 +- .../crd/enterprise-crd.yaml | 142 +- .../enterprise-deployment-replication.yaml | 70 +- .../deployment/enterprise-deployment.yaml | 208 ++- .../enterprise-k2kclustersync.yaml | 70 +- .../storage/enterprise-storage.yaml | 72 +- manifests/kustomize/all/arango-all.yaml | 272 +-- manifests/kustomize/apps/arango-apps.yaml | 76 +- manifests/kustomize/apps/arango-ml.yaml | 70 +- manifests/kustomize/apps/enterprise-ml.yaml | 70 +- manifests/kustomize/backup/arango-backup.yaml | 70 +- manifests/kustomize/crd/arango-crd.yaml | 142 +- .../arango-deployment-replication.yaml | 70 +- .../deployment/arango-deployment.yaml | 208 ++- .../k2kclustersync/arango-k2kclustersync.yaml | 70 +- .../kustomize/storage/arango-storage.yaml | 72 +- 67 files changed, 4631 insertions(+), 3087 deletions(-) diff --git a/README.md b/README.md index 8c4f34e3f..938640750 100644 --- a/README.md +++ b/README.md @@ -242,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 @@ -252,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 @@ -286,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.43 - - https://github.com/arangodb/kube-arangodb/manifests/kustomize/deployment?ref=1.2.43 + - 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 @@ -296,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.43 - - https://github.com/arangodb/kube-arangodb/manifests/kustomize-enterprise/deployment?ref=1.2.43 + - 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 @@ -333,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 @@ -372,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 237b10d38..457d1be03 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.44-preview-3+git \ 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/values.yaml b/chart/kube-arangodb-arm64/values.yaml index 0f18c7737..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 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/values.yaml b/chart/kube-arangodb-enterprise-arm64/values.yaml index 79b0abcf3..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 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/values.yaml b/chart/kube-arangodb-enterprise/values.yaml index 93c76bbf7..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 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/values.yaml b/chart/kube-arangodb/values.yaml index 37b075249..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 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 9a00ff91d..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#L93) +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,7 +180,7 @@ 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#L98) +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 @@ -192,7 +192,7 @@ Possible Values: ### .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 @@ -200,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 @@ -208,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. @@ -216,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 @@ -224,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 @@ -232,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`. @@ -240,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. @@ -255,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`. @@ -263,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 @@ -274,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. @@ -285,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 @@ -295,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 @@ -305,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 @@ -315,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** @@ -332,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** @@ -349,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 @@ -369,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. @@ -381,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 @@ -391,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. @@ -403,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. @@ -414,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. @@ -425,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. @@ -436,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. @@ -447,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*** @@ -460,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 @@ -468,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. @@ -480,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. @@ -491,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. @@ -502,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. @@ -513,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. @@ -524,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 @@ -532,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. @@ -544,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. @@ -555,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. @@ -566,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. @@ -577,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. @@ -588,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 @@ -600,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 @@ -611,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 @@ -619,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 @@ -627,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. @@ -635,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*** @@ -648,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. @@ -656,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. @@ -665,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. @@ -673,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. @@ -681,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. @@ -689,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. @@ -697,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. @@ -708,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 @@ -719,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. @@ -728,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. @@ -749,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 @@ -764,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 @@ -772,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 @@ -780,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. @@ -789,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 @@ -800,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*** @@ -813,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 @@ -821,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: @@ -837,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*** @@ -850,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`. @@ -866,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 @@ -877,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 @@ -888,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 @@ -899,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 @@ -910,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 @@ -918,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 @@ -929,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 @@ -940,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 @@ -948,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). @@ -956,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 @@ -964,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. @@ -977,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. @@ -998,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. @@ -1012,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. @@ -1030,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. @@ -1038,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 @@ -1046,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 @@ -1054,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) @@ -1065,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 @@ -1080,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 @@ -1091,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: @@ -1102,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`. @@ -1111,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 @@ -1119,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 @@ -1127,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 @@ -1138,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. @@ -1148,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. @@ -1161,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 @@ -1169,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 @@ -1192,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 @@ -1203,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 @@ -1211,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 @@ -1219,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 @@ -1227,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 @@ -1239,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#L93) +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 @@ -1250,7 +1250,7 @@ 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#L98) +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 @@ -1262,7 +1262,7 @@ Possible Values: ### .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 @@ -1270,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 @@ -1278,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. @@ -1286,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 @@ -1294,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 @@ -1302,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`. @@ -1310,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. @@ -1325,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`. @@ -1333,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 @@ -1344,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. @@ -1355,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 @@ -1365,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 @@ -1375,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 @@ -1385,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** @@ -1402,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** @@ -1419,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 @@ -1439,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. @@ -1451,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 @@ -1461,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. @@ -1473,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. @@ -1484,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. @@ -1495,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. @@ -1506,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. @@ -1517,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*** @@ -1530,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 @@ -1538,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. @@ -1550,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. @@ -1561,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. @@ -1572,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. @@ -1583,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. @@ -1594,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 @@ -1602,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. @@ -1614,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. @@ -1625,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. @@ -1636,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. @@ -1647,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. @@ -1658,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 @@ -1670,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 @@ -1681,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 @@ -1689,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 @@ -1697,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. @@ -1705,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*** @@ -1718,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. @@ -1726,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. @@ -1735,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. @@ -1743,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. @@ -1751,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. @@ -1759,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. @@ -1767,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. @@ -1778,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 @@ -1789,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. @@ -1798,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. @@ -1819,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 @@ -1834,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 @@ -1842,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 @@ -1850,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. @@ -1859,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 @@ -1870,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*** @@ -1883,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 @@ -1891,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: @@ -1907,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*** @@ -1920,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`. @@ -1936,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 @@ -1947,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 @@ -1958,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 @@ -1969,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 @@ -1980,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 @@ -1988,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 @@ -1999,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 @@ -2010,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 @@ -2018,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 @@ -2029,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: @@ -2040,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`. @@ -2049,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 @@ -2057,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 @@ -2065,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 @@ -2076,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. @@ -2086,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. @@ -2099,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 @@ -2107,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 @@ -2130,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 @@ -2141,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 @@ -2149,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 @@ -2157,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 @@ -2165,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 @@ -2177,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#L93) +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 @@ -2188,7 +2188,7 @@ 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#L98) +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 @@ -2200,7 +2200,7 @@ Possible Values: ### .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 @@ -2208,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 @@ -2216,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. @@ -2224,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 @@ -2232,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 @@ -2240,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`. @@ -2248,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. @@ -2263,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`. @@ -2271,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 @@ -2282,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. @@ -2293,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 @@ -2303,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 @@ -2313,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 @@ -2323,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** @@ -2340,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** @@ -2357,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 @@ -2377,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. @@ -2389,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 @@ -2399,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. @@ -2411,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. @@ -2422,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. @@ -2433,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. @@ -2444,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. @@ -2455,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*** @@ -2468,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 @@ -2476,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. @@ -2488,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. @@ -2499,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. @@ -2510,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. @@ -2521,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. @@ -2532,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 @@ -2540,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. @@ -2552,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. @@ -2563,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. @@ -2574,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. @@ -2585,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. @@ -2596,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 @@ -2608,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 @@ -2619,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 @@ -2627,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 @@ -2635,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. @@ -2643,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*** @@ -2656,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. @@ -2664,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. @@ -2673,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. @@ -2681,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. @@ -2689,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. @@ -2697,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. @@ -2705,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. @@ -2716,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 @@ -2727,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. @@ -2736,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. @@ -2757,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 @@ -2772,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 @@ -2780,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 @@ -2788,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. @@ -2797,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 @@ -2808,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*** @@ -2821,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 @@ -2829,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: @@ -2845,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*** @@ -2858,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`. @@ -2874,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 @@ -2885,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 @@ -2896,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 @@ -2907,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 @@ -2918,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 @@ -2926,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 @@ -2937,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 @@ -2948,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. @@ -2959,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. @@ -2975,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. @@ -2987,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 @@ -2995,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. @@ -3004,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 @@ -3018,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`. @@ -3027,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`. @@ -3037,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. @@ -3051,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. @@ -3068,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. @@ -3079,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. @@ -3088,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 @@ -3099,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: @@ -3110,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`. @@ -3119,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 @@ -3127,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 @@ -3135,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 @@ -3146,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. @@ -3156,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. @@ -3169,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 @@ -3177,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 @@ -3200,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 @@ -3211,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 @@ -3219,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 @@ -3227,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 @@ -3235,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 @@ -3247,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#L93) +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 @@ -3258,7 +3258,7 @@ 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#L98) +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 @@ -3270,7 +3270,7 @@ Possible Values: ### .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 @@ -3278,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 @@ -3286,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. @@ -3294,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 @@ -3302,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 @@ -3310,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`. @@ -3318,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. @@ -3333,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`. @@ -3341,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 @@ -3352,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. @@ -3363,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 @@ -3373,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 @@ -3383,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 @@ -3393,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** @@ -3410,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** @@ -3427,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 @@ -3447,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. @@ -3459,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 @@ -3469,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. @@ -3481,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. @@ -3492,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. @@ -3503,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. @@ -3514,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. @@ -3525,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*** @@ -3538,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 @@ -3546,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. @@ -3558,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. @@ -3569,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. @@ -3580,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. @@ -3591,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. @@ -3602,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 @@ -3610,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. @@ -3622,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. @@ -3633,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. @@ -3644,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. @@ -3655,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. @@ -3666,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 @@ -3678,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 @@ -3689,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 @@ -3697,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 @@ -3705,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. @@ -3713,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*** @@ -3726,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. @@ -3734,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. @@ -3743,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. @@ -3751,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. @@ -3759,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. @@ -3767,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. @@ -3775,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. @@ -3786,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 @@ -3797,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. @@ -3806,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. @@ -3827,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 @@ -3842,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 @@ -3850,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 @@ -3858,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. @@ -3867,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 @@ -3878,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*** @@ -3891,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 @@ -3899,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: @@ -3915,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*** @@ -3928,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`. @@ -3944,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 @@ -3955,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 @@ -3966,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 @@ -3977,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 @@ -3988,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 @@ -3996,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 @@ -4007,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 @@ -4018,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 @@ -4029,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 @@ -4040,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. @@ -4050,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 @@ -4058,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 @@ -4069,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 @@ -4077,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 @@ -4085,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 @@ -4096,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 @@ -4104,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. @@ -4112,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*** @@ -4125,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. @@ -4133,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. @@ -4142,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. @@ -4150,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. @@ -4158,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. @@ -4166,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. @@ -4174,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. @@ -4185,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 @@ -4196,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. @@ -4205,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. @@ -4226,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. @@ -4234,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. @@ -4245,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. @@ -4256,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. @@ -4268,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. @@ -4284,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. @@ -4292,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. @@ -4309,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. @@ -4326,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 @@ -4336,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 @@ -4347,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 @@ -4358,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 @@ -4366,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 @@ -4376,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. @@ -4384,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 @@ -4394,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. @@ -4406,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 @@ -4418,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 @@ -4429,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. @@ -4441,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 @@ -4452,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. @@ -4463,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. @@ -4478,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. @@ -4486,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 @@ -4496,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. @@ -4504,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 @@ -4512,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 @@ -4525,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 @@ -4535,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 @@ -4546,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. @@ -4562,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 @@ -4570,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. @@ -4584,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** @@ -4600,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*** @@ -4613,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*** @@ -4626,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 @@ -4643,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, @@ -4667,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. @@ -4682,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). @@ -4696,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*** @@ -4727,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 @@ -4741,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. @@ -4756,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. @@ -4769,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 @@ -4780,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: @@ -4791,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`. @@ -4800,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 @@ -4808,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 @@ -4816,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 @@ -4827,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. @@ -4837,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. @@ -4850,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 @@ -4858,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 @@ -4881,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 @@ -4892,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 @@ -4900,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 @@ -4908,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 @@ -4916,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 @@ -4928,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#L93) +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 @@ -4939,7 +4939,7 @@ 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#L98) +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 @@ -4951,7 +4951,7 @@ Possible Values: ### .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 @@ -4959,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 @@ -4967,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. @@ -4975,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 @@ -4983,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 @@ -4991,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`. @@ -4999,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. @@ -5014,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`. @@ -5022,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 @@ -5033,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. @@ -5044,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 @@ -5054,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 @@ -5064,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 @@ -5074,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** @@ -5091,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** @@ -5108,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 @@ -5128,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. @@ -5140,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 @@ -5150,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. @@ -5162,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. @@ -5173,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. @@ -5184,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. @@ -5195,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. @@ -5206,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*** @@ -5219,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 @@ -5227,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. @@ -5239,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. @@ -5250,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. @@ -5261,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. @@ -5272,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. @@ -5283,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 @@ -5291,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. @@ -5303,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. @@ -5314,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. @@ -5325,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. @@ -5336,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. @@ -5347,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 @@ -5359,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 @@ -5370,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 @@ -5378,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 @@ -5386,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. @@ -5394,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*** @@ -5407,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. @@ -5415,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. @@ -5424,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. @@ -5432,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. @@ -5440,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. @@ -5448,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. @@ -5456,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. @@ -5467,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 @@ -5478,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. @@ -5487,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. @@ -5508,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 @@ -5523,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 @@ -5531,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 @@ -5539,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. @@ -5548,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 @@ -5559,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*** @@ -5572,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 @@ -5580,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: @@ -5596,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*** @@ -5609,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`. @@ -5625,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 @@ -5636,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 @@ -5647,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 @@ -5658,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 @@ -5669,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 @@ -5677,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 @@ -5688,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 @@ -5699,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. @@ -5713,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 @@ -5724,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. @@ -5736,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 @@ -5748,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 @@ -5764,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 @@ -5772,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. @@ -5781,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 @@ -5795,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`. @@ -5804,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: @@ -5815,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`. @@ -5825,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. @@ -5839,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. @@ -5855,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. @@ -5865,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 @@ -5882,13 +5882,13 @@ 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 -Type: `map[string][]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/tls_sni_spec.go#L36) +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. @@ -5906,7 +5906,7 @@ mapping: ### .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 @@ -5920,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 @@ -5931,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: @@ -5942,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`. @@ -5951,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 @@ -5959,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 @@ -5967,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 @@ -5978,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. @@ -5988,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. @@ -6001,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 @@ -6009,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 @@ -6032,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 @@ -6043,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 @@ -6051,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 @@ -6059,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 @@ -6067,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 @@ -6079,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#L93) +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 @@ -6090,7 +6090,7 @@ 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#L98) +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 @@ -6102,7 +6102,7 @@ Possible Values: ### .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 @@ -6110,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 @@ -6118,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. @@ -6126,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 @@ -6134,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 @@ -6142,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`. @@ -6150,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. @@ -6165,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`. @@ -6173,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 @@ -6184,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. @@ -6195,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 @@ -6205,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 @@ -6215,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 @@ -6225,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** @@ -6242,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** @@ -6259,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 @@ -6279,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. @@ -6291,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 @@ -6301,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. @@ -6313,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. @@ -6324,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. @@ -6335,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. @@ -6346,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. @@ -6357,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*** @@ -6370,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 @@ -6378,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. @@ -6390,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. @@ -6401,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. @@ -6412,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. @@ -6423,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. @@ -6434,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 @@ -6442,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. @@ -6454,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. @@ -6465,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. @@ -6476,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. @@ -6487,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. @@ -6498,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 @@ -6510,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 @@ -6521,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 @@ -6529,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 @@ -6537,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. @@ -6545,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*** @@ -6558,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. @@ -6566,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. @@ -6575,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. @@ -6583,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. @@ -6591,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. @@ -6599,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. @@ -6607,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. @@ -6618,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 @@ -6629,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. @@ -6638,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. @@ -6659,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 @@ -6674,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 @@ -6682,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 @@ -6690,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. @@ -6699,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 @@ -6710,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*** @@ -6723,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 @@ -6731,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: @@ -6747,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*** @@ -6760,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`. @@ -6776,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 @@ -6787,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 @@ -6798,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 @@ -6809,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 @@ -6820,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 @@ -6828,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 @@ -6839,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 @@ -6850,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 @@ -6861,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: @@ -6872,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`. @@ -6881,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 @@ -6889,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 @@ -6897,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 @@ -6908,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. @@ -6918,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. @@ -6931,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 @@ -6939,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 @@ -6962,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 @@ -6973,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 @@ -6981,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 @@ -6989,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 @@ -6997,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 @@ -7009,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#L93) +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 @@ -7020,7 +7020,7 @@ 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#L98) +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 @@ -7032,7 +7032,7 @@ Possible Values: ### .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 @@ -7040,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 @@ -7048,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. @@ -7056,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 @@ -7064,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 @@ -7072,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`. @@ -7080,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. @@ -7095,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`. @@ -7103,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 @@ -7114,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. @@ -7125,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 @@ -7135,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 @@ -7145,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 @@ -7155,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** @@ -7172,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** @@ -7189,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 @@ -7209,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. @@ -7221,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 @@ -7231,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. @@ -7243,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. @@ -7254,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. @@ -7265,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. @@ -7276,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. @@ -7287,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*** @@ -7300,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 @@ -7308,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. @@ -7320,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. @@ -7331,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. @@ -7342,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. @@ -7353,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. @@ -7364,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 @@ -7372,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. @@ -7384,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. @@ -7395,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. @@ -7406,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. @@ -7417,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. @@ -7428,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 @@ -7440,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 @@ -7451,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 @@ -7459,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 @@ -7467,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. @@ -7475,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*** @@ -7488,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. @@ -7496,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. @@ -7505,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. @@ -7513,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. @@ -7521,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. @@ -7529,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. @@ -7537,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. @@ -7548,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 @@ -7559,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. @@ -7568,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. @@ -7589,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 @@ -7604,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 @@ -7612,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 @@ -7620,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. @@ -7629,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 @@ -7640,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*** @@ -7653,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 @@ -7661,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: @@ -7677,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*** @@ -7690,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`. @@ -7706,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 @@ -7717,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 @@ -7728,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 @@ -7739,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 @@ -7750,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 @@ -7758,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 @@ -7769,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 @@ -7780,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. @@ -7798,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 @@ -7806,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` @@ -7815,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. @@ -7825,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 @@ -7842,13 +7842,13 @@ 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 -Type: `map[string][]string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/deployment/v1/tls_sni_spec.go#L36) +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. @@ -7866,7 +7866,7 @@ mapping: ### .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 @@ -7880,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) @@ -7908,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 353e58ba4..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,7 +3184,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 @@ -3192,7 +3192,7 @@ UID keeps the information about object UID ### .spec.storageType -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/ml/v1beta1/extension_spec.go#L52) +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 @@ -3204,7 +3204,7 @@ Possible Values: ### .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 @@ -3212,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 @@ -3220,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 @@ -3228,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 @@ -3236,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 @@ -3244,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 @@ -3252,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 @@ -3260,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 @@ -3268,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 @@ -3276,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 @@ -3284,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 @@ -3292,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 @@ -3300,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 @@ -3308,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 @@ -3316,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 @@ -3324,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 @@ -3332,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 @@ -3340,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 @@ -3348,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 @@ -3356,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 @@ -3364,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 @@ -3372,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 @@ -3380,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 @@ -3388,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 @@ -3396,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 @@ -3404,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 @@ -3412,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 @@ -3420,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 @@ -3428,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 @@ -3436,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 @@ -3444,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 @@ -3452,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 @@ -3460,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 @@ -3468,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 @@ -3476,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 @@ -3484,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 @@ -3492,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 @@ -3500,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 @@ -3508,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 index 0db70ce01..3d8b68c3d 100644 --- a/docs/api/ArangoPlatformChart.V1Alpha1.md +++ b/docs/api/ArangoPlatformChart.V1Alpha1.md @@ -10,5 +10,5 @@ title: ArangoPlatformChart V1Alpha1 ### .spec.definition -Type: `array` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/platform/v1alpha1/chart_spec.go#L30) +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 index 520718511..35383abbf 100644 --- a/docs/api/ArangoPlatformStorage.V1Alpha1.md +++ b/docs/api/ArangoPlatformStorage.V1Alpha1.md @@ -10,7 +10,7 @@ title: ArangoPlatformStorage V1Alpha1 ### .spec.backend.s3.allowInsecure -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/platform/v1alpha1/storage_spec_backend_s3.go#L46) +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 @@ -20,7 +20,7 @@ Default Value: `false` ### .spec.backend.s3.bucketName -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/platform/v1alpha1/storage_spec_backend_s3.go#L34) +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 @@ -29,7 +29,7 @@ Required ### .spec.backend.s3.bucketPath -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/platform/v1alpha1/storage_spec_backend_s3.go#L37) +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 @@ -37,7 +37,7 @@ BucketPath specifies the Prefix within the bucket ### .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 @@ -45,7 +45,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 @@ -53,7 +53,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 @@ -61,7 +61,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 @@ -69,7 +69,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 @@ -77,7 +77,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 @@ -85,7 +85,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 @@ -93,7 +93,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 @@ -101,7 +101,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/platform/v1alpha1/storage_spec_backend_s3.go#L40) +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 @@ -110,7 +110,7 @@ Required ### .spec.backend.s3.region -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/platform/v1alpha1/storage_spec_backend_s3.go#L55) +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. 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 6b07241de..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,7 +406,7 @@ Links: ### .spec.template.priority -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/scheduler/v1beta1/profile_template.go#L34) +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 26bec1a7f..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,7 +83,7 @@ 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#L51) +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 @@ -91,7 +91,7 @@ Path defines service path used for overrides ### .spec.destination.protocol -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination.go#L45) +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 @@ -103,7 +103,7 @@ Possible Values: ### .spec.destination.schema -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination.go#L40) +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 @@ -115,7 +115,7 @@ Possible Values: ### .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 @@ -123,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 @@ -131,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 @@ -139,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 @@ -147,7 +147,7 @@ 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 @@ -155,7 +155,7 @@ UID keeps the information about object UID ### .spec.destination.timeout -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_destination.go#L57) +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 @@ -163,7 +163,7 @@ 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 @@ -171,7 +171,7 @@ Insecure allows Insecure traffic ### .spec.options.upgrade\[int\].enabled -Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go#L50) +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 @@ -179,7 +179,7 @@ Enabled defines if upgrade option is enabled ### .spec.options.upgrade\[int\].type -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_spec_options_upgrade.go#L47) +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 @@ -190,7 +190,7 @@ Possible Values: ### .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 @@ -198,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 @@ -206,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 @@ -214,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 @@ -222,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 @@ -230,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 @@ -238,31 +238,31 @@ 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.43/pkg/apis/networking/v1alpha1/route_status_target_options_upgrade.go#L43) +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 @@ -270,7 +270,7 @@ 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.43/pkg/apis/networking/v1alpha1/route_status_target_options_upgrade.go#L40) +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 @@ -281,7 +281,7 @@ Possible Values: ### .status.target.path -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target.go#L51) +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 @@ -289,7 +289,7 @@ Path specifies request path override ### .status.target.protocol -Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target.go#L42) +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 @@ -297,7 +297,7 @@ Protocol defines http protocol used for the route ### .status.target.timeout -Type: `integer` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/networking/v1alpha1/route_status_target.go#L54) +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 @@ -305,7 +305,7 @@ 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 @@ -313,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#L36) +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/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/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 +--- +