1
0
Fork 0
mirror of https://github.com/arangodb/kube-arangodb.git synced 2024-12-14 11:57:37 +00:00

[Feature] ArangoRoute CRD (#1689)

This commit is contained in:
Adam Janikowski 2024-07-26 10:32:36 +02:00 committed by GitHub
parent 375c89e695
commit ae55994d68
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
71 changed files with 2851 additions and 26 deletions

View file

@ -77,6 +77,8 @@ linters-settings:
alias: mlSharedTests alias: mlSharedTests
- pkg: github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1 - pkg: github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1
alias: analyticsApi alias: analyticsApi
- pkg: github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1
alias: networkingApi
- pkg: github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1 - pkg: github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1
alias: mlApi alias: mlApi
- pkg: github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1 - pkg: github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1

View file

@ -1,6 +1,7 @@
# Change Log # Change Log
## [master](https://github.com/arangodb/kube-arangodb/tree/master) (N/A) ## [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) ## [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 - (Maintenance) Go 1.22.4 & Kubernetes 1.29.6 libraries

View file

@ -440,7 +440,8 @@ update-generated:
apps:v1 \ apps:v1 \
ml:v1alpha1 ml:v1beta1 \ ml:v1alpha1 ml:v1beta1 \
scheduler:v1alpha1 scheduler:v1beta1 \ scheduler:v1alpha1 scheduler:v1beta1 \
analytics:v1alpha1" \ analytics:v1alpha1 \
networking:v1alpha1" \
--go-header-file "./tools/codegen/boilerplate.go.txt" \ --go-header-file "./tools/codegen/boilerplate.go.txt" \
$(VERIFYARGS) $(VERIFYARGS)
GOPATH=$(GOBUILDDIR) $(VENDORDIR)/k8s.io/code-generator/generate-groups.sh \ GOPATH=$(GOBUILDDIR) $(VENDORDIR)/k8s.io/code-generator/generate-groups.sh \
@ -894,7 +895,8 @@ CRDS:=apps-job \
replication-deploymentreplication \ replication-deploymentreplication \
ml-storage ml-extension ml-job-batch ml-job-cron \ ml-storage ml-extension ml-job-batch ml-job-cron \
scheduler-profile \ scheduler-profile \
analytics-graphanalyticsengine analytics-graphanalyticsengine \
networking-route
.PHONY: sync .PHONY: sync
sync: sync:

View file

@ -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: {}

View file

@ -16,6 +16,9 @@ rules:
- apiGroups: ["database.arangodb.com"] - apiGroups: ["database.arangodb.com"]
resources: ["arangodeployments", "arangodeployments/status","arangomembers", "arangomembers/status"] resources: ["arangodeployments", "arangodeployments/status","arangomembers", "arangomembers/status"]
verbs: ["*"] verbs: ["*"]
- apiGroups: ["networking.arangodb.com"]
resources: ["arangoroutes", "arangoroutes/status"]
verbs: ["*"]
{{- if .Values.rbac.extensions.acs }} {{- if .Values.rbac.extensions.acs }}
- apiGroups: ["database.arangodb.com"] - apiGroups: ["database.arangodb.com"]
resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"]

View file

@ -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: {}

View file

@ -16,6 +16,9 @@ rules:
- apiGroups: ["database.arangodb.com"] - apiGroups: ["database.arangodb.com"]
resources: ["arangodeployments", "arangodeployments/status","arangomembers", "arangomembers/status"] resources: ["arangodeployments", "arangodeployments/status","arangomembers", "arangomembers/status"]
verbs: ["*"] verbs: ["*"]
- apiGroups: ["networking.arangodb.com"]
resources: ["arangoroutes", "arangoroutes/status"]
verbs: ["*"]
{{- if .Values.rbac.extensions.acs }} {{- if .Values.rbac.extensions.acs }}
- apiGroups: ["database.arangodb.com"] - apiGroups: ["database.arangodb.com"]
resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"]

View file

@ -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: {}

View file

@ -16,6 +16,9 @@ rules:
- apiGroups: ["database.arangodb.com"] - apiGroups: ["database.arangodb.com"]
resources: ["arangodeployments", "arangodeployments/status","arangomembers", "arangomembers/status"] resources: ["arangodeployments", "arangodeployments/status","arangomembers", "arangomembers/status"]
verbs: ["*"] verbs: ["*"]
- apiGroups: ["networking.arangodb.com"]
resources: ["arangoroutes", "arangoroutes/status"]
verbs: ["*"]
{{- if .Values.rbac.extensions.acs }} {{- if .Values.rbac.extensions.acs }}
- apiGroups: ["database.arangodb.com"] - apiGroups: ["database.arangodb.com"]
resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"]

View file

@ -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: {}

View file

@ -16,6 +16,9 @@ rules:
- apiGroups: ["database.arangodb.com"] - apiGroups: ["database.arangodb.com"]
resources: ["arangodeployments", "arangodeployments/status","arangomembers", "arangomembers/status"] resources: ["arangodeployments", "arangodeployments/status","arangomembers", "arangomembers/status"]
verbs: ["*"] verbs: ["*"]
- apiGroups: ["networking.arangodb.com"]
resources: ["arangoroutes", "arangoroutes/status"]
verbs: ["*"]
{{- if .Values.rbac.extensions.acs }} {{- if .Values.rbac.extensions.acs }}
- apiGroups: ["database.arangodb.com"] - apiGroups: ["database.arangodb.com"]
resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"] resources: ["arangoclustersynchronizations", "arangoclustersynchronizations/status"]

View file

@ -0,0 +1,91 @@
---
layout: page
parent: CRD reference
title: ArangoRoute V1Alpha1
---
# API Reference for ArangoRoute V1Alpha1
## Spec
### .spec.deployment
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/networking/v1alpha1/route_spec.go#L27)</sup>
Deployment specifies the ArangoDeployment object name
***
### .spec.destination.schema
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/networking/v1alpha1/route_spec_destination.go#L30)</sup>
Schema defines HTTP/S schema used for connection
***
### .spec.destination.service.checksum
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/shared/v1/object.go#L61)</sup>
UID keeps the information about object Checksum
***
### .spec.destination.service.name
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/shared/v1/object.go#L52)</sup>
Name of the object
***
### .spec.destination.service.namespace
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/shared/v1/object.go#L55)</sup>
Namespace of the object. Should default to the namespace of the parent object
***
### .spec.destination.service.port
Type: `intstr.IntOrString` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/networking/v1alpha1/route_spec_destination_service.go#L36)</sup>
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` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/shared/v1/object.go#L58)</sup>
UID keeps the information about object UID
***
### .spec.destination.tls.insecure
Type: `boolean` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/networking/v1alpha1/route_spec_destination_tls.go#L25)</sup>
Insecure allows Insecure traffic
***
### .spec.route.path
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/networking/v1alpha1/route_spec_route.go#L29)</sup>
Path specifies the Path route
## Status
### .status.conditions
Type: `api.Conditions` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.42/pkg/apis/networking/v1alpha1/route_status.go#L28)</sup>
Conditions specific to the entire extension

View file

@ -40,6 +40,7 @@ import (
deploymentv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1" deploymentv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1"
mlApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" mlApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1"
mlApi "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" 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" replicationv1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v1"
replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1" replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1"
schedulerApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1" 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 { for filePrefix, packagesToVersion := range input {

View file

@ -293,7 +293,7 @@ func isSimpleType(obj reflect.Type) (string, string, bool) {
} }
func extractTag(tag string) (string, bool) { func extractTag(tag string) (string, bool) {
parts := strings.SplitN(tag, ",", 2) parts := strings.Split(tag, ",")
if len(parts) == 1 { if len(parts) == 1 {
return parts[0], false return parts[0], false

View file

@ -42,6 +42,7 @@ import (
deploymentApi "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1" deploymentApi "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
mlApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" mlApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1"
mlApi "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" 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" replicationApi "github.com/arangodb/kube-arangodb/pkg/apis/replication/v1"
schedulerApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1" schedulerApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1"
schedulerApi "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1beta1" 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{ "analytics": map[string]inputPackage{
"v1alpha1": { "v1alpha1": {
Types: inputPackageTypes{ Types: inputPackageTypes{

View file

@ -228,7 +228,7 @@ func (b *schemaBuilder) StructToSchema(t *testing.T, structObj reflect.Type, pat
schema.Properties[k] = v schema.Properties[k] = v
} }
} else { } else {
require.NotEmpty(t, n, fullFieldName) require.NotEmpty(t, n, fullFieldName, inline)
schema.Properties[n] = *s schema.Properties[n] = *s
} }
} }

View file

@ -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"
)

View file

@ -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

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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())
}
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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"`
}

View file

@ -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
}

View file

@ -33,12 +33,17 @@ import (
var ( var (
resourceNameRE = regexp.MustCompile(`^([0-9\-\.a-z])+$`) resourceNameRE = regexp.MustCompile(`^([0-9\-\.a-z])+$`)
apiPathRE = regexp.MustCompile(`^/([A-Za-z0-9\-]+/)*$`)
) )
const ( const (
ServiceTypeNone core.ServiceType = "None" ServiceTypeNone core.ServiceType = "None"
) )
type ValidateInterface interface {
Validate() error
}
// ValidateResourceName validates a kubernetes resource name. // ValidateResourceName validates a kubernetes resource name.
// If not valid, an error is returned. // If not valid, an error is returned.
// See https://kubernetes.io/docs/concepts/overview/working-with-objects/names/ // See https://kubernetes.io/docs/concepts/overview/working-with-objects/names/
@ -70,6 +75,19 @@ func ValidateUID(uid types.UID) error {
return err 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 // ValidatePullPolicy Validates core.PullPolicy
func ValidatePullPolicy(in core.PullPolicy) error { func ValidatePullPolicy(in core.PullPolicy) error {
switch in { switch in {
@ -80,19 +98,19 @@ func ValidatePullPolicy(in core.PullPolicy) error {
return errors.Errorf("Unknown pull policy: '%s'", string(in)) return errors.Errorf("Unknown pull policy: '%s'", string(in))
} }
type ValidateInterface interface {
Validate() error
}
func Validate[T interface{}](in T) error { func Validate[T interface{}](in T) error {
return validate(in) res, _ := validate(in)
return res
} }
func validate(in any) error { func validate(in any) (error, bool) {
if v, ok := in.(ValidateInterface); ok { if in == nil {
return v.Validate() 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 // ValidateOptional Validates object if is not nil
@ -104,6 +122,17 @@ func ValidateOptional[T interface{}](in *T, validator func(T) error) error {
return nil 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 // ValidateRequired Validates object and required not nil value
func ValidateRequired[T interface{}](in *T, validator func(T) error) error { func ValidateRequired[T interface{}](in *T, validator func(T) error) error {
if in != nil { 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") 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 // ValidateList validates all elements on the list
func ValidateList[T interface{}](in []T, validator func(T) error) error { func ValidateList[T interface{}](in []T, validator func(T) error) error {
errors := make([]error, len(in)) errors := make([]error, len(in))

View file

@ -1,7 +1,7 @@
// //
// DISCLAIMER // DISCLAIMER
// //
// Copyright 2023 ArangoDB GmbH, Cologne, Germany // Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with 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.Error(t, ValidateUID(""))
require.NoError(t, ValidateUID(uuid.NewUUID())) 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("/&/"))
}

View file

@ -90,6 +90,9 @@ func AllDefinitions() []Definition {
// Analytics // Analytics
AnalyticsGAEDefinitionWithOptions(), AnalyticsGAEDefinitionWithOptions(),
// Networking
NetworkingRouteDefinitionWithOptions(),
} }
} }

View file

@ -144,6 +144,7 @@ func Test_CRDGetters(t *testing.T) {
StorageLocalStorageWithOptions, StorageLocalStorageWithOptions,
SchedulerProfileWithOptions, SchedulerProfileWithOptions,
AnalyticsGAEWithOptions, AnalyticsGAEWithOptions,
NetworkingRouteWithOptions,
} }
require.Equal(t, len(AllDefinitions()), len(getters)) require.Equal(t, len(AllDefinitions()), len(getters))

View file

@ -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

View file

@ -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

View file

@ -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: {}

40
pkg/crd/networking.go Normal file
View file

@ -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,
})
}
}

View file

@ -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()
}

View file

@ -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
}

View file

@ -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()
}

View file

@ -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())
}

View file

@ -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
}
}

View file

@ -42,6 +42,7 @@ import (
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/anonymous" "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/arangoclustersynchronization"
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangomember" "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/arangotask"
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/endpoints" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/endpoints"
@ -134,6 +135,7 @@ type inspectorState struct {
serviceMonitors *serviceMonitorsInspector serviceMonitors *serviceMonitorsInspector
arangoMembers *arangoMembersInspector arangoMembers *arangoMembersInspector
arangoTasks *arangoTasksInspector arangoTasks *arangoTasksInspector
arangoRoutes *arangoRoutesInspector
arangoClusterSynchronizations *arangoClusterSynchronizationsInspector arangoClusterSynchronizations *arangoClusterSynchronizationsInspector
endpoints *endpointsInspector endpoints *endpointsInspector
@ -167,6 +169,10 @@ func (i *inspectorState) RegisterInformers(k8s informers.SharedInformerFactory,
arango.Database().V1().ArangoTasks().Informer().AddEventHandler(i.eventHandler(definitions.ArangoTask)) 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 { if _, err := i.ArangoClusterSynchronization().V1(); err == nil {
arango.Database().V1().ArangoClusterSynchronizations().Informer().AddEventHandler(i.eventHandler(definitions.ArangoClusterSynchronization)) arango.Database().V1().ArangoClusterSynchronizations().Informer().AddEventHandler(i.eventHandler(definitions.ArangoClusterSynchronization))
} }
@ -225,6 +231,7 @@ func (i *inspectorState) AnonymousObjects() []anonymous.Impl {
i.serviceMonitors, i.serviceMonitors,
i.arangoMembers, i.arangoMembers,
i.arangoTasks, i.arangoTasks,
i.arangoRoutes,
i.arangoClusterSynchronizations, i.arangoClusterSynchronizations,
i.endpoints, i.endpoints,
} }
@ -317,6 +324,10 @@ func (i *inspectorState) ArangoTask() arangotask.Definition {
return i.arangoTasks return i.arangoTasks
} }
func (i *inspectorState) ArangoRoute() arangoroute.Definition {
return i.arangoRoutes
}
func (i *inspectorState) Refresh(ctx context.Context) error { func (i *inspectorState) Refresh(ctx context.Context) error {
return i.refresh(ctx, inspectorLoadersList...) return i.refresh(ctx, inspectorLoadersList...)
} }
@ -464,6 +475,10 @@ func (i *inspectorState) validate() error {
return err return err
} }
if err := i.arangoRoutes.validate(); err != nil {
return err
}
if err := i.arangoTasks.validate(); err != nil { if err := i.arangoTasks.validate(); err != nil {
return err return err
} }
@ -495,6 +510,7 @@ func (i *inspectorState) copyCore() *inspectorState {
serviceMonitors: i.serviceMonitors, serviceMonitors: i.serviceMonitors,
arangoMembers: i.arangoMembers, arangoMembers: i.arangoMembers,
arangoTasks: i.arangoTasks, arangoTasks: i.arangoTasks,
arangoRoutes: i.arangoRoutes,
arangoClusterSynchronizations: i.arangoClusterSynchronizations, arangoClusterSynchronizations: i.arangoClusterSynchronizations,
throttles: i.throttles.Copy(), throttles: i.throttles.Copy(),
versionInfo: i.versionInfo, versionInfo: i.versionInfo,

View file

@ -1,7 +1,7 @@
// //
// DISCLAIMER // 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"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with 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) { func Test_Inspector_RefreshMatrix(t *testing.T) {
c := kclient.NewFakeClient() 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") i := NewInspector(tc, c, "test", "test")
@ -302,7 +302,7 @@ func Test_Inspector_Load(t *testing.T) {
func Test_Inspector_Invalidate(t *testing.T) { func Test_Inspector_Invalidate(t *testing.T) {
c := kclient.NewFakeClient() 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") i := NewInspector(tc, c, "test", "test")

View file

@ -1,7 +1,7 @@
// //
// DISCLAIMER // 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"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with 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, 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") i := NewInspector(tc, c, "test", "test")
require.NoError(t, i.Refresh(context.Background())) require.NoError(t, i.Refresh(context.Background()))

View file

@ -1,7 +1,7 @@
// //
// DISCLAIMER // 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"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with 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, // ArangoDeploymentSynchronization
30*time.Second, // ArangoMember 30*time.Second, // ArangoMember
30*time.Second, // ArangoTask 30*time.Second, // ArangoTask
30*time.Second, // ArangoRoute
30*time.Second, // Node 30*time.Second, // Node
30*time.Second, // PV 30*time.Second, // PV
15*time.Second, // PVC 15*time.Second, // PVC

View file

@ -33,6 +33,7 @@ import (
databasev2alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/deployment/v2alpha1" 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" 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" 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" 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" 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" schedulerv1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/scheduler/v1alpha1"
@ -52,6 +53,7 @@ type Interface interface {
DatabaseV2alpha1() databasev2alpha1.DatabaseV2alpha1Interface DatabaseV2alpha1() databasev2alpha1.DatabaseV2alpha1Interface
MlV1alpha1() mlv1alpha1.MlV1alpha1Interface MlV1alpha1() mlv1alpha1.MlV1alpha1Interface
MlV1beta1() mlv1beta1.MlV1beta1Interface MlV1beta1() mlv1beta1.MlV1beta1Interface
NetworkingV1alpha1() networkingv1alpha1.NetworkingV1alpha1Interface
ReplicationV1() replicationv1.ReplicationV1Interface ReplicationV1() replicationv1.ReplicationV1Interface
ReplicationV2alpha1() replicationv2alpha1.ReplicationV2alpha1Interface ReplicationV2alpha1() replicationv2alpha1.ReplicationV2alpha1Interface
SchedulerV1alpha1() schedulerv1alpha1.SchedulerV1alpha1Interface SchedulerV1alpha1() schedulerv1alpha1.SchedulerV1alpha1Interface
@ -69,6 +71,7 @@ type Clientset struct {
databaseV2alpha1 *databasev2alpha1.DatabaseV2alpha1Client databaseV2alpha1 *databasev2alpha1.DatabaseV2alpha1Client
mlV1alpha1 *mlv1alpha1.MlV1alpha1Client mlV1alpha1 *mlv1alpha1.MlV1alpha1Client
mlV1beta1 *mlv1beta1.MlV1beta1Client mlV1beta1 *mlv1beta1.MlV1beta1Client
networkingV1alpha1 *networkingv1alpha1.NetworkingV1alpha1Client
replicationV1 *replicationv1.ReplicationV1Client replicationV1 *replicationv1.ReplicationV1Client
replicationV2alpha1 *replicationv2alpha1.ReplicationV2alpha1Client replicationV2alpha1 *replicationv2alpha1.ReplicationV2alpha1Client
schedulerV1alpha1 *schedulerv1alpha1.SchedulerV1alpha1Client schedulerV1alpha1 *schedulerv1alpha1.SchedulerV1alpha1Client
@ -111,6 +114,11 @@ func (c *Clientset) MlV1beta1() mlv1beta1.MlV1beta1Interface {
return c.mlV1beta1 return c.mlV1beta1
} }
// NetworkingV1alpha1 retrieves the NetworkingV1alpha1Client
func (c *Clientset) NetworkingV1alpha1() networkingv1alpha1.NetworkingV1alpha1Interface {
return c.networkingV1alpha1
}
// ReplicationV1 retrieves the ReplicationV1Client // ReplicationV1 retrieves the ReplicationV1Client
func (c *Clientset) ReplicationV1() replicationv1.ReplicationV1Interface { func (c *Clientset) ReplicationV1() replicationv1.ReplicationV1Interface {
return c.replicationV1 return c.replicationV1
@ -208,6 +216,10 @@ func NewForConfigAndClient(c *rest.Config, httpClient *http.Client) (*Clientset,
if err != nil { if err != nil {
return nil, err return nil, err
} }
cs.networkingV1alpha1, err = networkingv1alpha1.NewForConfigAndClient(&configShallowCopy, httpClient)
if err != nil {
return nil, err
}
cs.replicationV1, err = replicationv1.NewForConfigAndClient(&configShallowCopy, httpClient) cs.replicationV1, err = replicationv1.NewForConfigAndClient(&configShallowCopy, httpClient)
if err != nil { if err != nil {
return nil, err return nil, err
@ -256,6 +268,7 @@ func New(c rest.Interface) *Clientset {
cs.databaseV2alpha1 = databasev2alpha1.New(c) cs.databaseV2alpha1 = databasev2alpha1.New(c)
cs.mlV1alpha1 = mlv1alpha1.New(c) cs.mlV1alpha1 = mlv1alpha1.New(c)
cs.mlV1beta1 = mlv1beta1.New(c) cs.mlV1beta1 = mlv1beta1.New(c)
cs.networkingV1alpha1 = networkingv1alpha1.New(c)
cs.replicationV1 = replicationv1.New(c) cs.replicationV1 = replicationv1.New(c)
cs.replicationV2alpha1 = replicationv2alpha1.New(c) cs.replicationV2alpha1 = replicationv2alpha1.New(c)
cs.schedulerV1alpha1 = schedulerv1alpha1.New(c) cs.schedulerV1alpha1 = schedulerv1alpha1.New(c)

View file

@ -38,6 +38,8 @@ import (
fakemlv1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/ml/v1alpha1/fake" 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" 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" 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" 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" 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" 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} 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 // ReplicationV1 retrieves the ReplicationV1Client
func (c *Clientset) ReplicationV1() replicationv1.ReplicationV1Interface { func (c *Clientset) ReplicationV1() replicationv1.ReplicationV1Interface {
return &fakereplicationv1.FakeReplicationV1{Fake: &c.Fake} return &fakereplicationv1.FakeReplicationV1{Fake: &c.Fake}

View file

@ -30,6 +30,7 @@ import (
databasev2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1" databasev2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1"
mlv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" mlv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1"
mlv1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" 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" replicationv1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v1"
replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1" replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1"
schedulerv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1" schedulerv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1"
@ -53,6 +54,7 @@ var localSchemeBuilder = runtime.SchemeBuilder{
databasev2alpha1.AddToScheme, databasev2alpha1.AddToScheme,
mlv1alpha1.AddToScheme, mlv1alpha1.AddToScheme,
mlv1beta1.AddToScheme, mlv1beta1.AddToScheme,
networkingv1alpha1.AddToScheme,
replicationv1.AddToScheme, replicationv1.AddToScheme,
replicationv2alpha1.AddToScheme, replicationv2alpha1.AddToScheme,
schedulerv1alpha1.AddToScheme, schedulerv1alpha1.AddToScheme,

View file

@ -30,6 +30,7 @@ import (
databasev2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1" databasev2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1"
mlv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" mlv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1"
mlv1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" 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" replicationv1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v1"
replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1" replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1"
schedulerv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1" schedulerv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1"
@ -53,6 +54,7 @@ var localSchemeBuilder = runtime.SchemeBuilder{
databasev2alpha1.AddToScheme, databasev2alpha1.AddToScheme,
mlv1alpha1.AddToScheme, mlv1alpha1.AddToScheme,
mlv1beta1.AddToScheme, mlv1beta1.AddToScheme,
networkingv1alpha1.AddToScheme,
replicationv1.AddToScheme, replicationv1.AddToScheme,
replicationv2alpha1.AddToScheme, replicationv2alpha1.AddToScheme,
schedulerv1alpha1.AddToScheme, schedulerv1alpha1.AddToScheme,

View file

@ -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
}

View file

@ -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

View file

@ -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

View file

@ -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
}

View file

@ -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
}

View file

@ -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{}

View file

@ -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
}

View file

@ -34,6 +34,7 @@ import (
deployment "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/deployment" deployment "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/deployment"
internalinterfaces "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/internalinterfaces" internalinterfaces "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/internalinterfaces"
ml "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/ml" 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" replication "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/replication"
scheduler "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/scheduler" scheduler "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/scheduler"
storage "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/storage" storage "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/storage"
@ -269,6 +270,7 @@ type SharedInformerFactory interface {
Backup() backup.Interface Backup() backup.Interface
Database() deployment.Interface Database() deployment.Interface
Ml() ml.Interface Ml() ml.Interface
Networking() networking.Interface
Replication() replication.Interface Replication() replication.Interface
Scheduler() scheduler.Interface Scheduler() scheduler.Interface
Storage() storage.Interface Storage() storage.Interface
@ -294,6 +296,10 @@ func (f *sharedInformerFactory) Ml() ml.Interface {
return ml.New(f, f.namespace, f.tweakListOptions) 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 { func (f *sharedInformerFactory) Replication() replication.Interface {
return replication.New(f, f.namespace, f.tweakListOptions) return replication.New(f, f.namespace, f.tweakListOptions)
} }

View file

@ -32,6 +32,7 @@ import (
v2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1" v2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1"
mlv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1" mlv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1"
v1beta1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1" 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" replicationv1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v1"
replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1" replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1"
schedulerv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/scheduler/v1alpha1" 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"): case v1beta1.SchemeGroupVersion.WithResource("arangomlstorages"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Ml().V1beta1().ArangoMLStorages().Informer()}, nil 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 // Group=replication.database.arangodb.com, Version=v1
case replicationv1.SchemeGroupVersion.WithResource("arangodeploymentreplications"): case replicationv1.SchemeGroupVersion.WithResource("arangodeploymentreplications"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Replication().V1().ArangoDeploymentReplications().Informer()}, nil return &genericInformer{resource: resource.GroupResource(), informer: f.Replication().V1().ArangoDeploymentReplications().Informer()}, nil

View file

@ -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)
}

View file

@ -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())
}

View file

@ -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}
}

View file

@ -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
}

View file

@ -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{}

View file

@ -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)
}

View file

@ -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
}

View file

@ -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)
}

View file

@ -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,
}
}

View file

@ -1,7 +1,7 @@
// //
// DISCLAIMER // 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"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
@ -28,6 +28,7 @@ const (
ArangoClusterSynchronization Component = "ArangoClusterSynchronization" ArangoClusterSynchronization Component = "ArangoClusterSynchronization"
ArangoMember Component = "ArangoMember" ArangoMember Component = "ArangoMember"
ArangoTask Component = "ArangoTask" ArangoTask Component = "ArangoTask"
ArangoRoute Component = "ArangoRoute"
Node Component = "Node" Node Component = "Node"
PersistentVolume Component = "PersistentVolume" PersistentVolume Component = "PersistentVolume"
PersistentVolumeClaim Component = "PersistentVolumeClaim" PersistentVolumeClaim Component = "PersistentVolumeClaim"
@ -45,6 +46,7 @@ func AllComponents() []Component {
ArangoClusterSynchronization, ArangoClusterSynchronization,
ArangoMember, ArangoMember,
ArangoTask, ArangoTask,
ArangoRoute,
Node, Node,
PersistentVolume, PersistentVolume,
PersistentVolumeClaim, PersistentVolumeClaim,

View file

@ -1,7 +1,7 @@
// //
// DISCLAIMER // 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"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with 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/arangoclustersynchronization"
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangodeployment" "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/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/arangotask"
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/endpoints" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/endpoints"
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods" "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/mods"
@ -90,6 +91,7 @@ type Inspector interface {
persistentvolume.Inspector persistentvolume.Inspector
arangoclustersynchronization.Inspector arangoclustersynchronization.Inspector
arangotask.Inspector arangotask.Inspector
arangoroute.Inspector
mods.Mods mods.Mods

View file

@ -1,7 +1,7 @@
// //
// DISCLAIMER // 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"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
@ -23,6 +23,7 @@ package mods
import ( import (
arangoclustersynchronizationv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoclustersynchronization/v1" arangoclustersynchronizationv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangoclustersynchronization/v1"
arangomemberv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangomember/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" arangotaskv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/arangotask/v1"
endpointsv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/endpoints/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" persistentvolumeclaimv1 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/persistentvolumeclaim/v1"
@ -78,6 +79,10 @@ type ArangoClusterSynchronizationMods interface {
V1() arangoclustersynchronizationv1.ModInterface V1() arangoclustersynchronizationv1.ModInterface
} }
type ArangoRouteMods interface {
V1Alpha1() arangoroutev1alpha1.ModInterface
}
type Mods interface { type Mods interface {
PodsModInterface() PodsMods PodsModInterface() PodsMods
ServiceAccountsModInterface() ServiceAccountsMods ServiceAccountsModInterface() ServiceAccountsMods
@ -91,4 +96,5 @@ type Mods interface {
ArangoMemberModInterface() ArangoMemberMods ArangoMemberModInterface() ArangoMemberMods
ArangoTaskModInterface() ArangoTaskMods ArangoTaskModInterface() ArangoTaskMods
ArangoClusterSynchronizationModInterface() ArangoClusterSynchronizationMods ArangoClusterSynchronizationModInterface() ArangoClusterSynchronizationMods
ArangoRouteModInterface() ArangoRouteMods
} }

View file

@ -1,7 +1,7 @@
// //
// DISCLAIMER // 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"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. // you may not use this file except in compliance with the License.
@ -32,14 +32,15 @@ type Inspector interface {
} }
func NewAlwaysThrottleComponents() Components { 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{ return &throttleComponents{
arangoClusterSynchronization: NewThrottle(acs), arangoClusterSynchronization: NewThrottle(acs),
arangoMember: NewThrottle(am), arangoMember: NewThrottle(am),
arangoTask: NewThrottle(at), arangoTask: NewThrottle(at),
arangoRoute: NewThrottle(ar),
node: NewThrottle(node), node: NewThrottle(node),
persistentVolume: NewThrottle(pv), persistentVolume: NewThrottle(pv),
persistentVolumeClaim: NewThrottle(pvc), persistentVolumeClaim: NewThrottle(pvc),
@ -57,6 +58,7 @@ type Components interface {
ArangoClusterSynchronization() Throttle ArangoClusterSynchronization() Throttle
ArangoMember() Throttle ArangoMember() Throttle
ArangoTask() Throttle ArangoTask() Throttle
ArangoRoute() Throttle
Node() Throttle Node() Throttle
PersistentVolume() Throttle PersistentVolume() Throttle
PersistentVolumeClaim() Throttle PersistentVolumeClaim() Throttle
@ -79,6 +81,7 @@ type throttleComponents struct {
arangoClusterSynchronization Throttle arangoClusterSynchronization Throttle
arangoMember Throttle arangoMember Throttle
arangoTask Throttle arangoTask Throttle
arangoRoute Throttle
node Throttle node Throttle
persistentVolume Throttle persistentVolume Throttle
persistentVolumeClaim Throttle persistentVolumeClaim Throttle
@ -126,6 +129,8 @@ func (t *throttleComponents) Get(c definitions.Component) Throttle {
return t.arangoMember return t.arangoMember
case definitions.ArangoTask: case definitions.ArangoTask:
return t.arangoTask return t.arangoTask
case definitions.ArangoRoute:
return t.arangoRoute
case definitions.Node: case definitions.Node:
return t.node return t.node
case definitions.PersistentVolume: case definitions.PersistentVolume:
@ -156,6 +161,7 @@ func (t *throttleComponents) Copy() Components {
arangoClusterSynchronization: t.arangoClusterSynchronization.Copy(), arangoClusterSynchronization: t.arangoClusterSynchronization.Copy(),
arangoMember: t.arangoMember.Copy(), arangoMember: t.arangoMember.Copy(),
arangoTask: t.arangoTask.Copy(), arangoTask: t.arangoTask.Copy(),
arangoRoute: t.arangoRoute.Copy(),
node: t.node.Copy(), node: t.node.Copy(),
persistentVolume: t.persistentVolume.Copy(), persistentVolume: t.persistentVolume.Copy(),
persistentVolumeClaim: t.persistentVolumeClaim.Copy(), persistentVolumeClaim: t.persistentVolumeClaim.Copy(),
@ -181,6 +187,10 @@ func (t *throttleComponents) ArangoTask() Throttle {
return t.arangoTask return t.arangoTask
} }
func (t *throttleComponents) ArangoRoute() Throttle {
return t.arangoRoute
}
func (t *throttleComponents) Node() Throttle { func (t *throttleComponents) Node() Throttle {
return t.node return t.node
} }