From ae55994d681f49f6343ac341cfdf46e315c003a7 Mon Sep 17 00:00:00 2001
From: Adam Janikowski <12255597+ajanikow@users.noreply.github.com>
Date: Fri, 26 Jul 2024 10:32:36 +0200
Subject: [PATCH] [Feature] ArangoRoute CRD (#1689)
---
.golangci.yaml | 2 +
CHANGELOG.md | 1 +
Makefile | 6 +-
.../crds/networking-route.yaml | 22 ++
.../templates/deployment-operator/role.yaml | 3 +
.../crds/networking-route.yaml | 22 ++
.../templates/deployment-operator/role.yaml | 3 +
.../crds/networking-route.yaml | 22 ++
.../templates/deployment-operator/role.yaml | 3 +
.../kube-arangodb/crds/networking-route.yaml | 22 ++
.../templates/deployment-operator/role.yaml | 3 +
docs/api/ArangoRoute.V1Alpha1.md | 91 +++++++
internal/cr_validation_test.go | 10 +
internal/docs_parser_test.go | 2 +-
internal/docs_test.go | 14 +
internal/schema_builder_test.go | 2 +-
pkg/apis/networking/definitions.go | 29 +++
pkg/apis/networking/v1alpha1/doc.go | 23 ++
pkg/apis/networking/v1alpha1/register.go | 52 ++++
pkg/apis/networking/v1alpha1/route.go | 69 +++++
pkg/apis/networking/v1alpha1/route_spec.go | 50 ++++
.../v1alpha1/route_spec_destination.go | 50 ++++
.../v1alpha1/route_spec_destination_schema.go | 55 ++++
.../route_spec_destination_service.go | 49 ++++
.../v1alpha1/route_spec_destination_tls.go | 30 +++
.../networking/v1alpha1/route_spec_route.go | 52 ++++
pkg/apis/networking/v1alpha1/route_status.go | 29 +++
.../v1alpha1/zz_generated.deepcopy.go | 242 ++++++++++++++++++
pkg/apis/shared/validate.go | 61 ++++-
pkg/apis/shared/validate_test.go | 13 +-
pkg/crd/crds/crds.go | 3 +
pkg/crd/crds/crds_test.go | 1 +
pkg/crd/crds/networking-route.go | 51 ++++
.../networking-route.schema.generated.yaml | 55 ++++
pkg/crd/crds/networking-route.yaml | 22 ++
pkg/crd/networking.go | 40 +++
pkg/deployment/resources/inspector/ar.go | 192 ++++++++++++++
.../resources/inspector/ar_anonymous.go | 45 ++++
pkg/deployment/resources/inspector/ar_gvk.go | 43 ++++
pkg/deployment/resources/inspector/ar_mod.go | 47 ++++
.../resources/inspector/ar_v1alpha1.go | 138 ++++++++++
.../resources/inspector/inspector.go | 16 ++
.../resources/inspector/inspector_test.go | 6 +-
.../resources/inspector/pdbs_version_test.go | 4 +-
.../resources/inspector/throttles.go | 3 +-
.../clientset/versioned/clientset.go | 13 +
.../versioned/fake/clientset_generated.go | 7 +
.../clientset/versioned/fake/register.go | 2 +
.../clientset/versioned/scheme/register.go | 2 +
.../typed/networking/v1alpha1/arangoroute.go | 199 ++++++++++++++
.../typed/networking/v1alpha1/doc.go | 24 ++
.../typed/networking/v1alpha1/fake/doc.go | 24 ++
.../v1alpha1/fake/fake_arangoroute.go | 145 +++++++++++
.../v1alpha1/fake/fake_networking_client.go | 44 ++++
.../v1alpha1/generated_expansion.go | 25 ++
.../networking/v1alpha1/networking_client.go | 111 ++++++++
.../informers/externalversions/factory.go | 6 +
.../informers/externalversions/generic.go | 5 +
.../externalversions/networking/interface.go | 50 ++++
.../networking/v1alpha1/arangoroute.go | 94 +++++++
.../networking/v1alpha1/interface.go | 49 ++++
.../networking/v1alpha1/arangoroute.go | 103 ++++++++
.../v1alpha1/expansion_generated.go | 31 +++
.../inspector/arangoroute/definition.go | 44 ++++
.../inspector/arangoroute/v1alpha1/loader.go | 53 ++++
.../inspector/arangoroute/v1alpha1/reader.go | 50 ++++
.../inspector/constants/ar_constants.go | 66 +++++
.../inspector/definitions/components.go | 4 +-
pkg/util/k8sutil/inspector/inspector.go | 4 +-
pkg/util/k8sutil/inspector/mods/mods.go | 8 +-
.../k8sutil/inspector/throttle/throttle.go | 16 +-
71 files changed, 2851 insertions(+), 26 deletions(-)
create mode 100644 chart/kube-arangodb-arm64/crds/networking-route.yaml
create mode 100644 chart/kube-arangodb-enterprise-arm64/crds/networking-route.yaml
create mode 100644 chart/kube-arangodb-enterprise/crds/networking-route.yaml
create mode 100644 chart/kube-arangodb/crds/networking-route.yaml
create mode 100644 docs/api/ArangoRoute.V1Alpha1.md
create mode 100644 pkg/apis/networking/definitions.go
create mode 100644 pkg/apis/networking/v1alpha1/doc.go
create mode 100644 pkg/apis/networking/v1alpha1/register.go
create mode 100644 pkg/apis/networking/v1alpha1/route.go
create mode 100644 pkg/apis/networking/v1alpha1/route_spec.go
create mode 100644 pkg/apis/networking/v1alpha1/route_spec_destination.go
create mode 100644 pkg/apis/networking/v1alpha1/route_spec_destination_schema.go
create mode 100644 pkg/apis/networking/v1alpha1/route_spec_destination_service.go
create mode 100644 pkg/apis/networking/v1alpha1/route_spec_destination_tls.go
create mode 100644 pkg/apis/networking/v1alpha1/route_spec_route.go
create mode 100644 pkg/apis/networking/v1alpha1/route_status.go
create mode 100644 pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go
create mode 100644 pkg/crd/crds/networking-route.go
create mode 100644 pkg/crd/crds/networking-route.schema.generated.yaml
create mode 100644 pkg/crd/crds/networking-route.yaml
create mode 100644 pkg/crd/networking.go
create mode 100644 pkg/deployment/resources/inspector/ar.go
create mode 100644 pkg/deployment/resources/inspector/ar_anonymous.go
create mode 100644 pkg/deployment/resources/inspector/ar_gvk.go
create mode 100644 pkg/deployment/resources/inspector/ar_mod.go
create mode 100644 pkg/deployment/resources/inspector/ar_v1alpha1.go
create mode 100644 pkg/generated/clientset/versioned/typed/networking/v1alpha1/arangoroute.go
create mode 100644 pkg/generated/clientset/versioned/typed/networking/v1alpha1/doc.go
create mode 100644 pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/doc.go
create mode 100644 pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_arangoroute.go
create mode 100644 pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_networking_client.go
create mode 100644 pkg/generated/clientset/versioned/typed/networking/v1alpha1/generated_expansion.go
create mode 100644 pkg/generated/clientset/versioned/typed/networking/v1alpha1/networking_client.go
create mode 100644 pkg/generated/informers/externalversions/networking/interface.go
create mode 100644 pkg/generated/informers/externalversions/networking/v1alpha1/arangoroute.go
create mode 100644 pkg/generated/informers/externalversions/networking/v1alpha1/interface.go
create mode 100644 pkg/generated/listers/networking/v1alpha1/arangoroute.go
create mode 100644 pkg/generated/listers/networking/v1alpha1/expansion_generated.go
create mode 100644 pkg/util/k8sutil/inspector/arangoroute/definition.go
create mode 100644 pkg/util/k8sutil/inspector/arangoroute/v1alpha1/loader.go
create mode 100644 pkg/util/k8sutil/inspector/arangoroute/v1alpha1/reader.go
create mode 100644 pkg/util/k8sutil/inspector/constants/ar_constants.go
diff --git a/.golangci.yaml b/.golangci.yaml
index a841e8cf2..d46694844 100644
--- a/.golangci.yaml
+++ b/.golangci.yaml
@@ -77,6 +77,8 @@ linters-settings:
alias: mlSharedTests
- pkg: github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1
alias: analyticsApi
+ - pkg: github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1
+ alias: networkingApi
- pkg: github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1
alias: mlApi
- pkg: github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8501342fe..b7d9770dd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,7 @@
# Change Log
## [master](https://github.com/arangodb/kube-arangodb/tree/master) (N/A)
+- (Feature) ArangoRoute CRD
## [1.2.42](https://github.com/arangodb/kube-arangodb/tree/1.2.42) (2024-07-23)
- (Maintenance) Go 1.22.4 & Kubernetes 1.29.6 libraries
diff --git a/Makefile b/Makefile
index bf6f3cf4e..b82382f3a 100644
--- a/Makefile
+++ b/Makefile
@@ -440,7 +440,8 @@ update-generated:
apps:v1 \
ml:v1alpha1 ml:v1beta1 \
scheduler:v1alpha1 scheduler:v1beta1 \
- analytics:v1alpha1" \
+ analytics:v1alpha1 \
+ networking:v1alpha1" \
--go-header-file "./tools/codegen/boilerplate.go.txt" \
$(VERIFYARGS)
GOPATH=$(GOBUILDDIR) $(VENDORDIR)/k8s.io/code-generator/generate-groups.sh \
@@ -894,7 +895,8 @@ CRDS:=apps-job \
replication-deploymentreplication \
ml-storage ml-extension ml-job-batch ml-job-cron \
scheduler-profile \
- analytics-graphanalyticsengine
+ analytics-graphanalyticsengine \
+ networking-route
.PHONY: sync
sync:
diff --git a/chart/kube-arangodb-arm64/crds/networking-route.yaml b/chart/kube-arangodb-arm64/crds/networking-route.yaml
new file mode 100644
index 000000000..514c0763f
--- /dev/null
+++ b/chart/kube-arangodb-arm64/crds/networking-route.yaml
@@ -0,0 +1,22 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: arangoroutes.networking.arangodb.com
+spec:
+ group: networking.arangodb.com
+ names:
+ kind: ArangoRoute
+ listKind: ArangoRouteList
+ plural: arangoroutes
+ singular: arangoroute
+ 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-operator/role.yaml b/chart/kube-arangodb-arm64/templates/deployment-operator/role.yaml
index ad6fd3796..18d5e8582 100644
--- a/chart/kube-arangodb-arm64/templates/deployment-operator/role.yaml
+++ b/chart/kube-arangodb-arm64/templates/deployment-operator/role.yaml
@@ -16,6 +16,9 @@ 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-enterprise-arm64/crds/networking-route.yaml b/chart/kube-arangodb-enterprise-arm64/crds/networking-route.yaml
new file mode 100644
index 000000000..514c0763f
--- /dev/null
+++ b/chart/kube-arangodb-enterprise-arm64/crds/networking-route.yaml
@@ -0,0 +1,22 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: arangoroutes.networking.arangodb.com
+spec:
+ group: networking.arangodb.com
+ names:
+ kind: ArangoRoute
+ listKind: ArangoRouteList
+ plural: arangoroutes
+ singular: arangoroute
+ 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-operator/role.yaml b/chart/kube-arangodb-enterprise-arm64/templates/deployment-operator/role.yaml
index ad6fd3796..18d5e8582 100644
--- a/chart/kube-arangodb-enterprise-arm64/templates/deployment-operator/role.yaml
+++ b/chart/kube-arangodb-enterprise-arm64/templates/deployment-operator/role.yaml
@@ -16,6 +16,9 @@ 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-enterprise/crds/networking-route.yaml b/chart/kube-arangodb-enterprise/crds/networking-route.yaml
new file mode 100644
index 000000000..514c0763f
--- /dev/null
+++ b/chart/kube-arangodb-enterprise/crds/networking-route.yaml
@@ -0,0 +1,22 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: arangoroutes.networking.arangodb.com
+spec:
+ group: networking.arangodb.com
+ names:
+ kind: ArangoRoute
+ listKind: ArangoRouteList
+ plural: arangoroutes
+ singular: arangoroute
+ 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-operator/role.yaml b/chart/kube-arangodb-enterprise/templates/deployment-operator/role.yaml
index ad6fd3796..18d5e8582 100644
--- a/chart/kube-arangodb-enterprise/templates/deployment-operator/role.yaml
+++ b/chart/kube-arangodb-enterprise/templates/deployment-operator/role.yaml
@@ -16,6 +16,9 @@ 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/crds/networking-route.yaml b/chart/kube-arangodb/crds/networking-route.yaml
new file mode 100644
index 000000000..514c0763f
--- /dev/null
+++ b/chart/kube-arangodb/crds/networking-route.yaml
@@ -0,0 +1,22 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: arangoroutes.networking.arangodb.com
+spec:
+ group: networking.arangodb.com
+ names:
+ kind: ArangoRoute
+ listKind: ArangoRouteList
+ plural: arangoroutes
+ singular: arangoroute
+ 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-operator/role.yaml b/chart/kube-arangodb/templates/deployment-operator/role.yaml
index ad6fd3796..18d5e8582 100644
--- a/chart/kube-arangodb/templates/deployment-operator/role.yaml
+++ b/chart/kube-arangodb/templates/deployment-operator/role.yaml
@@ -16,6 +16,9 @@ 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/docs/api/ArangoRoute.V1Alpha1.md b/docs/api/ArangoRoute.V1Alpha1.md
new file mode 100644
index 000000000..f0e148992
--- /dev/null
+++ b/docs/api/ArangoRoute.V1Alpha1.md
@@ -0,0 +1,91 @@
+---
+layout: page
+parent: CRD reference
+title: ArangoRoute V1Alpha1
+---
+
+# API Reference for ArangoRoute V1Alpha1
+
+## Spec
+
+### .spec.deployment
+
+Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/networking/v1alpha1/route_spec.go#L27)
+
+Deployment specifies the ArangoDeployment object name
+
+***
+
+### .spec.destination.schema
+
+Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/networking/v1alpha1/route_spec_destination.go#L30)
+
+Schema defines HTTP/S schema used for connection
+
+***
+
+### .spec.destination.service.checksum
+
+Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/shared/v1/object.go#L61)
+
+UID keeps the information about object Checksum
+
+***
+
+### .spec.destination.service.name
+
+Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/shared/v1/object.go#L52)
+
+Name of the object
+
+***
+
+### .spec.destination.service.namespace
+
+Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/shared/v1/object.go#L55)
+
+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.42/pkg/apis/networking/v1alpha1/route_spec_destination_service.go#L36)
+
+Port defines Port or Port Name used as destination
+
+Links:
+* [Documentation](https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/)
+
+***
+
+### .spec.destination.service.uid
+
+Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/shared/v1/object.go#L58)
+
+UID keeps the information about object UID
+
+***
+
+### .spec.destination.tls.insecure
+
+Type: `boolean` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/networking/v1alpha1/route_spec_destination_tls.go#L25)
+
+Insecure allows Insecure traffic
+
+***
+
+### .spec.route.path
+
+Type: `string` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/networking/v1alpha1/route_spec_route.go#L29)
+
+Path specifies the Path route
+
+## Status
+
+### .status.conditions
+
+Type: `api.Conditions` [\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/networking/v1alpha1/route_status.go#L28)
+
+Conditions specific to the entire extension
+
diff --git a/internal/cr_validation_test.go b/internal/cr_validation_test.go
index 6cdfe38fb..b5d8dc04c 100644
--- a/internal/cr_validation_test.go
+++ b/internal/cr_validation_test.go
@@ -40,6 +40,7 @@ import (
deploymentv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1"
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"
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"
@@ -283,6 +284,15 @@ func Test_GenerateCRValidationSchemas(t *testing.T) {
},
},
},
+ "networking-route": {
+ fmt.Sprintf("%s/pkg/apis/networking/v1alpha1", root): {
+ "v1alpha1": {
+ objects: map[string]interface{}{
+ "spec": networkingApi.ArangoRoute{}.Spec,
+ },
+ },
+ },
+ },
}
for filePrefix, packagesToVersion := range input {
diff --git a/internal/docs_parser_test.go b/internal/docs_parser_test.go
index bd181ab8f..9f2784e43 100644
--- a/internal/docs_parser_test.go
+++ b/internal/docs_parser_test.go
@@ -293,7 +293,7 @@ func isSimpleType(obj reflect.Type) (string, string, bool) {
}
func extractTag(tag string) (string, bool) {
- parts := strings.SplitN(tag, ",", 2)
+ parts := strings.Split(tag, ",")
if len(parts) == 1 {
return parts[0], false
diff --git a/internal/docs_test.go b/internal/docs_test.go
index cdfd79d2a..b1c8a2003 100644
--- a/internal/docs_test.go
+++ b/internal/docs_test.go
@@ -42,6 +42,7 @@ import (
deploymentApi "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
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"
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"
@@ -249,6 +250,19 @@ func Test_GenerateAPIDocs(t *testing.T) {
},
},
},
+ "networking": map[string]inputPackage{
+ "v1alpha1": {
+ Types: inputPackageTypes{
+ "ArangoRoute.V1Alpha1": {
+ "Spec": networkingApi.ArangoRoute{}.Spec,
+ "Status": networkingApi.ArangoRoute{}.Status,
+ },
+ },
+ Shared: []string{
+ "shared/v1",
+ },
+ },
+ },
"analytics": map[string]inputPackage{
"v1alpha1": {
Types: inputPackageTypes{
diff --git a/internal/schema_builder_test.go b/internal/schema_builder_test.go
index 4b0a2edbb..af82eb633 100644
--- a/internal/schema_builder_test.go
+++ b/internal/schema_builder_test.go
@@ -228,7 +228,7 @@ func (b *schemaBuilder) StructToSchema(t *testing.T, structObj reflect.Type, pat
schema.Properties[k] = v
}
} else {
- require.NotEmpty(t, n, fullFieldName)
+ require.NotEmpty(t, n, fullFieldName, inline)
schema.Properties[n] = *s
}
}
diff --git a/pkg/apis/networking/definitions.go b/pkg/apis/networking/definitions.go
new file mode 100644
index 000000000..629edad93
--- /dev/null
+++ b/pkg/apis/networking/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 networking
+
+const (
+ ArangoRouteCRDName = ArangoRouteResourcePlural + "." + ArangoNetworkingGroupName
+ ArangoRouteResourceKind = "ArangoRoute"
+ ArangoRouteResourcePlural = "arangoroutes"
+
+ ArangoNetworkingGroupName = "networking.arangodb.com"
+)
diff --git a/pkg/apis/networking/v1alpha1/doc.go b/pkg/apis/networking/v1alpha1/doc.go
new file mode 100644
index 000000000..441bd1b92
--- /dev/null
+++ b/pkg/apis/networking/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=networking.arangodb.com
+package v1alpha1
diff --git a/pkg/apis/networking/v1alpha1/register.go b/pkg/apis/networking/v1alpha1/register.go
new file mode 100644
index 000000000..af7697c9f
--- /dev/null
+++ b/pkg/apis/networking/v1alpha1/register.go
@@ -0,0 +1,52 @@
+//
+// 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 (
+ ArangoNetworkingVersion = "v1alpha1"
+)
+
+var (
+ SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
+ AddToScheme = SchemeBuilder.AddToScheme
+
+ SchemeGroupVersion = schema.GroupVersion{Group: networking.ArangoNetworkingGroupName, Version: ArangoNetworkingVersion}
+)
+
+// 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)
+ meta.AddToGroupVersion(s, SchemeGroupVersion)
+ return nil
+}
diff --git a/pkg/apis/networking/v1alpha1/route.go b/pkg/apis/networking/v1alpha1/route.go
new file mode 100644
index 000000000..4b47f3dcc
--- /dev/null
+++ b/pkg/apis/networking/v1alpha1/route.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
+
+// ArangoRouteList is a list of Arango Routes.
+type ArangoRouteList struct {
+ meta.TypeMeta `json:",inline"`
+ meta.ListMeta `json:"metadata,omitempty"`
+
+ Items []ArangoRoute `json:"items"`
+}
+
+// +genclient
+// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
+
+// ArangoRoute contains definition and status of the Arango Route.
+type ArangoRoute struct {
+ meta.TypeMeta `json:",inline"`
+ meta.ObjectMeta `json:"metadata,omitempty"`
+
+ Spec ArangoRouteSpec `json:"spec"`
+ Status ArangoRouteStatus `json:"status"`
+}
+
+// AsOwner creates an OwnerReference for the given Extension
+func (a *ArangoRoute) AsOwner() meta.OwnerReference {
+ trueVar := true
+ return meta.OwnerReference{
+ APIVersion: SchemeGroupVersion.String(),
+ Kind: networking.ArangoRouteResourceKind,
+ Name: a.Name,
+ UID: a.UID,
+ Controller: &trueVar,
+ }
+}
+
+func (a *ArangoRoute) GetStatus() ArangoRouteStatus {
+ return a.Status
+}
+
+func (a *ArangoRoute) SetStatus(status ArangoRouteStatus) {
+ a.Status = status
+}
diff --git a/pkg/apis/networking/v1alpha1/route_spec.go b/pkg/apis/networking/v1alpha1/route_spec.go
new file mode 100644
index 000000000..d98caf3ca
--- /dev/null
+++ b/pkg/apis/networking/v1alpha1/route_spec.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"
+
+type ArangoRouteSpec struct {
+ // Deployment specifies the ArangoDeployment object name
+ Deployment string `json:"deployment,omitempty"`
+
+ // Destination defines the route destination
+ Destination *ArangoRouteSpecDestination `json:"destination,omitempty"`
+
+ // Route defines the route spec
+ Route *ArangoRouteSpecRoute `json:"route,omitempty"`
+}
+
+func (s *ArangoRouteSpec) Validate() error {
+ if s == nil {
+ s = &ArangoRouteSpec{}
+ }
+
+ if err := shared.WithErrors(shared.PrefixResourceErrors("spec",
+ shared.PrefixResourceError("deployment", shared.ValidateResourceName(s.Deployment)),
+ shared.ValidateRequiredInterfacePath("destination", s.Destination),
+ shared.ValidateRequiredInterfacePath("route", s.Route),
+ )); err != nil {
+ return err
+ }
+
+ return nil
+}
diff --git a/pkg/apis/networking/v1alpha1/route_spec_destination.go b/pkg/apis/networking/v1alpha1/route_spec_destination.go
new file mode 100644
index 000000000..e491bea21
--- /dev/null
+++ b/pkg/apis/networking/v1alpha1/route_spec_destination.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"
+
+type ArangoRouteSpecDestination struct {
+ // Service defines service upstream reference
+ Service *ArangoRouteSpecDestinationService `json:"service,omitempty"`
+
+ // Schema defines HTTP/S schema used for connection
+ Schema *ArangoRouteSpecDestinationSchema `json:"schema,omitempty"`
+
+ // TLS defines TLS Configuration
+ TLS *ArangoRouteSpecDestinationTLS `json:"tls,omitempty"`
+}
+
+func (s *ArangoRouteSpecDestination) Validate() error {
+ if s == nil {
+ s = &ArangoRouteSpecDestination{}
+ }
+
+ if err := shared.WithErrors(
+ shared.ValidateOptionalInterfacePath("service", s.Service),
+ shared.ValidateOptionalInterfacePath("schema", s.Schema),
+ shared.ValidateOptionalInterfacePath("tls", s.TLS),
+ ); err != nil {
+ return err
+ }
+
+ return nil
+}
diff --git a/pkg/apis/networking/v1alpha1/route_spec_destination_schema.go b/pkg/apis/networking/v1alpha1/route_spec_destination_schema.go
new file mode 100644
index 000000000..6ad96e2a5
--- /dev/null
+++ b/pkg/apis/networking/v1alpha1/route_spec_destination_schema.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 ArangoRouteSpecDestinationSchema string
+
+const (
+ ArangoRouteSpecDestinationSchemaHTTP ArangoRouteSpecDestinationSchema = "http"
+ ArangoRouteSpecDestinationSchemaHTTPS ArangoRouteSpecDestinationSchema = "https"
+ ArangoRouteSpecDestinationSchemaDefault = ArangoRouteSpecDestinationSchemaHTTP
+)
+
+func (a *ArangoRouteSpecDestinationSchema) Get() ArangoRouteSpecDestinationSchema {
+ if a == nil {
+ return ArangoRouteSpecDestinationSchemaDefault
+ }
+
+ return ArangoRouteSpecDestinationSchema(strings.ToLower(string(*a)))
+}
+
+func (a *ArangoRouteSpecDestinationSchema) String() string {
+ return string(a.Get())
+}
+
+func (a *ArangoRouteSpecDestinationSchema) Validate() error {
+ switch x := a.Get(); x {
+ case ArangoRouteSpecDestinationSchemaHTTP, ArangoRouteSpecDestinationSchemaHTTPS:
+ return nil
+ default:
+ return errors.Errorf("Invalid schema: %s", x.String())
+ }
+}
diff --git a/pkg/apis/networking/v1alpha1/route_spec_destination_service.go b/pkg/apis/networking/v1alpha1/route_spec_destination_service.go
new file mode 100644
index 000000000..af55e3edc
--- /dev/null
+++ b/pkg/apis/networking/v1alpha1/route_spec_destination_service.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 v1alpha1
+
+import (
+ "k8s.io/apimachinery/pkg/util/intstr"
+
+ shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
+ sharedApi "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1"
+)
+
+type ArangoRouteSpecDestinationService struct {
+ *sharedApi.Object `json:",inline,omitempty"`
+
+ // Port defines Port or Port Name used as destination
+ // +doc/type: intstr.IntOrString
+ // +doc/link: Documentation|https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/
+ Port *intstr.IntOrString `json:"port,omitempty"`
+}
+
+func (s *ArangoRouteSpecDestinationService) Validate() error {
+ if s == nil {
+ s = &ArangoRouteSpecDestinationService{}
+ }
+
+ if err := shared.WithErrors(s.Object.Validate()); err != nil {
+ return err
+ }
+
+ return nil
+}
diff --git a/pkg/apis/networking/v1alpha1/route_spec_destination_tls.go b/pkg/apis/networking/v1alpha1/route_spec_destination_tls.go
new file mode 100644
index 000000000..e5fdb3449
--- /dev/null
+++ b/pkg/apis/networking/v1alpha1/route_spec_destination_tls.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 v1alpha1
+
+type ArangoRouteSpecDestinationTLS struct {
+ // Insecure allows Insecure traffic
+ Insecure *bool `json:"insecure,omitempty"`
+}
+
+func (s *ArangoRouteSpecDestinationTLS) Validate() error {
+ return nil
+}
diff --git a/pkg/apis/networking/v1alpha1/route_spec_route.go b/pkg/apis/networking/v1alpha1/route_spec_route.go
new file mode 100644
index 000000000..018396094
--- /dev/null
+++ b/pkg/apis/networking/v1alpha1/route_spec_route.go
@@ -0,0 +1,52 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package v1alpha1
+
+import (
+ shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
+)
+
+type ArangoRouteSpecRoute struct {
+ // Path specifies the Path route
+ Path *string `json:"path,omitempty"`
+}
+
+func (s *ArangoRouteSpecRoute) GetPath() string {
+ if s == nil && s.Path == nil {
+ return "/"
+ }
+
+ return *s.Path
+}
+
+func (s *ArangoRouteSpecRoute) Validate() error {
+ if s == nil {
+ s = &ArangoRouteSpecRoute{}
+ }
+
+ if err := shared.WithErrors(
+ shared.PrefixResourceError("path", shared.ValidateAPIPath(s.GetPath())),
+ ); err != nil {
+ return err
+ }
+
+ return nil
+}
diff --git a/pkg/apis/networking/v1alpha1/route_status.go b/pkg/apis/networking/v1alpha1/route_status.go
new file mode 100644
index 000000000..514db9e44
--- /dev/null
+++ b/pkg/apis/networking/v1alpha1/route_status.go
@@ -0,0 +1,29 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Copyright holder is ArangoDB GmbH, Cologne, Germany
+//
+
+package v1alpha1
+
+import api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
+
+type ArangoRouteStatus struct {
+ // Conditions specific to the entire extension
+ // +doc/type: api.Conditions
+ Conditions api.ConditionList `json:"conditions,omitempty"`
+}
diff --git a/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go
new file mode 100644
index 000000000..6b2e00ac8
--- /dev/null
+++ b/pkg/apis/networking/v1alpha1/zz_generated.deepcopy.go
@@ -0,0 +1,242 @@
+//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"
+ intstr "k8s.io/apimachinery/pkg/util/intstr"
+)
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ArangoRoute) DeepCopyInto(out *ArangoRoute) {
+ *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 ArangoRoute.
+func (in *ArangoRoute) DeepCopy() *ArangoRoute {
+ if in == nil {
+ return nil
+ }
+ out := new(ArangoRoute)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ArangoRoute) 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 *ArangoRouteList) DeepCopyInto(out *ArangoRouteList) {
+ *out = *in
+ out.TypeMeta = in.TypeMeta
+ in.ListMeta.DeepCopyInto(&out.ListMeta)
+ if in.Items != nil {
+ in, out := &in.Items, &out.Items
+ *out = make([]ArangoRoute, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoRouteList.
+func (in *ArangoRouteList) DeepCopy() *ArangoRouteList {
+ if in == nil {
+ return nil
+ }
+ out := new(ArangoRouteList)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ArangoRouteList) 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 *ArangoRouteSpec) DeepCopyInto(out *ArangoRouteSpec) {
+ *out = *in
+ if in.Destination != nil {
+ in, out := &in.Destination, &out.Destination
+ *out = new(ArangoRouteSpecDestination)
+ (*in).DeepCopyInto(*out)
+ }
+ if in.Route != nil {
+ in, out := &in.Route, &out.Route
+ *out = new(ArangoRouteSpecRoute)
+ (*in).DeepCopyInto(*out)
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoRouteSpec.
+func (in *ArangoRouteSpec) DeepCopy() *ArangoRouteSpec {
+ if in == nil {
+ return nil
+ }
+ out := new(ArangoRouteSpec)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ArangoRouteSpecDestination) DeepCopyInto(out *ArangoRouteSpecDestination) {
+ *out = *in
+ if in.Service != nil {
+ in, out := &in.Service, &out.Service
+ *out = new(ArangoRouteSpecDestinationService)
+ (*in).DeepCopyInto(*out)
+ }
+ if in.Schema != nil {
+ in, out := &in.Schema, &out.Schema
+ *out = new(ArangoRouteSpecDestinationSchema)
+ **out = **in
+ }
+ if in.TLS != nil {
+ in, out := &in.TLS, &out.TLS
+ *out = new(ArangoRouteSpecDestinationTLS)
+ (*in).DeepCopyInto(*out)
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoRouteSpecDestination.
+func (in *ArangoRouteSpecDestination) DeepCopy() *ArangoRouteSpecDestination {
+ if in == nil {
+ return nil
+ }
+ out := new(ArangoRouteSpecDestination)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ArangoRouteSpecDestinationService) DeepCopyInto(out *ArangoRouteSpecDestinationService) {
+ *out = *in
+ if in.Object != nil {
+ in, out := &in.Object, &out.Object
+ *out = new(v1.Object)
+ (*in).DeepCopyInto(*out)
+ }
+ if in.Port != nil {
+ in, out := &in.Port, &out.Port
+ *out = new(intstr.IntOrString)
+ **out = **in
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoRouteSpecDestinationService.
+func (in *ArangoRouteSpecDestinationService) DeepCopy() *ArangoRouteSpecDestinationService {
+ if in == nil {
+ return nil
+ }
+ out := new(ArangoRouteSpecDestinationService)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ArangoRouteSpecDestinationTLS) DeepCopyInto(out *ArangoRouteSpecDestinationTLS) {
+ *out = *in
+ if in.Insecure != nil {
+ in, out := &in.Insecure, &out.Insecure
+ *out = new(bool)
+ **out = **in
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoRouteSpecDestinationTLS.
+func (in *ArangoRouteSpecDestinationTLS) DeepCopy() *ArangoRouteSpecDestinationTLS {
+ if in == nil {
+ return nil
+ }
+ out := new(ArangoRouteSpecDestinationTLS)
+ 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
+ if in.Path != nil {
+ in, out := &in.Path, &out.Path
+ *out = new(string)
+ **out = **in
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoRouteSpecRoute.
+func (in *ArangoRouteSpecRoute) DeepCopy() *ArangoRouteSpecRoute {
+ if in == nil {
+ return nil
+ }
+ out := new(ArangoRouteSpecRoute)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ArangoRouteStatus) DeepCopyInto(out *ArangoRouteStatus) {
+ *out = *in
+ if in.Conditions != nil {
+ in, out := &in.Conditions, &out.Conditions
+ *out = make(deploymentv1.ConditionList, len(*in))
+ for i := range *in {
+ (*in)[i].DeepCopyInto(&(*out)[i])
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoRouteStatus.
+func (in *ArangoRouteStatus) DeepCopy() *ArangoRouteStatus {
+ if in == nil {
+ return nil
+ }
+ out := new(ArangoRouteStatus)
+ in.DeepCopyInto(out)
+ return out
+}
diff --git a/pkg/apis/shared/validate.go b/pkg/apis/shared/validate.go
index 7d221de38..e415d4fff 100644
--- a/pkg/apis/shared/validate.go
+++ b/pkg/apis/shared/validate.go
@@ -33,12 +33,17 @@ import (
var (
resourceNameRE = regexp.MustCompile(`^([0-9\-\.a-z])+$`)
+ apiPathRE = regexp.MustCompile(`^/([A-Za-z0-9\-]+/)*$`)
)
const (
ServiceTypeNone core.ServiceType = "None"
)
+type ValidateInterface interface {
+ Validate() error
+}
+
// ValidateResourceName validates a kubernetes resource name.
// If not valid, an error is returned.
// See https://kubernetes.io/docs/concepts/overview/working-with-objects/names/
@@ -70,6 +75,19 @@ func ValidateUID(uid types.UID) error {
return err
}
+// ValidateAPIPath validates if it is valid API Path
+func ValidateAPIPath(path string) error {
+ if path == "" {
+ return nil
+ }
+
+ if apiPathRE.MatchString(path) {
+ return nil
+ }
+
+ return errors.WithStack(errors.Errorf("String '%s' is not a valid api path", path))
+}
+
// ValidatePullPolicy Validates core.PullPolicy
func ValidatePullPolicy(in core.PullPolicy) error {
switch in {
@@ -80,19 +98,19 @@ func ValidatePullPolicy(in core.PullPolicy) error {
return errors.Errorf("Unknown pull policy: '%s'", string(in))
}
-type ValidateInterface interface {
- Validate() error
-}
-
func Validate[T interface{}](in T) error {
- return validate(in)
+ res, _ := validate(in)
+ return res
}
-func validate(in any) error {
- if v, ok := in.(ValidateInterface); ok {
- return v.Validate()
+func validate(in any) (error, bool) {
+ if in == nil {
+ return nil, false
}
- return nil
+ if v, ok := in.(ValidateInterface); ok {
+ return v.Validate(), true
+ }
+ return nil, false
}
// ValidateOptional Validates object if is not nil
@@ -104,6 +122,17 @@ func ValidateOptional[T interface{}](in *T, validator func(T) error) error {
return nil
}
+// ValidateOptionalInterface Validates object if is not nil
+func ValidateOptionalInterface[T ValidateInterface](in T) error {
+ res, _ := validate(in)
+ return res
+}
+
+// ValidateOptionalInterfacePath Validates object if is not nil with path
+func ValidateOptionalInterfacePath[T ValidateInterface](path string, in T) error {
+ return PrefixResourceError(path, ValidateOptionalInterface(in))
+}
+
// ValidateRequired Validates object and required not nil value
func ValidateRequired[T interface{}](in *T, validator func(T) error) error {
if in != nil {
@@ -113,6 +142,20 @@ func ValidateRequired[T interface{}](in *T, validator func(T) error) error {
return errors.Errorf("should be not nil")
}
+// ValidateRequiredInterface Validates object if is not nil
+func ValidateRequiredInterface[T ValidateInterface](in T) error {
+ res, ok := validate(in)
+ if !ok {
+ return errors.Errorf("should be not nil")
+ }
+ return res
+}
+
+// ValidateRequiredInterfacePath Validates object if is not nil with path
+func ValidateRequiredInterfacePath[T ValidateInterface](path string, in T) error {
+ return PrefixResourceError(path, ValidateRequiredInterface(in))
+}
+
// ValidateList validates all elements on the list
func ValidateList[T interface{}](in []T, validator func(T) error) error {
errors := make([]error, len(in))
diff --git a/pkg/apis/shared/validate_test.go b/pkg/apis/shared/validate_test.go
index 06dad2c24..31b7f6787 100644
--- a/pkg/apis/shared/validate_test.go
+++ b/pkg/apis/shared/validate_test.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.
@@ -31,3 +31,14 @@ func Test_ValidateUID(t *testing.T) {
require.Error(t, ValidateUID(""))
require.NoError(t, ValidateUID(uuid.NewUUID()))
}
+
+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/"))
+ require.NoError(t, ValidateAPIPath("/api/test/qw/"))
+ require.NoError(t, ValidateAPIPath("/api/test/2/"))
+ require.Error(t, ValidateAPIPath("/&/"))
+}
diff --git a/pkg/crd/crds/crds.go b/pkg/crd/crds/crds.go
index 6afef097c..8158a8745 100644
--- a/pkg/crd/crds/crds.go
+++ b/pkg/crd/crds/crds.go
@@ -90,6 +90,9 @@ func AllDefinitions() []Definition {
// Analytics
AnalyticsGAEDefinitionWithOptions(),
+
+ // Networking
+ NetworkingRouteDefinitionWithOptions(),
}
}
diff --git a/pkg/crd/crds/crds_test.go b/pkg/crd/crds/crds_test.go
index 6f558f4eb..60368f107 100644
--- a/pkg/crd/crds/crds_test.go
+++ b/pkg/crd/crds/crds_test.go
@@ -144,6 +144,7 @@ func Test_CRDGetters(t *testing.T) {
StorageLocalStorageWithOptions,
SchedulerProfileWithOptions,
AnalyticsGAEWithOptions,
+ NetworkingRouteWithOptions,
}
require.Equal(t, len(AllDefinitions()), len(getters))
diff --git a/pkg/crd/crds/networking-route.go b/pkg/crd/crds/networking-route.go
new file mode 100644
index 000000000..fd570e313
--- /dev/null
+++ b/pkg/crd/crds/networking-route.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 NetworkingRouteWithOptions(opts ...func(*CRDOptions)) *apiextensions.CustomResourceDefinition {
+ return getCRD(NetworkingRouteDefinitionData(), opts...)
+}
+
+func NetworkingRouteDefinitionWithOptions(opts ...func(*CRDOptions)) Definition {
+ return Definition{
+ DefinitionData: NetworkingRouteDefinitionData(),
+ CRD: NetworkingRouteWithOptions(opts...),
+ }
+}
+
+func NetworkingRouteDefinitionData() DefinitionData {
+ return DefinitionData{
+ definition: networkingRoute,
+ schemaDefinition: networkingRouteSchemaRaw,
+ }
+}
+
+//go:embed networking-route.yaml
+var networkingRoute []byte
+
+//go:embed networking-route.schema.generated.yaml
+var networkingRouteSchemaRaw []byte
diff --git a/pkg/crd/crds/networking-route.schema.generated.yaml b/pkg/crd/crds/networking-route.schema.generated.yaml
new file mode 100644
index 000000000..ee0df1501
--- /dev/null
+++ b/pkg/crd/crds/networking-route.schema.generated.yaml
@@ -0,0 +1,55 @@
+v1alpha1:
+ openAPIV3Schema:
+ properties:
+ spec:
+ properties:
+ deployment:
+ description: Deployment specifies the ArangoDeployment object name
+ type: string
+ destination:
+ description: Destination defines the route destination
+ properties:
+ schema:
+ description: Schema defines HTTP/S schema used for connection
+ type: string
+ service:
+ description: Service defines service upstream reference
+ 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
+ port:
+ description: Port defines Port or Port Name used as destination
+ type: string
+ x-kubernetes-int-or-string: true
+ uid:
+ description: UID keeps the information about object UID
+ type: string
+ type: object
+ tls:
+ description: TLS defines TLS Configuration
+ properties:
+ insecure:
+ description: Insecure allows Insecure traffic
+ type: boolean
+ type: object
+ type: object
+ route:
+ description: Route defines the route spec
+ properties:
+ path:
+ description: Path specifies the Path route
+ 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/networking-route.yaml b/pkg/crd/crds/networking-route.yaml
new file mode 100644
index 000000000..514c0763f
--- /dev/null
+++ b/pkg/crd/crds/networking-route.yaml
@@ -0,0 +1,22 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: arangoroutes.networking.arangodb.com
+spec:
+ group: networking.arangodb.com
+ names:
+ kind: ArangoRoute
+ listKind: ArangoRouteList
+ plural: arangoroutes
+ singular: arangoroute
+ 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/networking.go b/pkg/crd/networking.go
new file mode 100644
index 000000000..911892724
--- /dev/null
+++ b/pkg/crd/networking.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.NetworkingRouteDefinitionWithOptions,
+ }
+ 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/ar.go b/pkg/deployment/resources/inspector/ar.go
new file mode 100644
index 000000000..cdb37e4c5
--- /dev/null
+++ b/pkg/deployment/resources/inspector/ar.go
@@ -0,0 +1,192 @@
+//
+// 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"
+ "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/definitions"
+ "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
+ "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version"
+)
+
+func init() {
+ requireRegisterInspectorLoader(arangoRoutesInspectorLoaderObj)
+}
+
+var arangoRoutesInspectorLoaderObj = arangoRoutesInspectorLoader{}
+
+type arangoRoutesInspectorLoader struct {
+}
+
+func (p arangoRoutesInspectorLoader) Component() definitions.Component {
+ return definitions.ArangoRoute
+}
+
+func (p arangoRoutesInspectorLoader) Load(ctx context.Context, i *inspectorState) {
+ var q arangoRoutesInspector
+ p.loadV1Alpha1(ctx, i, &q)
+ 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
+}
+
+func (p arangoRoutesInspectorLoader) Copy(from, to *inspectorState, override bool) {
+ if to.arangoRoutes != nil {
+ if !override {
+ return
+ }
+ }
+
+ to.arangoRoutes = from.arangoRoutes
+ to.arangoRoutes.state = to
+}
+
+func (p arangoRoutesInspectorLoader) Name() string {
+ return "arangoRoutes"
+}
+
+type arangoRoutesInspector struct {
+ state *inspectorState
+
+ last time.Time
+
+ v1alpha1 *arangoRoutesInspectorV1Alpha1
+}
+
+func (p *arangoRoutesInspector) LastRefresh() time.Time {
+ return p.last
+}
+
+func (p *arangoRoutesInspector) Refresh(ctx context.Context) error {
+ p.Throttle(p.state.throttles).Invalidate()
+ return p.state.refresh(ctx, arangoRoutesInspectorLoaderObj)
+}
+
+func (p *arangoRoutesInspector) Version() version.Version {
+ return version.V1
+}
+
+func (p *arangoRoutesInspector) Throttle(c throttle.Components) throttle.Throttle {
+ return c.ArangoRoute()
+}
+
+func (p *arangoRoutesInspector) validate() error {
+ if p == nil {
+ return errors.Errorf("ArangoRouteInspector is nil")
+ }
+
+ if p.state == nil {
+ return errors.Errorf("Parent is nil")
+ }
+
+ return p.v1alpha1.validate()
+}
diff --git a/pkg/deployment/resources/inspector/ar_anonymous.go b/pkg/deployment/resources/inspector/ar_anonymous.go
new file mode 100644
index 000000000..501ebb1e1
--- /dev/null
+++ b/pkg/deployment/resources/inspector/ar_anonymous.go
@@ -0,0 +1,45 @@
+//
+// 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 (
+ "k8s.io/apimachinery/pkg/runtime/schema"
+
+ networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1"
+ "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous"
+ "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/constants"
+)
+
+func (p *arangoRoutesInspector) Anonymous(gvk schema.GroupVersionKind) (anonymous.Interface, bool) {
+ g := constants.ArangoRouteGKv1()
+
+ if g.Kind == gvk.Kind && g.Group == gvk.Group {
+ switch gvk.Version {
+ case constants.ArangoRouteVersionV1Alpha1, DefaultVersion:
+ if p.v1alpha1 == nil || p.v1alpha1.err != nil {
+ return nil, false
+ }
+ return anonymous.NewAnonymous[*networkingApi.ArangoRoute](g, p.state.arangoRoutes.v1alpha1, p.state.ArangoRouteModInterface().V1Alpha1()), true
+ }
+ }
+
+ return nil, false
+}
diff --git a/pkg/deployment/resources/inspector/ar_gvk.go b/pkg/deployment/resources/inspector/ar_gvk.go
new file mode 100644
index 000000000..a1bb4caed
--- /dev/null
+++ b/pkg/deployment/resources/inspector/ar_gvk.go
@@ -0,0 +1,43 @@
+//
+// 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 (
+ "k8s.io/apimachinery/pkg/runtime/schema"
+
+ "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()
+}
+
+func (p *arangoRoutesInspector) GroupResource() schema.GroupResource {
+ return constants.ArangoRouteGR()
+}
diff --git a/pkg/deployment/resources/inspector/ar_mod.go b/pkg/deployment/resources/inspector/ar_mod.go
new file mode 100644
index 000000000..eb9fd854f
--- /dev/null
+++ b/pkg/deployment/resources/inspector/ar_mod.go
@@ -0,0 +1,47 @@
+//
+// 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 (
+ 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"
+)
+
+func (i *inspectorState) ArangoRouteModInterface() mods.ArangoRouteMods {
+ return arangoRouteMod{
+ i: i,
+ }
+}
+
+type arangoRouteMod struct {
+ i *inspectorState
+}
+
+func (p arangoRouteMod) V1Alpha1() arangoRoutev1.ModInterface {
+ return wrapMod[*networkingApi.ArangoRoute](definitions.ArangoRoute, p.i.GetThrottles, p.clientv1alpha1)
+}
+
+func (p arangoRouteMod) clientv1alpha1() generic.ModStatusClient[*networkingApi.ArangoRoute] {
+ return p.i.Client().Arango().NetworkingV1alpha1().ArangoRoutes(p.i.Namespace())
+}
diff --git a/pkg/deployment/resources/inspector/ar_v1alpha1.go b/pkg/deployment/resources/inspector/ar_v1alpha1.go
new file mode 100644
index 000000000..7d7c0d655
--- /dev/null
+++ b/pkg/deployment/resources/inspector/ar_v1alpha1.go
@@ -0,0 +1,138 @@
+//
+// 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/inspector.go b/pkg/deployment/resources/inspector/inspector.go
index 55bcb6d0e..d28fae726 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/arangoroute"
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangotask"
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/endpoints"
@@ -134,6 +135,7 @@ type inspectorState struct {
serviceMonitors *serviceMonitorsInspector
arangoMembers *arangoMembersInspector
arangoTasks *arangoTasksInspector
+ arangoRoutes *arangoRoutesInspector
arangoClusterSynchronizations *arangoClusterSynchronizationsInspector
endpoints *endpointsInspector
@@ -167,6 +169,10 @@ func (i *inspectorState) RegisterInformers(k8s informers.SharedInformerFactory,
arango.Database().V1().ArangoTasks().Informer().AddEventHandler(i.eventHandler(definitions.ArangoTask))
}
+ if _, err := i.ArangoRoute().V1Alpha1(); err == nil {
+ arango.Networking().V1alpha1().ArangoRoutes().Informer().AddEventHandler(i.eventHandler(definitions.ArangoRoute))
+ }
+
if _, err := i.ArangoClusterSynchronization().V1(); err == nil {
arango.Database().V1().ArangoClusterSynchronizations().Informer().AddEventHandler(i.eventHandler(definitions.ArangoClusterSynchronization))
}
@@ -225,6 +231,7 @@ func (i *inspectorState) AnonymousObjects() []anonymous.Impl {
i.serviceMonitors,
i.arangoMembers,
i.arangoTasks,
+ i.arangoRoutes,
i.arangoClusterSynchronizations,
i.endpoints,
}
@@ -317,6 +324,10 @@ func (i *inspectorState) ArangoTask() arangotask.Definition {
return i.arangoTasks
}
+func (i *inspectorState) ArangoRoute() arangoroute.Definition {
+ return i.arangoRoutes
+}
+
func (i *inspectorState) Refresh(ctx context.Context) error {
return i.refresh(ctx, inspectorLoadersList...)
}
@@ -464,6 +475,10 @@ func (i *inspectorState) validate() error {
return err
}
+ if err := i.arangoRoutes.validate(); err != nil {
+ return err
+ }
+
if err := i.arangoTasks.validate(); err != nil {
return err
}
@@ -495,6 +510,7 @@ func (i *inspectorState) copyCore() *inspectorState {
serviceMonitors: i.serviceMonitors,
arangoMembers: i.arangoMembers,
arangoTasks: i.arangoTasks,
+ arangoRoutes: i.arangoRoutes,
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 c856fcd0c..848a92189 100644
--- a/pkg/deployment/resources/inspector/inspector_test.go
+++ b/pkg/deployment/resources/inspector/inspector_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.
@@ -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)
+ 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)
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)
+ 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)
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 1ab15bbb3..cea38d963 100644
--- a/pkg/deployment/resources/inspector/pdbs_version_test.go
+++ b/pkg/deployment/resources/inspector/pdbs_version_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.
@@ -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)
+ 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)
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 15345ca03..39cf020b1 100644
--- a/pkg/deployment/resources/inspector/throttles.go
+++ b/pkg/deployment/resources/inspector/throttles.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.
@@ -31,6 +31,7 @@ func NewDefaultThrottle() throttle.Components {
30*time.Second, // ArangoDeploymentSynchronization
30*time.Second, // ArangoMember
30*time.Second, // ArangoTask
+ 30*time.Second, // ArangoRoute
30*time.Second, // Node
30*time.Second, // PV
15*time.Second, // PVC
diff --git a/pkg/generated/clientset/versioned/clientset.go b/pkg/generated/clientset/versioned/clientset.go
index d2f139f70..a4de07d21 100644
--- a/pkg/generated/clientset/versioned/clientset.go
+++ b/pkg/generated/clientset/versioned/clientset.go
@@ -33,6 +33,7 @@ import (
databasev2alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/deployment/v2alpha1"
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"
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"
@@ -52,6 +53,7 @@ type Interface interface {
DatabaseV2alpha1() databasev2alpha1.DatabaseV2alpha1Interface
MlV1alpha1() mlv1alpha1.MlV1alpha1Interface
MlV1beta1() mlv1beta1.MlV1beta1Interface
+ NetworkingV1alpha1() networkingv1alpha1.NetworkingV1alpha1Interface
ReplicationV1() replicationv1.ReplicationV1Interface
ReplicationV2alpha1() replicationv2alpha1.ReplicationV2alpha1Interface
SchedulerV1alpha1() schedulerv1alpha1.SchedulerV1alpha1Interface
@@ -69,6 +71,7 @@ type Clientset struct {
databaseV2alpha1 *databasev2alpha1.DatabaseV2alpha1Client
mlV1alpha1 *mlv1alpha1.MlV1alpha1Client
mlV1beta1 *mlv1beta1.MlV1beta1Client
+ networkingV1alpha1 *networkingv1alpha1.NetworkingV1alpha1Client
replicationV1 *replicationv1.ReplicationV1Client
replicationV2alpha1 *replicationv2alpha1.ReplicationV2alpha1Client
schedulerV1alpha1 *schedulerv1alpha1.SchedulerV1alpha1Client
@@ -111,6 +114,11 @@ func (c *Clientset) MlV1beta1() mlv1beta1.MlV1beta1Interface {
return c.mlV1beta1
}
+// NetworkingV1alpha1 retrieves the NetworkingV1alpha1Client
+func (c *Clientset) NetworkingV1alpha1() networkingv1alpha1.NetworkingV1alpha1Interface {
+ return c.networkingV1alpha1
+}
+
// ReplicationV1 retrieves the ReplicationV1Client
func (c *Clientset) ReplicationV1() replicationv1.ReplicationV1Interface {
return c.replicationV1
@@ -208,6 +216,10 @@ func NewForConfigAndClient(c *rest.Config, httpClient *http.Client) (*Clientset,
if err != nil {
return nil, err
}
+ cs.networkingV1alpha1, err = networkingv1alpha1.NewForConfigAndClient(&configShallowCopy, httpClient)
+ if err != nil {
+ return nil, err
+ }
cs.replicationV1, err = replicationv1.NewForConfigAndClient(&configShallowCopy, httpClient)
if err != nil {
return nil, err
@@ -256,6 +268,7 @@ func New(c rest.Interface) *Clientset {
cs.databaseV2alpha1 = databasev2alpha1.New(c)
cs.mlV1alpha1 = mlv1alpha1.New(c)
cs.mlV1beta1 = mlv1beta1.New(c)
+ cs.networkingV1alpha1 = networkingv1alpha1.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 499793aa7..661164523 100644
--- a/pkg/generated/clientset/versioned/fake/clientset_generated.go
+++ b/pkg/generated/clientset/versioned/fake/clientset_generated.go
@@ -38,6 +38,8 @@ import (
fakemlv1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake"
mlv1beta1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/ml/v1beta1"
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"
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"
@@ -140,6 +142,11 @@ func (c *Clientset) MlV1beta1() mlv1beta1.MlV1beta1Interface {
return &fakemlv1beta1.FakeMlV1beta1{Fake: &c.Fake}
}
+// NetworkingV1alpha1 retrieves the NetworkingV1alpha1Client
+func (c *Clientset) NetworkingV1alpha1() networkingv1alpha1.NetworkingV1alpha1Interface {
+ return &fakenetworkingv1alpha1.FakeNetworkingV1alpha1{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 2f65785ee..1804338cb 100644
--- a/pkg/generated/clientset/versioned/fake/register.go
+++ b/pkg/generated/clientset/versioned/fake/register.go
@@ -30,6 +30,7 @@ import (
databasev2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1"
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"
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"
@@ -53,6 +54,7 @@ var localSchemeBuilder = runtime.SchemeBuilder{
databasev2alpha1.AddToScheme,
mlv1alpha1.AddToScheme,
mlv1beta1.AddToScheme,
+ networkingv1alpha1.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 cdaeb9465..3e5ad3944 100644
--- a/pkg/generated/clientset/versioned/scheme/register.go
+++ b/pkg/generated/clientset/versioned/scheme/register.go
@@ -30,6 +30,7 @@ import (
databasev2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1"
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"
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"
@@ -53,6 +54,7 @@ var localSchemeBuilder = runtime.SchemeBuilder{
databasev2alpha1.AddToScheme,
mlv1alpha1.AddToScheme,
mlv1beta1.AddToScheme,
+ networkingv1alpha1.AddToScheme,
replicationv1.AddToScheme,
replicationv2alpha1.AddToScheme,
schedulerv1alpha1.AddToScheme,
diff --git a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/arangoroute.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/arangoroute.go
new file mode 100644
index 000000000..7713adf9a
--- /dev/null
+++ b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/arangoroute.go
@@ -0,0 +1,199 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 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"
+ "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"
+)
+
+// ArangoRoutesGetter has a method to return a ArangoRouteInterface.
+// A group's client should implement this interface.
+type ArangoRoutesGetter interface {
+ ArangoRoutes(namespace string) ArangoRouteInterface
+}
+
+// ArangoRouteInterface has methods to work with ArangoRoute resources.
+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)
+ 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
+ Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.ArangoRoute, error)
+ List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.ArangoRouteList, 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.ArangoRoute, err error)
+ ArangoRouteExpansion
+}
+
+// arangoRoutes implements ArangoRouteInterface
+type arangoRoutes struct {
+ client rest.Interface
+ ns string
+}
+
+// newArangoRoutes returns a ArangoRoutes
+func newArangoRoutes(c *NetworkingV1alpha1Client, namespace string) *arangoRoutes {
+ return &arangoRoutes{
+ client: c.RESTClient(),
+ ns: namespace,
+ }
+}
+
+// Get takes name of the arangoRoute, and returns the corresponding arangoRoute object, and an error if there is any.
+func (c *arangoRoutes) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoRoute, err error) {
+ result = &v1alpha1.ArangoRoute{}
+ err = c.client.Get().
+ Namespace(c.ns).
+ Resource("arangoroutes").
+ Name(name).
+ VersionedParams(&options, scheme.ParameterCodec).
+ Do(ctx).
+ Into(result)
+ return
+}
+
+// List takes label and field selectors, and returns the list of ArangoRoutes that match those selectors.
+func (c *arangoRoutes) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoRouteList, err error) {
+ var timeout time.Duration
+ if opts.TimeoutSeconds != nil {
+ timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
+ }
+ result = &v1alpha1.ArangoRouteList{}
+ err = c.client.Get().
+ Namespace(c.ns).
+ Resource("arangoroutes").
+ VersionedParams(&opts, scheme.ParameterCodec).
+ Timeout(timeout).
+ Do(ctx).
+ Into(result)
+ return
+}
+
+// Watch returns a watch.Interface that watches the requested arangoRoutes.
+func (c *arangoRoutes) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+ var timeout time.Duration
+ if opts.TimeoutSeconds != nil {
+ timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
+ }
+ opts.Watch = true
+ return c.client.Get().
+ Namespace(c.ns).
+ Resource("arangoroutes").
+ VersionedParams(&opts, scheme.ParameterCodec).
+ Timeout(timeout).
+ Watch(ctx)
+}
+
+// Create takes the representation of a arangoRoute and creates it. Returns the server's representation of the arangoRoute, and an error, if there is any.
+func (c *arangoRoutes) Create(ctx context.Context, arangoRoute *v1alpha1.ArangoRoute, opts v1.CreateOptions) (result *v1alpha1.ArangoRoute, err error) {
+ result = &v1alpha1.ArangoRoute{}
+ err = c.client.Post().
+ Namespace(c.ns).
+ Resource("arangoroutes").
+ VersionedParams(&opts, scheme.ParameterCodec).
+ Body(arangoRoute).
+ Do(ctx).
+ Into(result)
+ return
+}
+
+// Update takes the representation of a arangoRoute and updates it. Returns the server's representation of the arangoRoute, and an error, if there is any.
+func (c *arangoRoutes) Update(ctx context.Context, arangoRoute *v1alpha1.ArangoRoute, opts v1.UpdateOptions) (result *v1alpha1.ArangoRoute, err error) {
+ result = &v1alpha1.ArangoRoute{}
+ err = c.client.Put().
+ Namespace(c.ns).
+ Resource("arangoroutes").
+ Name(arangoRoute.Name).
+ VersionedParams(&opts, scheme.ParameterCodec).
+ Body(arangoRoute).
+ Do(ctx).
+ Into(result)
+ return
+}
+
+// UpdateStatus was generated because the type contains a Status member.
+// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
+func (c *arangoRoutes) UpdateStatus(ctx context.Context, arangoRoute *v1alpha1.ArangoRoute, opts v1.UpdateOptions) (result *v1alpha1.ArangoRoute, err error) {
+ result = &v1alpha1.ArangoRoute{}
+ err = c.client.Put().
+ Namespace(c.ns).
+ Resource("arangoroutes").
+ Name(arangoRoute.Name).
+ SubResource("status").
+ VersionedParams(&opts, scheme.ParameterCodec).
+ Body(arangoRoute).
+ Do(ctx).
+ Into(result)
+ return
+}
+
+// Delete takes name of the arangoRoute and deletes it. Returns an error if one occurs.
+func (c *arangoRoutes) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+ return c.client.Delete().
+ Namespace(c.ns).
+ Resource("arangoroutes").
+ Name(name).
+ Body(&opts).
+ Do(ctx).
+ Error()
+}
+
+// DeleteCollection deletes a collection of objects.
+func (c *arangoRoutes) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
+ var timeout time.Duration
+ if listOpts.TimeoutSeconds != nil {
+ timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second
+ }
+ return c.client.Delete().
+ Namespace(c.ns).
+ Resource("arangoroutes").
+ VersionedParams(&listOpts, scheme.ParameterCodec).
+ Timeout(timeout).
+ Body(&opts).
+ Do(ctx).
+ Error()
+}
+
+// Patch applies the patch and returns the patched arangoRoute.
+func (c *arangoRoutes) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoRoute, err error) {
+ result = &v1alpha1.ArangoRoute{}
+ err = c.client.Patch(pt).
+ Namespace(c.ns).
+ Resource("arangoroutes").
+ Name(name).
+ SubResource(subresources...).
+ VersionedParams(&opts, scheme.ParameterCodec).
+ Body(data).
+ Do(ctx).
+ Into(result)
+ return
+}
diff --git a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/doc.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/doc.go
new file mode 100644
index 000000000..f45dab6c5
--- /dev/null
+++ b/pkg/generated/clientset/versioned/typed/networking/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/networking/v1alpha1/fake/doc.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/doc.go
new file mode 100644
index 000000000..cc487d814
--- /dev/null
+++ b/pkg/generated/clientset/versioned/typed/networking/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/networking/v1alpha1/fake/fake_arangoroute.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_arangoroute.go
new file mode 100644
index 000000000..021a9d6f7
--- /dev/null
+++ b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_arangoroute.go
@@ -0,0 +1,145 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 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/networking/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"
+)
+
+// FakeArangoRoutes implements ArangoRouteInterface
+type FakeArangoRoutes struct {
+ Fake *FakeNetworkingV1alpha1
+ ns string
+}
+
+var arangoroutesResource = v1alpha1.SchemeGroupVersion.WithResource("arangoroutes")
+
+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) {
+ obj, err := c.Fake.
+ Invokes(testing.NewGetAction(arangoroutesResource, c.ns, name), &v1alpha1.ArangoRoute{})
+
+ if obj == nil {
+ return nil, 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) {
+ obj, err := c.Fake.
+ Invokes(testing.NewListAction(arangoroutesResource, arangoroutesKind, c.ns, opts), &v1alpha1.ArangoRouteList{})
+
+ if obj == nil {
+ return nil, err
+ }
+
+ label, _, _ := testing.ExtractFromListOptions(opts)
+ if label == nil {
+ label = labels.Everything()
+ }
+ list := &v1alpha1.ArangoRouteList{ListMeta: obj.(*v1alpha1.ArangoRouteList).ListMeta}
+ for _, item := range obj.(*v1alpha1.ArangoRouteList).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 arangoRoutes.
+func (c *FakeArangoRoutes) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
+ return c.Fake.
+ InvokesWatch(testing.NewWatchAction(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) {
+ obj, err := c.Fake.
+ Invokes(testing.NewCreateAction(arangoroutesResource, c.ns, arangoRoute), &v1alpha1.ArangoRoute{})
+
+ if obj == nil {
+ return nil, 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) {
+ obj, err := c.Fake.
+ Invokes(testing.NewUpdateAction(arangoroutesResource, c.ns, arangoRoute), &v1alpha1.ArangoRoute{})
+
+ if obj == nil {
+ return nil, 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) {
+ obj, err := c.Fake.
+ Invokes(testing.NewUpdateSubresourceAction(arangoroutesResource, "status", c.ns, arangoRoute), &v1alpha1.ArangoRoute{})
+
+ if obj == nil {
+ return nil, err
+ }
+ return obj.(*v1alpha1.ArangoRoute), err
+}
+
+// Delete takes name of the arangoRoute and deletes it. Returns an error if one occurs.
+func (c *FakeArangoRoutes) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
+ _, err := c.Fake.
+ Invokes(testing.NewDeleteActionWithOptions(arangoroutesResource, c.ns, name, opts), &v1alpha1.ArangoRoute{})
+
+ return err
+}
+
+// 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)
+
+ _, err := c.Fake.Invokes(action, &v1alpha1.ArangoRouteList{})
+ return err
+}
+
+// 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) {
+ obj, err := c.Fake.
+ Invokes(testing.NewPatchSubresourceAction(arangoroutesResource, c.ns, name, pt, data, subresources...), &v1alpha1.ArangoRoute{})
+
+ if obj == nil {
+ return nil, err
+ }
+ return obj.(*v1alpha1.ArangoRoute), err
+}
diff --git a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_networking_client.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_networking_client.go
new file mode 100644
index 000000000..1e1794418
--- /dev/null
+++ b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/fake/fake_networking_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/networking/v1alpha1"
+ rest "k8s.io/client-go/rest"
+ testing "k8s.io/client-go/testing"
+)
+
+type FakeNetworkingV1alpha1 struct {
+ *testing.Fake
+}
+
+func (c *FakeNetworkingV1alpha1) ArangoRoutes(namespace string) v1alpha1.ArangoRouteInterface {
+ return &FakeArangoRoutes{c, namespace}
+}
+
+// RESTClient returns a RESTClient that is used to communicate
+// with API server by this client implementation.
+func (c *FakeNetworkingV1alpha1) RESTClient() rest.Interface {
+ var ret *rest.RESTClient
+ return ret
+}
diff --git a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/generated_expansion.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/generated_expansion.go
new file mode 100644
index 000000000..52d86c425
--- /dev/null
+++ b/pkg/generated/clientset/versioned/typed/networking/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 ArangoRouteExpansion interface{}
diff --git a/pkg/generated/clientset/versioned/typed/networking/v1alpha1/networking_client.go b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/networking_client.go
new file mode 100644
index 000000000..b8a690bff
--- /dev/null
+++ b/pkg/generated/clientset/versioned/typed/networking/v1alpha1/networking_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/networking/v1alpha1"
+ "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme"
+ rest "k8s.io/client-go/rest"
+)
+
+type NetworkingV1alpha1Interface interface {
+ RESTClient() rest.Interface
+ ArangoRoutesGetter
+}
+
+// NetworkingV1alpha1Client is used to interact with features provided by the networking.arangodb.com group.
+type NetworkingV1alpha1Client struct {
+ restClient rest.Interface
+}
+
+func (c *NetworkingV1alpha1Client) ArangoRoutes(namespace string) ArangoRouteInterface {
+ return newArangoRoutes(c, namespace)
+}
+
+// NewForConfig creates a new NetworkingV1alpha1Client for the given config.
+// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient),
+// where httpClient was generated with rest.HTTPClientFor(c).
+func NewForConfig(c *rest.Config) (*NetworkingV1alpha1Client, 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 NetworkingV1alpha1Client 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) (*NetworkingV1alpha1Client, 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 &NetworkingV1alpha1Client{client}, nil
+}
+
+// NewForConfigOrDie creates a new NetworkingV1alpha1Client for the given config and
+// panics if there is an error in the config.
+func NewForConfigOrDie(c *rest.Config) *NetworkingV1alpha1Client {
+ client, err := NewForConfig(c)
+ if err != nil {
+ panic(err)
+ }
+ return client
+}
+
+// New creates a new NetworkingV1alpha1Client for the given RESTClient.
+func New(c rest.Interface) *NetworkingV1alpha1Client {
+ return &NetworkingV1alpha1Client{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 *NetworkingV1alpha1Client) 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 484ba4ea1..180f55ea6 100644
--- a/pkg/generated/informers/externalversions/factory.go
+++ b/pkg/generated/informers/externalversions/factory.go
@@ -34,6 +34,7 @@ import (
deployment "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/deployment"
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"
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"
@@ -269,6 +270,7 @@ type SharedInformerFactory interface {
Backup() backup.Interface
Database() deployment.Interface
Ml() ml.Interface
+ Networking() networking.Interface
Replication() replication.Interface
Scheduler() scheduler.Interface
Storage() storage.Interface
@@ -294,6 +296,10 @@ func (f *sharedInformerFactory) Ml() ml.Interface {
return ml.New(f, f.namespace, f.tweakListOptions)
}
+func (f *sharedInformerFactory) Networking() networking.Interface {
+ return networking.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 108f70a45..00f3e40c3 100644
--- a/pkg/generated/informers/externalversions/generic.go
+++ b/pkg/generated/informers/externalversions/generic.go
@@ -32,6 +32,7 @@ import (
v2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1"
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"
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"
@@ -117,6 +118,10 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource
case v1beta1.SchemeGroupVersion.WithResource("arangomlstorages"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Ml().V1beta1().ArangoMLStorages().Informer()}, nil
+ // Group=networking.arangodb.com, Version=v1alpha1
+ case networkingv1alpha1.SchemeGroupVersion.WithResource("arangoroutes"):
+ return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1alpha1().ArangoRoutes().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/networking/interface.go b/pkg/generated/informers/externalversions/networking/interface.go
new file mode 100644
index 000000000..2013452d9
--- /dev/null
+++ b/pkg/generated/informers/externalversions/networking/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 networking
+
+import (
+ internalinterfaces "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/internalinterfaces"
+ v1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/networking/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/networking/v1alpha1/arangoroute.go b/pkg/generated/informers/externalversions/networking/v1alpha1/arangoroute.go
new file mode 100644
index 000000000..6544ecae6
--- /dev/null
+++ b/pkg/generated/informers/externalversions/networking/v1alpha1/arangoroute.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"
+
+ networkingv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/networking/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/networking/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"
+)
+
+// ArangoRouteInformer provides access to a shared informer and lister for
+// ArangoRoutes.
+type ArangoRouteInformer interface {
+ Informer() cache.SharedIndexInformer
+ Lister() v1alpha1.ArangoRouteLister
+}
+
+type arangoRouteInformer struct {
+ factory internalinterfaces.SharedInformerFactory
+ tweakListOptions internalinterfaces.TweakListOptionsFunc
+ namespace string
+}
+
+// NewArangoRouteInformer constructs a new informer for ArangoRoute 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 NewArangoRouteInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
+ return NewFilteredArangoRouteInformer(client, namespace, resyncPeriod, indexers, nil)
+}
+
+// NewFilteredArangoRouteInformer constructs a new informer for ArangoRoute 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 NewFilteredArangoRouteInformer(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.NetworkingV1alpha1().ArangoRoutes(namespace).List(context.TODO(), options)
+ },
+ WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
+ if tweakListOptions != nil {
+ tweakListOptions(&options)
+ }
+ return client.NetworkingV1alpha1().ArangoRoutes(namespace).Watch(context.TODO(), options)
+ },
+ },
+ &networkingv1alpha1.ArangoRoute{},
+ resyncPeriod,
+ indexers,
+ )
+}
+
+func (f *arangoRouteInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
+ return NewFilteredArangoRouteInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
+}
+
+func (f *arangoRouteInformer) Informer() cache.SharedIndexInformer {
+ return f.factory.InformerFor(&networkingv1alpha1.ArangoRoute{}, f.defaultInformer)
+}
+
+func (f *arangoRouteInformer) Lister() v1alpha1.ArangoRouteLister {
+ return v1alpha1.NewArangoRouteLister(f.Informer().GetIndexer())
+}
diff --git a/pkg/generated/informers/externalversions/networking/v1alpha1/interface.go b/pkg/generated/informers/externalversions/networking/v1alpha1/interface.go
new file mode 100644
index 000000000..316876c87
--- /dev/null
+++ b/pkg/generated/informers/externalversions/networking/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 {
+ // ArangoRoutes returns a ArangoRouteInformer.
+ ArangoRoutes() ArangoRouteInformer
+}
+
+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}
+}
+
+// ArangoRoutes returns a ArangoRouteInformer.
+func (v *version) ArangoRoutes() ArangoRouteInformer {
+ return &arangoRouteInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
+}
diff --git a/pkg/generated/listers/networking/v1alpha1/arangoroute.go b/pkg/generated/listers/networking/v1alpha1/arangoroute.go
new file mode 100644
index 000000000..737f34c10
--- /dev/null
+++ b/pkg/generated/listers/networking/v1alpha1/arangoroute.go
@@ -0,0 +1,103 @@
+//
+// DISCLAIMER
+//
+// Copyright 2024 ArangoDB GmbH, Cologne, Germany
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 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/networking/v1alpha1"
+ "k8s.io/apimachinery/pkg/api/errors"
+ "k8s.io/apimachinery/pkg/labels"
+ "k8s.io/client-go/tools/cache"
+)
+
+// ArangoRouteLister helps list ArangoRoutes.
+// All objects returned here must be treated as read-only.
+type ArangoRouteLister interface {
+ // List lists all ArangoRoutes in the indexer.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*v1alpha1.ArangoRoute, err error)
+ // ArangoRoutes returns an object that can list and get ArangoRoutes.
+ ArangoRoutes(namespace string) ArangoRouteNamespaceLister
+ ArangoRouteListerExpansion
+}
+
+// arangoRouteLister implements the ArangoRouteLister interface.
+type arangoRouteLister struct {
+ indexer cache.Indexer
+}
+
+// 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
+}
+
+// ArangoRoutes returns an object that can list and get ArangoRoutes.
+func (s *arangoRouteLister) ArangoRoutes(namespace string) ArangoRouteNamespaceLister {
+ return arangoRouteNamespaceLister{indexer: s.indexer, namespace: namespace}
+}
+
+// ArangoRouteNamespaceLister helps list and get ArangoRoutes.
+// All objects returned here must be treated as read-only.
+type ArangoRouteNamespaceLister interface {
+ // List lists all ArangoRoutes in the indexer for a given namespace.
+ // Objects returned here must be treated as read-only.
+ List(selector labels.Selector) (ret []*v1alpha1.ArangoRoute, err error)
+ // Get retrieves the ArangoRoute from the indexer for a given namespace and name.
+ // Objects returned here must be treated as read-only.
+ Get(name string) (*v1alpha1.ArangoRoute, error)
+ ArangoRouteNamespaceListerExpansion
+}
+
+// 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
+}
diff --git a/pkg/generated/listers/networking/v1alpha1/expansion_generated.go b/pkg/generated/listers/networking/v1alpha1/expansion_generated.go
new file mode 100644
index 000000000..e0d7ccab7
--- /dev/null
+++ b/pkg/generated/listers/networking/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
+
+// ArangoRouteListerExpansion allows custom methods to be added to
+// ArangoRouteLister.
+type ArangoRouteListerExpansion interface{}
+
+// ArangoRouteNamespaceListerExpansion allows custom methods to be added to
+// ArangoRouteNamespaceLister.
+type ArangoRouteNamespaceListerExpansion interface{}
diff --git a/pkg/util/k8sutil/inspector/arangoroute/definition.go b/pkg/util/k8sutil/inspector/arangoroute/definition.go
new file mode 100644
index 000000000..e78513740
--- /dev/null
+++ b/pkg/util/k8sutil/inspector/arangoroute/definition.go
@@ -0,0 +1,44 @@
+//
+// 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 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"
+)
+
+type Inspector interface {
+ ArangoRoute() Definition
+}
+
+type Definition interface {
+ refresh.Inspector
+
+ gvk.GK
+ anonymous.Impl
+
+ Version() version.Version
+
+ V1Alpha1() (v1alpha1.Inspector, error)
+}
diff --git a/pkg/util/k8sutil/inspector/arangoroute/v1alpha1/loader.go b/pkg/util/k8sutil/inspector/arangoroute/v1alpha1/loader.go
new file mode 100644
index 000000000..8fc237eed
--- /dev/null
+++ b/pkg/util/k8sutil/inspector/arangoroute/v1alpha1/loader.go
@@ -0,0 +1,53 @@
+//
+// 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 (
+ networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1"
+ "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/gvk"
+)
+
+type Inspector interface {
+ gvk.GVK
+
+ 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
+
+func FilterObject(at *networkingApi.ArangoRoute, filters ...Filter) bool {
+ for _, f := range filters {
+ if f == nil {
+ continue
+ }
+
+ if !f(at) {
+ return false
+ }
+ }
+
+ return true
+}
diff --git a/pkg/util/k8sutil/inspector/arangoroute/v1alpha1/reader.go b/pkg/util/k8sutil/inspector/arangoroute/v1alpha1/reader.go
new file mode 100644
index 000000000..bd51d3ef6
--- /dev/null
+++ b/pkg/util/k8sutil/inspector/arangoroute/v1alpha1/reader.go
@@ -0,0 +1,50 @@
+//
+// 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/constants/ar_constants.go b/pkg/util/k8sutil/inspector/constants/ar_constants.go
new file mode 100644
index 000000000..13541bd93
--- /dev/null
+++ b/pkg/util/k8sutil/inspector/constants/ar_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/networking"
+ networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1"
+)
+
+// ArangoRoute
+const (
+ ArangoRouteGroup = networking.ArangoNetworkingGroupName
+ ArangoRouteResource = networking.ArangoRouteResourcePlural
+ ArangoRouteKind = networking.ArangoRouteResourceKind
+ ArangoRouteVersionV1Alpha1 = networkingApi.ArangoNetworkingVersion
+)
+
+func ArangoRouteGK() schema.GroupKind {
+ return schema.GroupKind{
+ Group: ArangoRouteGroup,
+ Kind: ArangoRouteKind,
+ }
+}
+
+func ArangoRouteGKv1() schema.GroupVersionKind {
+ return schema.GroupVersionKind{
+ Group: ArangoRouteGroup,
+ Kind: ArangoRouteKind,
+ Version: ArangoRouteVersionV1Alpha1,
+ }
+}
+
+func ArangoRouteGR() schema.GroupResource {
+ return schema.GroupResource{
+ Group: ArangoRouteGroup,
+ Resource: ArangoRouteResource,
+ }
+}
+
+func ArangoRouteGRv1() schema.GroupVersionResource {
+ return schema.GroupVersionResource{
+ Group: ArangoRouteGroup,
+ Resource: ArangoRouteResource,
+ Version: ArangoRouteVersionV1Alpha1,
+ }
+}
diff --git a/pkg/util/k8sutil/inspector/definitions/components.go b/pkg/util/k8sutil/inspector/definitions/components.go
index 14974cc8f..af4b8c115 100644
--- a/pkg/util/k8sutil/inspector/definitions/components.go
+++ b/pkg/util/k8sutil/inspector/definitions/components.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 @@ const (
ArangoClusterSynchronization Component = "ArangoClusterSynchronization"
ArangoMember Component = "ArangoMember"
ArangoTask Component = "ArangoTask"
+ ArangoRoute Component = "ArangoRoute"
Node Component = "Node"
PersistentVolume Component = "PersistentVolume"
PersistentVolumeClaim Component = "PersistentVolumeClaim"
@@ -45,6 +46,7 @@ func AllComponents() []Component {
ArangoClusterSynchronization,
ArangoMember,
ArangoTask,
+ ArangoRoute,
Node,
PersistentVolume,
PersistentVolumeClaim,
diff --git a/pkg/util/k8sutil/inspector/inspector.go b/pkg/util/k8sutil/inspector/inspector.go
index d799af6c1..763c37643 100644
--- a/pkg/util/k8sutil/inspector/inspector.go
+++ b/pkg/util/k8sutil/inspector/inspector.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,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/arangoroute"
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangotask"
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/endpoints"
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods"
@@ -90,6 +91,7 @@ type Inspector interface {
persistentvolume.Inspector
arangoclustersynchronization.Inspector
arangotask.Inspector
+ arangoroute.Inspector
mods.Mods
diff --git a/pkg/util/k8sutil/inspector/mods/mods.go b/pkg/util/k8sutil/inspector/mods/mods.go
index b33336967..e5bfc6e23 100644
--- a/pkg/util/k8sutil/inspector/mods/mods.go
+++ b/pkg/util/k8sutil/inspector/mods/mods.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.
@@ -23,6 +23,7 @@ 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"
+ arangoroutev1alpha1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoroute/v1alpha1"
arangotaskv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangotask/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"
@@ -78,6 +79,10 @@ type ArangoClusterSynchronizationMods interface {
V1() arangoclustersynchronizationv1.ModInterface
}
+type ArangoRouteMods interface {
+ V1Alpha1() arangoroutev1alpha1.ModInterface
+}
+
type Mods interface {
PodsModInterface() PodsMods
ServiceAccountsModInterface() ServiceAccountsMods
@@ -91,4 +96,5 @@ type Mods interface {
ArangoMemberModInterface() ArangoMemberMods
ArangoTaskModInterface() ArangoTaskMods
ArangoClusterSynchronizationModInterface() ArangoClusterSynchronizationMods
+ ArangoRouteModInterface() ArangoRouteMods
}
diff --git a/pkg/util/k8sutil/inspector/throttle/throttle.go b/pkg/util/k8sutil/inspector/throttle/throttle.go
index 0095355fa..96bacf9f2 100644
--- a/pkg/util/k8sutil/inspector/throttle/throttle.go
+++ b/pkg/util/k8sutil/inspector/throttle/throttle.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,14 +32,15 @@ type Inspector interface {
}
func NewAlwaysThrottleComponents() Components {
- return NewThrottleComponents(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)
}
-func NewThrottleComponents(acs, am, at, node, pvc, pod, pv, pdb, secret, service, serviceAccount, sm, endpoints time.Duration) Components {
+func NewThrottleComponents(acs, am, at, ar, node, pvc, pod, pv, pdb, secret, service, serviceAccount, sm, endpoints time.Duration) Components {
return &throttleComponents{
arangoClusterSynchronization: NewThrottle(acs),
arangoMember: NewThrottle(am),
arangoTask: NewThrottle(at),
+ arangoRoute: NewThrottle(ar),
node: NewThrottle(node),
persistentVolume: NewThrottle(pv),
persistentVolumeClaim: NewThrottle(pvc),
@@ -57,6 +58,7 @@ type Components interface {
ArangoClusterSynchronization() Throttle
ArangoMember() Throttle
ArangoTask() Throttle
+ ArangoRoute() Throttle
Node() Throttle
PersistentVolume() Throttle
PersistentVolumeClaim() Throttle
@@ -79,6 +81,7 @@ type throttleComponents struct {
arangoClusterSynchronization Throttle
arangoMember Throttle
arangoTask Throttle
+ arangoRoute Throttle
node Throttle
persistentVolume Throttle
persistentVolumeClaim Throttle
@@ -126,6 +129,8 @@ func (t *throttleComponents) Get(c definitions.Component) Throttle {
return t.arangoMember
case definitions.ArangoTask:
return t.arangoTask
+ case definitions.ArangoRoute:
+ return t.arangoRoute
case definitions.Node:
return t.node
case definitions.PersistentVolume:
@@ -156,6 +161,7 @@ func (t *throttleComponents) Copy() Components {
arangoClusterSynchronization: t.arangoClusterSynchronization.Copy(),
arangoMember: t.arangoMember.Copy(),
arangoTask: t.arangoTask.Copy(),
+ arangoRoute: t.arangoRoute.Copy(),
node: t.node.Copy(),
persistentVolume: t.persistentVolume.Copy(),
persistentVolumeClaim: t.persistentVolumeClaim.Copy(),
@@ -181,6 +187,10 @@ func (t *throttleComponents) ArangoTask() Throttle {
return t.arangoTask
}
+func (t *throttleComponents) ArangoRoute() Throttle {
+ return t.arangoRoute
+}
+
func (t *throttleComponents) Node() Throttle {
return t.node
}