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

[Feature] [Analytics] GAE Integration (#1660)

This commit is contained in:
Adam Janikowski 2024-05-08 12:20:14 +02:00 committed by GitHub
parent 7e371cc338
commit 67f61991f3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
56 changed files with 1959 additions and 20 deletions

View file

@ -71,6 +71,8 @@ linters-settings:
alias: mlShared
- pkg: github.com/arangodb/kube-arangodb/pkg/handlers/enterprise/ml/shared/test
alias: mlSharedTests
- pkg: github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1
alias: analyticsApi
- pkg: github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1
alias: mlApi
- pkg: github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1

View file

@ -12,6 +12,7 @@
- (Feature) (ML) Enable TLS
- (Feature) (ML) Release V1Beta1 API
- (Maintenance) Update Go to 1.22.3
- (Feature) (Analytics) GAE Integration
## [1.2.40](https://github.com/arangodb/kube-arangodb/tree/1.2.40) (2024-04-10)
- (Feature) Add Core fields to the Scheduler Container Spec

View file

@ -431,15 +431,23 @@ update-generated:
"client lister informer deepcopy" \
"github.com/arangodb/kube-arangodb/pkg/generated" \
"github.com/arangodb/kube-arangodb/pkg/apis" \
"deployment:v1 replication:v1 storage:v1alpha backup:v1 deployment:v2alpha1 replication:v2alpha1 apps:v1 ml:v1alpha1 ml:v1beta1 scheduler:v1alpha1 scheduler:v1beta1" \
"deployment:v1 deployment:v2alpha1 \
replication:v1 replication:v2alpha1 \
storage:v1alpha \
backup:v1 \
apps:v1 \
ml:v1alpha1 ml:v1beta1 \
scheduler:v1alpha1 scheduler:v1beta1 \
analytics:v1alpha1" \
--go-header-file "./tools/codegen/boilerplate.go.txt" \
$(VERIFYARGS)
GOPATH=$(GOBUILDDIR) $(VENDORDIR)/k8s.io/code-generator/generate-groups.sh \
"deepcopy" \
"github.com/arangodb/kube-arangodb/pkg/generated" \
"github.com/arangodb/kube-arangodb/pkg/apis" \
"shared:v1 scheduler:v1alpha1/container scheduler:v1alpha1/container/resources scheduler:v1alpha1/pod scheduler:v1alpha1/pod/resources\
shared:v1 scheduler:v1beta1/container scheduler:v1beta1/container/resources scheduler:v1beta1/pod scheduler:v1beta1/pod/resources" \
"shared:v1 \
scheduler:v1alpha1/container scheduler:v1alpha1/container/resources scheduler:v1alpha1/pod scheduler:v1alpha1/pod/resources \
scheduler:v1beta1/container scheduler:v1beta1/container/resources scheduler:v1beta1/pod scheduler:v1beta1/pod/resources" \
--go-header-file "./tools/codegen/boilerplate.go.txt" \
$(VERIFYARGS)
@ -858,7 +866,8 @@ CRDS:=apps-job \
database-clustersynchronization database-deployment database-member database-task \
replication-deploymentreplication \
ml-storage ml-extension ml-job-batch ml-job-cron \
scheduler-profile
scheduler-profile \
analytics-graphanalyticsengine
.PHONY: sync-crds
sync-crds:

View file

@ -0,0 +1,22 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: graphanalyticsengines.analytics.arangodb.com
spec:
group: analytics.arangodb.com
names:
kind: GraphAnalyticsEngine
listKind: GraphAnalyticsEngineList
plural: graphanalyticsengines
singular: graphanalyticsengine
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
type: object
x-kubernetes-preserve-unknown-fields: true
served: true
storage: true
subresources:
status: {}

View file

@ -0,0 +1,26 @@
{{ if .Values.rbac.enabled -}}
{{ if not (eq .Values.operator.scope "namespaced") -}}
{{ if .Values.operator.features.analytics -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: {{ template "kube-arangodb.rbac-cluster" . }}-analytics
labels:
app.kubernetes.io/name: {{ template "kube-arangodb.name" . }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
release: {{ .Release.Name }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: {{ template "kube-arangodb.rbac-cluster" . }}-analytics
subjects:
- kind: ServiceAccount
name: {{ template "kube-arangodb.operatorName" . }}
namespace: {{ .Release.Namespace }}
{{- end }}
{{- end }}
{{- end }}

View file

@ -0,0 +1,22 @@
{{ if .Values.rbac.enabled -}}
{{ if not (eq .Values.operator.scope "namespaced") -}}
{{ if .Values.operator.features.analytics -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: {{ template "kube-arangodb.rbac-cluster" . }}-analytics
labels:
app.kubernetes.io/name: {{ template "kube-arangodb.name" . }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
release: {{ .Release.Name }}
rules:
- apiGroups: ["apiextensions.k8s.io"]
resources: ["customresourcedefinitions"]
verbs: ["get", "list", "watch"]
{{- end }}
{{- end }}
{{- end }}

View file

@ -0,0 +1,25 @@
{{ if .Values.rbac.enabled -}}
{{ if .Values.operator.features.analytics -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: {{ template "kube-arangodb.rbac" . }}-analytics
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ template "kube-arangodb.name" . }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
release: {{ .Release.Name }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: {{ template "kube-arangodb.rbac" . }}-analytics
subjects:
- kind: ServiceAccount
name: {{ template "kube-arangodb.operatorName" . }}
namespace: {{ .Release.Namespace }}
{{- end }}
{{- end }}

View file

@ -0,0 +1,36 @@
{{ if .Values.rbac.enabled -}}
{{ if .Values.operator.features.analytics -}}
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: {{ template "kube-arangodb.rbac" . }}-analytics
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ template "kube-arangodb.name" . }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/instance: {{ .Release.Name }}
release: {{ .Release.Name }}
rules:
- apiGroups:
- "analytics.arangodb.com"
resources:
- "graphanalyticsengines"
- "graphanalyticsengines/status"
verbs:
- "*"
- apiGroups:
- "database.arangodb.com"
resources:
- "arangodeployments"
verbs:
- "get"
- "list"
- "watch"
- apiGroups: [ "" ]
resources:
- "secrets"
verbs: [ "*" ]
{{- end }}
{{- end }}

View file

@ -114,6 +114,9 @@ spec:
{{ if .Values.operator.features.ml }}
- --operator.ml
{{- end }}
{{ if .Values.operator.features.analytics }}
- --operator.analytics
{{- end }}
{{ if .Values.operator.features.k8sToK8sClusterSync }}
- --operator.k2k-cluster-sync
{{- end }}

View file

@ -33,6 +33,7 @@ operator:
apps: false
k8sToK8sClusterSync: false
ml: false
analytics: false
tolerations: []
rbac:
enabled: true

View file

@ -118,6 +118,7 @@ var (
enableBackup bool // Run backup operator
enableApps bool // Run apps operator
enableML bool // Run ml operator
enableAnalytics bool // Run analytics operator
versionOnly bool // Run only version endpoint, explicitly disabled with other
enableK2KClusterSync bool // Run k2kClusterSync operator
@ -181,6 +182,7 @@ var (
backupProbe probe.ReadyProbe
appsProbe probe.ReadyProbe
mlProbe probe.ReadyProbe
analyticsProbe probe.ReadyProbe
k2KClusterSyncProbe probe.ReadyProbe
)
@ -206,6 +208,7 @@ func init() {
f.BoolVar(&operatorOptions.enableBackup, "operator.backup", false, "Enable to run the ArangoBackup operator")
f.BoolVar(&operatorOptions.enableApps, "operator.apps", false, "Enable to run the ArangoApps operator")
f.BoolVar(&operatorOptions.enableML, "operator.ml", false, "Enable to run the ArangoML operator")
f.BoolVar(&operatorOptions.enableAnalytics, "operator.analytics", false, "Enable to run the Analytics operator")
f.BoolVar(&operatorOptions.enableK2KClusterSync, "operator.k2k-cluster-sync", false, "Enable to run the ListSimple operator")
f.MarkDeprecated("operator.k2k-cluster-sync", "Enabled within deployment operator")
f.BoolVar(&operatorOptions.versionOnly, "operator.version", false, "Enable only version endpoint in Operator")
@ -333,19 +336,19 @@ func executeMain(cmd *cobra.Command, args []string) {
// Check operating mode
if !operatorOptions.enableDeployment && !operatorOptions.enableDeploymentReplication && !operatorOptions.enableStorage &&
!operatorOptions.enableBackup && !operatorOptions.enableApps && !operatorOptions.enableK2KClusterSync && !operatorOptions.enableML {
!operatorOptions.enableBackup && !operatorOptions.enableApps && !operatorOptions.enableK2KClusterSync && !operatorOptions.enableML && !operatorOptions.enableAnalytics {
if !operatorOptions.versionOnly {
if version.GetVersionV1().IsEnterprise() {
logger.Fatal("Turn on --operator.deployment, --operator.deployment-replication, --operator.storage, --operator.backup, --operator.apps, --operator.k2k-cluster-sync, --operator.ml or any combination of these")
logger.Fatal("Turn on --operator.deployment, --operator.deployment-replication, --operator.storage, --operator.backup, --operator.apps, --operator.k2k-cluster-sync, --operator.ml, --operator.analytics or any combination of these")
} else {
logger.Fatal("Turn on --operator.deployment, --operator.deployment-replication, --operator.storage, --operator.backup, --operator.apps, --operator.k2k-cluster-sync or any combination of these")
}
}
} else if operatorOptions.versionOnly {
logger.Fatal("Options --operator.deployment, --operator.deployment-replication, --operator.storage, --operator.backup, --operator.apps, --operator.k2k-cluster-sync, --operator.ml cannot be enabled together with --operator.version")
logger.Fatal("Options --operator.deployment, --operator.deployment-replication, --operator.storage, --operator.backup, --operator.apps, --operator.k2k-cluster-sync, --operator.ml, --operator.analytics cannot be enabled together with --operator.version")
} else if !version.GetVersionV1().IsEnterprise() {
if operatorOptions.enableML {
logger.Fatal("Options --operator.ml can be enabled only on the Enterprise Operator")
if operatorOptions.enableML || operatorOptions.enableAnalytics {
logger.Fatal("Options --operator.ml, --operator.analytics can be enabled only on the Enterprise Operator")
}
}
@ -476,6 +479,10 @@ func executeMain(cmd *cobra.Command, args []string) {
Enabled: cfg.EnableML,
Probe: &mlProbe,
},
Analytics: server.OperatorDependency{
Enabled: cfg.EnableAnalytics,
Probe: &analyticsProbe,
},
ClusterSync: server.OperatorDependency{
Enabled: cfg.EnableK2KClusterSync,
Probe: &k2KClusterSyncProbe,
@ -559,6 +566,7 @@ func newOperatorConfigAndDeps(id, namespace, name string) (operator.Config, oper
EnableBackup: operatorOptions.enableBackup,
EnableApps: operatorOptions.enableApps,
EnableML: operatorOptions.enableML,
EnableAnalytics: operatorOptions.enableAnalytics,
EnableK2KClusterSync: operatorOptions.enableK2KClusterSync,
AllowChaos: chaosOptions.allowed,
ScalingIntegrationEnabled: operatorOptions.scalingIntegrationEnabled,
@ -578,6 +586,7 @@ func newOperatorConfigAndDeps(id, namespace, name string) (operator.Config, oper
BackupProbe: &backupProbe,
AppsProbe: &appsProbe,
MlProbe: &mlProbe,
AnalyticsProbe: &analyticsProbe,
K2KClusterSyncProbe: &k2KClusterSyncProbe,
}

View file

@ -0,0 +1,56 @@
---
layout: page
parent: CRD reference
title: GraphAnalyticsEngine V1Alpha1
---
# API Reference for GraphAnalyticsEngine V1Alpha1
## Spec
### .spec.deploymentName
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.40/pkg/apis/analytics/v1alpha1/gae_spec.go#L30)</sup>
DeploymentName define deployment name used in the object. Immutable
## Status
### .status.conditions
Type: `api.Conditions` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.40/pkg/apis/analytics/v1alpha1/gae_status.go#L31)</sup>
Conditions specific to the entire extension
***
### .status.deployment.checksum
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.40/pkg/apis/shared/v1/object.go#L61)</sup>
UID keeps the information about object Checksum
***
### .status.deployment.name
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.40/pkg/apis/shared/v1/object.go#L52)</sup>
Name of the object
***
### .status.deployment.namespace
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.40/pkg/apis/shared/v1/object.go#L55)</sup>
Namespace of the object. Should default to the namespace of the parent object
***
### .status.deployment.uid
Type: `string` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.40/pkg/apis/shared/v1/object.go#L58)</sup>
UID keeps the information about object UID

View file

@ -33,6 +33,7 @@ import (
apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"sigs.k8s.io/yaml"
analyticsApi "github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1"
appsv1 "github.com/arangodb/kube-arangodb/pkg/apis/apps/v1"
backupv1 "github.com/arangodb/kube-arangodb/pkg/apis/backup/v1"
deploymentv1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
@ -226,6 +227,13 @@ func Test_GenerateCRValidationSchemas(t *testing.T) {
},
},
},
"analytics-graphanalyticsengine": {
fmt.Sprintf("%s/pkg/apis/analytics/v1alpha1", root): {
"v1alpha1": {
analyticsApi.GraphAnalyticsEngine{}.Spec,
},
},
},
}
for filePrefix, packagesToVersion := range input {

View file

@ -36,6 +36,7 @@ import (
"github.com/coreos/go-semver/semver"
"github.com/stretchr/testify/require"
analyticsApi "github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1"
appsApi "github.com/arangodb/kube-arangodb/pkg/apis/apps/v1"
backupApi "github.com/arangodb/kube-arangodb/pkg/apis/backup/v1"
deploymentApi "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
@ -248,6 +249,19 @@ func Test_GenerateAPIDocs(t *testing.T) {
},
},
},
"analytics": map[string]inputPackage{
"v1alpha1": {
Types: inputPackageTypes{
"GraphAnalyticsEngine.V1Alpha1": {
"Spec": analyticsApi.GraphAnalyticsEngine{}.Spec,
"Status": analyticsApi.GraphAnalyticsEngine{}.Status,
},
},
Shared: []string{
"shared/v1",
},
},
},
"replication": map[string]inputPackage{
"v1": {
Types: inputPackageTypes{

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 analytics
const (
GraphAnalyticsEngineCRDName = GraphAnalyticsEngineResourcePlural + "." + ArangoAnalyticsGroupName
GraphAnalyticsEngineResourceKind = "GraphAnalyticsEngine"
GraphAnalyticsEngineResourcePlural = "graphanalyticsengines"
ArangoAnalyticsGroupName = "analytics.arangodb.com"
)

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
import api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
const (
LicenseValidCondition api.ConditionType = "LicenseValid"
DeploymentFoundCondition api.ConditionType = "DeploymentFound"
ReadyCondition api.ConditionType = "Ready"
SpecValidCondition api.ConditionType = "SpecValid"
)

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=analytics.arangodb.com
package v1alpha1

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/analytics"
)
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// GraphAnalyticsEngineList is a list of Arango Analytics GraphAnalyticsEngine.
type GraphAnalyticsEngineList struct {
meta.TypeMeta `json:",inline"`
meta.ListMeta `json:"metadata,omitempty"`
Items []GraphAnalyticsEngine `json:"items"`
}
// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// GraphAnalyticsEngine contains definition and status of the Arango Analytics GraphAnalyticsEngine.
type GraphAnalyticsEngine struct {
meta.TypeMeta `json:",inline"`
meta.ObjectMeta `json:"metadata,omitempty"`
Spec GraphAnalyticsEngineSpec `json:"spec"`
Status GraphAnalyticsEngineStatus `json:"status"`
}
// AsOwner creates an OwnerReference for the given Extension
func (g *GraphAnalyticsEngine) AsOwner() meta.OwnerReference {
trueVar := true
return meta.OwnerReference{
APIVersion: SchemeGroupVersion.String(),
Kind: analytics.GraphAnalyticsEngineCRDName,
Name: g.Name,
UID: g.UID,
Controller: &trueVar,
}
}
func (g *GraphAnalyticsEngine) GetStatus() GraphAnalyticsEngineStatus {
return g.Status
}
func (g *GraphAnalyticsEngine) SetStatus(status GraphAnalyticsEngineStatus) {
g.Status = status
}

View file

@ -0,0 +1,47 @@
//
// DISCLAIMER
//
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Copyright holder is ArangoDB GmbH, Cologne, Germany
//
package v1alpha1
import (
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
"github.com/arangodb/kube-arangodb/pkg/util/errors"
)
type GraphAnalyticsEngineSpec struct {
// DeploymentName define deployment name used in the object. Immutable
DeploymentName *string `json:"deploymentName,omitempty"`
}
func (g *GraphAnalyticsEngineSpec) Validate() error {
if g == nil {
g = &GraphAnalyticsEngineSpec{}
}
return shared.WithErrors(shared.PrefixResourceErrors("spec",
shared.PrefixResourceErrors("deploymentName", shared.ValidateRequired(g.DeploymentName, func(s string) error {
if s == "" {
return errors.Errorf("DeploymentName should be not empty")
}
return nil
})),
))
}

View file

@ -0,0 +1,35 @@
//
// DISCLAIMER
//
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Copyright holder is ArangoDB GmbH, Cologne, Germany
//
package v1alpha1
import (
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
sharedApi "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1"
)
type GraphAnalyticsEngineStatus struct {
// Conditions specific to the entire extension
// +doc/type: api.Conditions
Conditions api.ConditionList `json:"conditions,omitempty"`
// Deployment keeps the ArangoDeployment reference
Deployment *sharedApi.Object `json:"deployment,omitempty"`
}

View file

@ -0,0 +1,54 @@
//
// DISCLAIMER
//
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Copyright holder is ArangoDB GmbH, Cologne, Germany
//
package 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/analytics"
)
const (
ArangoAnalyticsVersion = "v1alpha1"
)
var (
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
AddToScheme = SchemeBuilder.AddToScheme
SchemeGroupVersion = schema.GroupVersion{Group: analytics.ArangoAnalyticsGroupName, Version: ArangoAnalyticsVersion}
)
// 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,
&GraphAnalyticsEngine{},
&GraphAnalyticsEngineList{})
meta.AddToGroupVersion(s, SchemeGroupVersion)
return nil
}

View file

@ -0,0 +1,142 @@
//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 (
v1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
sharedv1 "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
)
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *GraphAnalyticsEngine) DeepCopyInto(out *GraphAnalyticsEngine) {
*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 GraphAnalyticsEngine.
func (in *GraphAnalyticsEngine) DeepCopy() *GraphAnalyticsEngine {
if in == nil {
return nil
}
out := new(GraphAnalyticsEngine)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *GraphAnalyticsEngine) 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 *GraphAnalyticsEngineList) DeepCopyInto(out *GraphAnalyticsEngineList) {
*out = *in
out.TypeMeta = in.TypeMeta
in.ListMeta.DeepCopyInto(&out.ListMeta)
if in.Items != nil {
in, out := &in.Items, &out.Items
*out = make([]GraphAnalyticsEngine, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GraphAnalyticsEngineList.
func (in *GraphAnalyticsEngineList) DeepCopy() *GraphAnalyticsEngineList {
if in == nil {
return nil
}
out := new(GraphAnalyticsEngineList)
in.DeepCopyInto(out)
return out
}
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (in *GraphAnalyticsEngineList) 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 *GraphAnalyticsEngineSpec) DeepCopyInto(out *GraphAnalyticsEngineSpec) {
*out = *in
if in.DeploymentName != nil {
in, out := &in.DeploymentName, &out.DeploymentName
*out = new(string)
**out = **in
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GraphAnalyticsEngineSpec.
func (in *GraphAnalyticsEngineSpec) DeepCopy() *GraphAnalyticsEngineSpec {
if in == nil {
return nil
}
out := new(GraphAnalyticsEngineSpec)
in.DeepCopyInto(out)
return out
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *GraphAnalyticsEngineStatus) DeepCopyInto(out *GraphAnalyticsEngineStatus) {
*out = *in
if in.Conditions != nil {
in, out := &in.Conditions, &out.Conditions
*out = make(v1.ConditionList, len(*in))
for i := range *in {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
if in.Deployment != nil {
in, out := &in.Deployment, &out.Deployment
*out = new(sharedv1.Object)
(*in).DeepCopyInto(*out)
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GraphAnalyticsEngineStatus.
func (in *GraphAnalyticsEngineStatus) DeepCopy() *GraphAnalyticsEngineStatus {
if in == nil {
return nil
}
out := new(GraphAnalyticsEngineStatus)
in.DeepCopyInto(out)
return out
}

39
pkg/crd/analytics.go Normal file
View file

@ -0,0 +1,39 @@
//
// DISCLAIMER
//
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 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.AnalyticsGAEDefinitionWithOptions,
}
for _, getDef := range defs {
defFn := getDef // bring into scope
registerCRDWithPanic(func(opts *crds.CRDOptions) crds.Definition {
return defFn(opts.AsFunc())
}, &crds.CRDOptions{
WithSchema: true,
})
}
}

View file

@ -0,0 +1,61 @@
//
// DISCLAIMER
//
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Copyright holder is ArangoDB GmbH, Cologne, Germany
//
package crds
import (
_ "embed"
apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
)
// Deprecated: use AnalyticsGAEWithOptions instead
func AnalyticsGAE() *apiextensions.CustomResourceDefinition {
return AnalyticsGAEWithOptions()
}
func AnalyticsGAEWithOptions(opts ...func(*CRDOptions)) *apiextensions.CustomResourceDefinition {
return getCRD(AnalyticsGAEDefinitionData(), opts...)
}
// Deprecated: use AnalyticsGAEDefinitionWithOptions instead
func AnalyticsGAEDefinition() Definition {
return AnalyticsGAEDefinitionWithOptions()
}
func AnalyticsGAEDefinitionWithOptions(opts ...func(*CRDOptions)) Definition {
return Definition{
DefinitionData: AnalyticsGAEDefinitionData(),
CRD: AnalyticsGAEWithOptions(opts...),
}
}
func AnalyticsGAEDefinitionData() DefinitionData {
return DefinitionData{
definition: analyticsGAEs,
schemaDefinition: analyticsGAEsSchemaRaw,
}
}
//go:embed analytics-graphanalyticsengine.yaml
var analyticsGAEs []byte
//go:embed analytics-graphanalyticsengine.schema.generated.yaml
var analyticsGAEsSchemaRaw []byte

View file

@ -0,0 +1,11 @@
v1alpha1:
openAPIV3Schema:
properties:
spec:
properties:
deploymentName:
description: DeploymentName define deployment name used in the object. Immutable
type: string
type: object
type: object
x-kubernetes-preserve-unknown-fields: true

View file

@ -0,0 +1,22 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: graphanalyticsengines.analytics.arangodb.com
spec:
group: analytics.arangodb.com
names:
kind: GraphAnalyticsEngine
listKind: GraphAnalyticsEngineList
plural: graphanalyticsengines
singular: graphanalyticsengine
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
type: object
x-kubernetes-preserve-unknown-fields: true
served: true
storage: true
subresources:
status: {}

View file

@ -87,6 +87,9 @@ func AllDefinitions() []Definition {
// Scheduler
SchedulerProfileDefinitionWithOptions(),
// Analytics
AnalyticsGAEDefinitionWithOptions(),
}
}

View file

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

View file

@ -43,6 +43,7 @@ var rootFactories = []shared.Factory{
kubernetes.Deployments(),
kubernetes.AgencyDump(),
kubernetes.ML(),
kubernetes.Analytics(),
kubernetes.Backup(),
kubernetes.Scheduler(),
}

View file

@ -0,0 +1,47 @@
//
// 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 kubernetes
import (
"github.com/rs/zerolog"
"github.com/arangodb/kube-arangodb/pkg/debug_package/shared"
"github.com/arangodb/kube-arangodb/pkg/util/errors"
"github.com/arangodb/kube-arangodb/pkg/util/kclient"
)
func Analytics() shared.Factory {
return shared.NewFactory("analytics", true, analytics)
}
func analytics(logger zerolog.Logger, files chan<- shared.File) error {
k, ok := kclient.GetDefaultFactory().Client()
if !ok {
return errors.Errorf("Client is not initialised")
}
if err := analyticsGAEs(logger, files, k); err != nil {
logger.Err(err).Msgf("Error while collecting arango analytics engines")
return err
}
return nil
}

View file

@ -0,0 +1,73 @@
//
// 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 kubernetes
import (
"context"
"fmt"
"github.com/rs/zerolog"
analyticsApi "github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1"
"github.com/arangodb/kube-arangodb/pkg/debug_package/cli"
"github.com/arangodb/kube-arangodb/pkg/debug_package/shared"
"github.com/arangodb/kube-arangodb/pkg/util/errors"
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors"
"github.com/arangodb/kube-arangodb/pkg/util/kclient"
)
func analyticsGAEs(logger zerolog.Logger, files chan<- shared.File, client kclient.Client) error {
extensions, err := listAnalyticsGAEs(client)
if err != nil {
if kerrors.IsForbiddenOrNotFound(err) {
return nil
}
return err
}
if err := errors.ExecuteWithErrorArrayP2(analyticsGAE, client, files, extensions...); err != nil {
logger.Err(err).Msgf("Error while collecting arango ml extensions")
return err
}
return nil
}
func analyticsGAE(client kclient.Client, files chan<- shared.File, ext *analyticsApi.GraphAnalyticsEngine) error {
files <- shared.NewYAMLFile(fmt.Sprintf("kubernetes/arango/analytics/gaes/%s.yaml", ext.GetName()), func() ([]interface{}, error) {
return []interface{}{ext}, nil
})
return nil
}
func listAnalyticsGAEs(client kclient.Client) ([]*analyticsApi.GraphAnalyticsEngine, error) {
return ListObjects[*analyticsApi.GraphAnalyticsEngineList, *analyticsApi.GraphAnalyticsEngine](context.Background(), client.Arango().AnalyticsV1alpha1().GraphAnalyticsEngines(cli.GetInput().Namespace), func(result *analyticsApi.GraphAnalyticsEngineList) []*analyticsApi.GraphAnalyticsEngine {
q := make([]*analyticsApi.GraphAnalyticsEngine, len(result.Items))
for id, e := range result.Items {
q[id] = e.DeepCopy()
}
return q
})
}

View file

@ -26,6 +26,7 @@ import (
"fmt"
"net/http"
analyticsv1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/analytics/v1alpha1"
appsv1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/apps/v1"
backupv1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/backup/v1"
databasev1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/deployment/v1"
@ -44,6 +45,7 @@ import (
type Interface interface {
Discovery() discovery.DiscoveryInterface
AnalyticsV1alpha1() analyticsv1alpha1.AnalyticsV1alpha1Interface
AppsV1() appsv1.AppsV1Interface
BackupV1() backupv1.BackupV1Interface
DatabaseV1() databasev1.DatabaseV1Interface
@ -60,6 +62,7 @@ type Interface interface {
// Clientset contains the clients for groups.
type Clientset struct {
*discovery.DiscoveryClient
analyticsV1alpha1 *analyticsv1alpha1.AnalyticsV1alpha1Client
appsV1 *appsv1.AppsV1Client
backupV1 *backupv1.BackupV1Client
databaseV1 *databasev1.DatabaseV1Client
@ -73,6 +76,11 @@ type Clientset struct {
storageV1alpha *storagev1alpha.StorageV1alphaClient
}
// AnalyticsV1alpha1 retrieves the AnalyticsV1alpha1Client
func (c *Clientset) AnalyticsV1alpha1() analyticsv1alpha1.AnalyticsV1alpha1Interface {
return c.analyticsV1alpha1
}
// AppsV1 retrieves the AppsV1Client
func (c *Clientset) AppsV1() appsv1.AppsV1Interface {
return c.appsV1
@ -172,6 +180,10 @@ func NewForConfigAndClient(c *rest.Config, httpClient *http.Client) (*Clientset,
var cs Clientset
var err error
cs.analyticsV1alpha1, err = analyticsv1alpha1.NewForConfigAndClient(&configShallowCopy, httpClient)
if err != nil {
return nil, err
}
cs.appsV1, err = appsv1.NewForConfigAndClient(&configShallowCopy, httpClient)
if err != nil {
return nil, err
@ -237,6 +249,7 @@ func NewForConfigOrDie(c *rest.Config) *Clientset {
// New creates a new Clientset for the given RESTClient.
func New(c rest.Interface) *Clientset {
var cs Clientset
cs.analyticsV1alpha1 = analyticsv1alpha1.New(c)
cs.appsV1 = appsv1.New(c)
cs.backupV1 = backupv1.New(c)
cs.databaseV1 = databasev1.New(c)

View file

@ -24,6 +24,8 @@ package fake
import (
clientset "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned"
analyticsv1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/analytics/v1alpha1"
fakeanalyticsv1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/analytics/v1alpha1/fake"
appsv1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/apps/v1"
fakeappsv1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/apps/v1/fake"
backupv1 "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/typed/backup/v1"
@ -103,6 +105,11 @@ var (
_ testing.FakeClient = &Clientset{}
)
// AnalyticsV1alpha1 retrieves the AnalyticsV1alpha1Client
func (c *Clientset) AnalyticsV1alpha1() analyticsv1alpha1.AnalyticsV1alpha1Interface {
return &fakeanalyticsv1alpha1.FakeAnalyticsV1alpha1{Fake: &c.Fake}
}
// AppsV1 retrieves the AppsV1Client
func (c *Clientset) AppsV1() appsv1.AppsV1Interface {
return &fakeappsv1.FakeAppsV1{Fake: &c.Fake}

View file

@ -23,6 +23,7 @@
package fake
import (
analyticsv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1"
appsv1 "github.com/arangodb/kube-arangodb/pkg/apis/apps/v1"
backupv1 "github.com/arangodb/kube-arangodb/pkg/apis/backup/v1"
databasev1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
@ -45,6 +46,7 @@ var scheme = runtime.NewScheme()
var codecs = serializer.NewCodecFactory(scheme)
var localSchemeBuilder = runtime.SchemeBuilder{
analyticsv1alpha1.AddToScheme,
appsv1.AddToScheme,
backupv1.AddToScheme,
databasev1.AddToScheme,

View file

@ -23,6 +23,7 @@
package scheme
import (
analyticsv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1"
appsv1 "github.com/arangodb/kube-arangodb/pkg/apis/apps/v1"
backupv1 "github.com/arangodb/kube-arangodb/pkg/apis/backup/v1"
databasev1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
@ -45,6 +46,7 @@ var Scheme = runtime.NewScheme()
var Codecs = serializer.NewCodecFactory(Scheme)
var ParameterCodec = runtime.NewParameterCodec(Scheme)
var localSchemeBuilder = runtime.SchemeBuilder{
analyticsv1alpha1.AddToScheme,
appsv1.AddToScheme,
backupv1.AddToScheme,
databasev1.AddToScheme,

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/analytics/v1alpha1"
"github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme"
rest "k8s.io/client-go/rest"
)
type AnalyticsV1alpha1Interface interface {
RESTClient() rest.Interface
GraphAnalyticsEnginesGetter
}
// AnalyticsV1alpha1Client is used to interact with features provided by the analytics.arangodb.com group.
type AnalyticsV1alpha1Client struct {
restClient rest.Interface
}
func (c *AnalyticsV1alpha1Client) GraphAnalyticsEngines(namespace string) GraphAnalyticsEngineInterface {
return newGraphAnalyticsEngines(c, namespace)
}
// NewForConfig creates a new AnalyticsV1alpha1Client for the given config.
// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient),
// where httpClient was generated with rest.HTTPClientFor(c).
func NewForConfig(c *rest.Config) (*AnalyticsV1alpha1Client, 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 AnalyticsV1alpha1Client 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) (*AnalyticsV1alpha1Client, 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 &AnalyticsV1alpha1Client{client}, nil
}
// NewForConfigOrDie creates a new AnalyticsV1alpha1Client for the given config and
// panics if there is an error in the config.
func NewForConfigOrDie(c *rest.Config) *AnalyticsV1alpha1Client {
client, err := NewForConfig(c)
if err != nil {
panic(err)
}
return client
}
// New creates a new AnalyticsV1alpha1Client for the given RESTClient.
func New(c rest.Interface) *AnalyticsV1alpha1Client {
return &AnalyticsV1alpha1Client{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 *AnalyticsV1alpha1Client) RESTClient() rest.Interface {
if c == nil {
return nil
}
return c.restClient
}

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,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/analytics/v1alpha1"
rest "k8s.io/client-go/rest"
testing "k8s.io/client-go/testing"
)
type FakeAnalyticsV1alpha1 struct {
*testing.Fake
}
func (c *FakeAnalyticsV1alpha1) GraphAnalyticsEngines(namespace string) v1alpha1.GraphAnalyticsEngineInterface {
return &FakeGraphAnalyticsEngines{c, namespace}
}
// RESTClient returns a RESTClient that is used to communicate
// with API server by this client implementation.
func (c *FakeAnalyticsV1alpha1) RESTClient() rest.Interface {
var ret *rest.RESTClient
return ret
}

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/analytics/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"
)
// FakeGraphAnalyticsEngines implements GraphAnalyticsEngineInterface
type FakeGraphAnalyticsEngines struct {
Fake *FakeAnalyticsV1alpha1
ns string
}
var graphanalyticsenginesResource = v1alpha1.SchemeGroupVersion.WithResource("graphanalyticsengines")
var graphanalyticsenginesKind = v1alpha1.SchemeGroupVersion.WithKind("GraphAnalyticsEngine")
// Get takes name of the graphAnalyticsEngine, and returns the corresponding graphAnalyticsEngine object, and an error if there is any.
func (c *FakeGraphAnalyticsEngines) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) {
obj, err := c.Fake.
Invokes(testing.NewGetAction(graphanalyticsenginesResource, c.ns, name), &v1alpha1.GraphAnalyticsEngine{})
if obj == nil {
return nil, err
}
return obj.(*v1alpha1.GraphAnalyticsEngine), err
}
// List takes label and field selectors, and returns the list of GraphAnalyticsEngines that match those selectors.
func (c *FakeGraphAnalyticsEngines) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.GraphAnalyticsEngineList, err error) {
obj, err := c.Fake.
Invokes(testing.NewListAction(graphanalyticsenginesResource, graphanalyticsenginesKind, c.ns, opts), &v1alpha1.GraphAnalyticsEngineList{})
if obj == nil {
return nil, err
}
label, _, _ := testing.ExtractFromListOptions(opts)
if label == nil {
label = labels.Everything()
}
list := &v1alpha1.GraphAnalyticsEngineList{ListMeta: obj.(*v1alpha1.GraphAnalyticsEngineList).ListMeta}
for _, item := range obj.(*v1alpha1.GraphAnalyticsEngineList).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 graphAnalyticsEngines.
func (c *FakeGraphAnalyticsEngines) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
return c.Fake.
InvokesWatch(testing.NewWatchAction(graphanalyticsenginesResource, c.ns, opts))
}
// Create takes the representation of a graphAnalyticsEngine and creates it. Returns the server's representation of the graphAnalyticsEngine, and an error, if there is any.
func (c *FakeGraphAnalyticsEngines) Create(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.CreateOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) {
obj, err := c.Fake.
Invokes(testing.NewCreateAction(graphanalyticsenginesResource, c.ns, graphAnalyticsEngine), &v1alpha1.GraphAnalyticsEngine{})
if obj == nil {
return nil, err
}
return obj.(*v1alpha1.GraphAnalyticsEngine), err
}
// Update takes the representation of a graphAnalyticsEngine and updates it. Returns the server's representation of the graphAnalyticsEngine, and an error, if there is any.
func (c *FakeGraphAnalyticsEngines) Update(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.UpdateOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) {
obj, err := c.Fake.
Invokes(testing.NewUpdateAction(graphanalyticsenginesResource, c.ns, graphAnalyticsEngine), &v1alpha1.GraphAnalyticsEngine{})
if obj == nil {
return nil, err
}
return obj.(*v1alpha1.GraphAnalyticsEngine), err
}
// UpdateStatus was generated because the type contains a Status member.
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
func (c *FakeGraphAnalyticsEngines) UpdateStatus(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.UpdateOptions) (*v1alpha1.GraphAnalyticsEngine, error) {
obj, err := c.Fake.
Invokes(testing.NewUpdateSubresourceAction(graphanalyticsenginesResource, "status", c.ns, graphAnalyticsEngine), &v1alpha1.GraphAnalyticsEngine{})
if obj == nil {
return nil, err
}
return obj.(*v1alpha1.GraphAnalyticsEngine), err
}
// Delete takes name of the graphAnalyticsEngine and deletes it. Returns an error if one occurs.
func (c *FakeGraphAnalyticsEngines) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
_, err := c.Fake.
Invokes(testing.NewDeleteActionWithOptions(graphanalyticsenginesResource, c.ns, name, opts), &v1alpha1.GraphAnalyticsEngine{})
return err
}
// DeleteCollection deletes a collection of objects.
func (c *FakeGraphAnalyticsEngines) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
action := testing.NewDeleteCollectionAction(graphanalyticsenginesResource, c.ns, listOpts)
_, err := c.Fake.Invokes(action, &v1alpha1.GraphAnalyticsEngineList{})
return err
}
// Patch applies the patch and returns the patched graphAnalyticsEngine.
func (c *FakeGraphAnalyticsEngines) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.GraphAnalyticsEngine, err error) {
obj, err := c.Fake.
Invokes(testing.NewPatchSubresourceAction(graphanalyticsenginesResource, c.ns, name, pt, data, subresources...), &v1alpha1.GraphAnalyticsEngine{})
if obj == nil {
return nil, err
}
return obj.(*v1alpha1.GraphAnalyticsEngine), err
}

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 GraphAnalyticsEngineExpansion interface{}

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/analytics/v1alpha1"
scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
types "k8s.io/apimachinery/pkg/types"
watch "k8s.io/apimachinery/pkg/watch"
rest "k8s.io/client-go/rest"
)
// GraphAnalyticsEnginesGetter has a method to return a GraphAnalyticsEngineInterface.
// A group's client should implement this interface.
type GraphAnalyticsEnginesGetter interface {
GraphAnalyticsEngines(namespace string) GraphAnalyticsEngineInterface
}
// GraphAnalyticsEngineInterface has methods to work with GraphAnalyticsEngine resources.
type GraphAnalyticsEngineInterface interface {
Create(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.CreateOptions) (*v1alpha1.GraphAnalyticsEngine, error)
Update(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.UpdateOptions) (*v1alpha1.GraphAnalyticsEngine, error)
UpdateStatus(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.UpdateOptions) (*v1alpha1.GraphAnalyticsEngine, error)
Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.GraphAnalyticsEngine, error)
List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.GraphAnalyticsEngineList, 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.GraphAnalyticsEngine, err error)
GraphAnalyticsEngineExpansion
}
// graphAnalyticsEngines implements GraphAnalyticsEngineInterface
type graphAnalyticsEngines struct {
client rest.Interface
ns string
}
// newGraphAnalyticsEngines returns a GraphAnalyticsEngines
func newGraphAnalyticsEngines(c *AnalyticsV1alpha1Client, namespace string) *graphAnalyticsEngines {
return &graphAnalyticsEngines{
client: c.RESTClient(),
ns: namespace,
}
}
// Get takes name of the graphAnalyticsEngine, and returns the corresponding graphAnalyticsEngine object, and an error if there is any.
func (c *graphAnalyticsEngines) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) {
result = &v1alpha1.GraphAnalyticsEngine{}
err = c.client.Get().
Namespace(c.ns).
Resource("graphanalyticsengines").
Name(name).
VersionedParams(&options, scheme.ParameterCodec).
Do(ctx).
Into(result)
return
}
// List takes label and field selectors, and returns the list of GraphAnalyticsEngines that match those selectors.
func (c *graphAnalyticsEngines) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.GraphAnalyticsEngineList, err error) {
var timeout time.Duration
if opts.TimeoutSeconds != nil {
timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
}
result = &v1alpha1.GraphAnalyticsEngineList{}
err = c.client.Get().
Namespace(c.ns).
Resource("graphanalyticsengines").
VersionedParams(&opts, scheme.ParameterCodec).
Timeout(timeout).
Do(ctx).
Into(result)
return
}
// Watch returns a watch.Interface that watches the requested graphAnalyticsEngines.
func (c *graphAnalyticsEngines) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
var timeout time.Duration
if opts.TimeoutSeconds != nil {
timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
}
opts.Watch = true
return c.client.Get().
Namespace(c.ns).
Resource("graphanalyticsengines").
VersionedParams(&opts, scheme.ParameterCodec).
Timeout(timeout).
Watch(ctx)
}
// Create takes the representation of a graphAnalyticsEngine and creates it. Returns the server's representation of the graphAnalyticsEngine, and an error, if there is any.
func (c *graphAnalyticsEngines) Create(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.CreateOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) {
result = &v1alpha1.GraphAnalyticsEngine{}
err = c.client.Post().
Namespace(c.ns).
Resource("graphanalyticsengines").
VersionedParams(&opts, scheme.ParameterCodec).
Body(graphAnalyticsEngine).
Do(ctx).
Into(result)
return
}
// Update takes the representation of a graphAnalyticsEngine and updates it. Returns the server's representation of the graphAnalyticsEngine, and an error, if there is any.
func (c *graphAnalyticsEngines) Update(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.UpdateOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) {
result = &v1alpha1.GraphAnalyticsEngine{}
err = c.client.Put().
Namespace(c.ns).
Resource("graphanalyticsengines").
Name(graphAnalyticsEngine.Name).
VersionedParams(&opts, scheme.ParameterCodec).
Body(graphAnalyticsEngine).
Do(ctx).
Into(result)
return
}
// UpdateStatus was generated because the type contains a Status member.
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
func (c *graphAnalyticsEngines) UpdateStatus(ctx context.Context, graphAnalyticsEngine *v1alpha1.GraphAnalyticsEngine, opts v1.UpdateOptions) (result *v1alpha1.GraphAnalyticsEngine, err error) {
result = &v1alpha1.GraphAnalyticsEngine{}
err = c.client.Put().
Namespace(c.ns).
Resource("graphanalyticsengines").
Name(graphAnalyticsEngine.Name).
SubResource("status").
VersionedParams(&opts, scheme.ParameterCodec).
Body(graphAnalyticsEngine).
Do(ctx).
Into(result)
return
}
// Delete takes name of the graphAnalyticsEngine and deletes it. Returns an error if one occurs.
func (c *graphAnalyticsEngines) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
return c.client.Delete().
Namespace(c.ns).
Resource("graphanalyticsengines").
Name(name).
Body(&opts).
Do(ctx).
Error()
}
// DeleteCollection deletes a collection of objects.
func (c *graphAnalyticsEngines) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
var timeout time.Duration
if listOpts.TimeoutSeconds != nil {
timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second
}
return c.client.Delete().
Namespace(c.ns).
Resource("graphanalyticsengines").
VersionedParams(&listOpts, scheme.ParameterCodec).
Timeout(timeout).
Body(&opts).
Do(ctx).
Error()
}
// Patch applies the patch and returns the patched graphAnalyticsEngine.
func (c *graphAnalyticsEngines) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.GraphAnalyticsEngine, err error) {
result = &v1alpha1.GraphAnalyticsEngine{}
err = c.client.Patch(pt).
Namespace(c.ns).
Resource("graphanalyticsengines").
Name(name).
SubResource(subresources...).
VersionedParams(&opts, scheme.ParameterCodec).
Body(data).
Do(ctx).
Into(result)
return
}

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 analytics
import (
v1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/analytics/v1alpha1"
internalinterfaces "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/internalinterfaces"
)
// 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"
analyticsv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/analytics/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/analytics/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"
)
// GraphAnalyticsEngineInformer provides access to a shared informer and lister for
// GraphAnalyticsEngines.
type GraphAnalyticsEngineInformer interface {
Informer() cache.SharedIndexInformer
Lister() v1alpha1.GraphAnalyticsEngineLister
}
type graphAnalyticsEngineInformer struct {
factory internalinterfaces.SharedInformerFactory
tweakListOptions internalinterfaces.TweakListOptionsFunc
namespace string
}
// NewGraphAnalyticsEngineInformer constructs a new informer for GraphAnalyticsEngine 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 NewGraphAnalyticsEngineInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
return NewFilteredGraphAnalyticsEngineInformer(client, namespace, resyncPeriod, indexers, nil)
}
// NewFilteredGraphAnalyticsEngineInformer constructs a new informer for GraphAnalyticsEngine 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 NewFilteredGraphAnalyticsEngineInformer(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.AnalyticsV1alpha1().GraphAnalyticsEngines(namespace).List(context.TODO(), options)
},
WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
if tweakListOptions != nil {
tweakListOptions(&options)
}
return client.AnalyticsV1alpha1().GraphAnalyticsEngines(namespace).Watch(context.TODO(), options)
},
},
&analyticsv1alpha1.GraphAnalyticsEngine{},
resyncPeriod,
indexers,
)
}
func (f *graphAnalyticsEngineInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
return NewFilteredGraphAnalyticsEngineInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
}
func (f *graphAnalyticsEngineInformer) Informer() cache.SharedIndexInformer {
return f.factory.InformerFor(&analyticsv1alpha1.GraphAnalyticsEngine{}, f.defaultInformer)
}
func (f *graphAnalyticsEngineInformer) Lister() v1alpha1.GraphAnalyticsEngineLister {
return v1alpha1.NewGraphAnalyticsEngineLister(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 {
// GraphAnalyticsEngines returns a GraphAnalyticsEngineInformer.
GraphAnalyticsEngines() GraphAnalyticsEngineInformer
}
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}
}
// GraphAnalyticsEngines returns a GraphAnalyticsEngineInformer.
func (v *version) GraphAnalyticsEngines() GraphAnalyticsEngineInformer {
return &graphAnalyticsEngineInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
}

View file

@ -28,6 +28,7 @@ import (
time "time"
versioned "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned"
analytics "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/analytics"
apps "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/apps"
backup "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/backup"
deployment "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/deployment"
@ -263,6 +264,7 @@ type SharedInformerFactory interface {
// client.
InformerFor(obj runtime.Object, newFunc internalinterfaces.NewInformerFunc) cache.SharedIndexInformer
Analytics() analytics.Interface
Apps() apps.Interface
Backup() backup.Interface
Database() deployment.Interface
@ -272,6 +274,10 @@ type SharedInformerFactory interface {
Storage() storage.Interface
}
func (f *sharedInformerFactory) Analytics() analytics.Interface {
return analytics.New(f, f.namespace, f.tweakListOptions)
}
func (f *sharedInformerFactory) Apps() apps.Interface {
return apps.New(f, f.namespace, f.tweakListOptions)
}

View file

@ -25,11 +25,12 @@ package externalversions
import (
"fmt"
v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1"
v1 "github.com/arangodb/kube-arangodb/pkg/apis/apps/v1"
backupv1 "github.com/arangodb/kube-arangodb/pkg/apis/backup/v1"
deploymentv1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
v2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v2alpha1"
v1alpha1 "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"
replicationv1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v1"
replicationv2alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/replication/v2alpha1"
@ -66,7 +67,11 @@ func (f *genericInformer) Lister() cache.GenericLister {
// TODO extend this to unknown resources with a client pool
func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) {
switch resource {
// Group=apps.arangodb.com, Version=v1
// Group=analytics.arangodb.com, Version=v1alpha1
case v1alpha1.SchemeGroupVersion.WithResource("graphanalyticsengines"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Analytics().V1alpha1().GraphAnalyticsEngines().Informer()}, nil
// Group=apps.arangodb.com, Version=v1
case v1.SchemeGroupVersion.WithResource("arangojobs"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Apps().V1().ArangoJobs().Informer()}, nil
@ -97,13 +102,13 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource
return &genericInformer{resource: resource.GroupResource(), informer: f.Database().V2alpha1().ArangoTasks().Informer()}, nil
// Group=ml.arangodb.com, Version=v1alpha1
case v1alpha1.SchemeGroupVersion.WithResource("arangomlbatchjobs"):
case mlv1alpha1.SchemeGroupVersion.WithResource("arangomlbatchjobs"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Ml().V1alpha1().ArangoMLBatchJobs().Informer()}, nil
case v1alpha1.SchemeGroupVersion.WithResource("arangomlcronjobs"):
case mlv1alpha1.SchemeGroupVersion.WithResource("arangomlcronjobs"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Ml().V1alpha1().ArangoMLCronJobs().Informer()}, nil
case v1alpha1.SchemeGroupVersion.WithResource("arangomlextensions"):
case mlv1alpha1.SchemeGroupVersion.WithResource("arangomlextensions"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Ml().V1alpha1().ArangoMLExtensions().Informer()}, nil
case v1alpha1.SchemeGroupVersion.WithResource("arangomlstorages"):
case mlv1alpha1.SchemeGroupVersion.WithResource("arangomlstorages"):
return &genericInformer{resource: resource.GroupResource(), informer: f.Ml().V1alpha1().ArangoMLStorages().Informer()}, nil
// Group=ml.arangodb.com, Version=v1beta1

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
// GraphAnalyticsEngineListerExpansion allows custom methods to be added to
// GraphAnalyticsEngineLister.
type GraphAnalyticsEngineListerExpansion interface{}
// GraphAnalyticsEngineNamespaceListerExpansion allows custom methods to be added to
// GraphAnalyticsEngineNamespaceLister.
type GraphAnalyticsEngineNamespaceListerExpansion interface{}

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/analytics/v1alpha1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/client-go/tools/cache"
)
// GraphAnalyticsEngineLister helps list GraphAnalyticsEngines.
// All objects returned here must be treated as read-only.
type GraphAnalyticsEngineLister interface {
// List lists all GraphAnalyticsEngines in the indexer.
// Objects returned here must be treated as read-only.
List(selector labels.Selector) (ret []*v1alpha1.GraphAnalyticsEngine, err error)
// GraphAnalyticsEngines returns an object that can list and get GraphAnalyticsEngines.
GraphAnalyticsEngines(namespace string) GraphAnalyticsEngineNamespaceLister
GraphAnalyticsEngineListerExpansion
}
// graphAnalyticsEngineLister implements the GraphAnalyticsEngineLister interface.
type graphAnalyticsEngineLister struct {
indexer cache.Indexer
}
// NewGraphAnalyticsEngineLister returns a new GraphAnalyticsEngineLister.
func NewGraphAnalyticsEngineLister(indexer cache.Indexer) GraphAnalyticsEngineLister {
return &graphAnalyticsEngineLister{indexer: indexer}
}
// List lists all GraphAnalyticsEngines in the indexer.
func (s *graphAnalyticsEngineLister) List(selector labels.Selector) (ret []*v1alpha1.GraphAnalyticsEngine, err error) {
err = cache.ListAll(s.indexer, selector, func(m interface{}) {
ret = append(ret, m.(*v1alpha1.GraphAnalyticsEngine))
})
return ret, err
}
// GraphAnalyticsEngines returns an object that can list and get GraphAnalyticsEngines.
func (s *graphAnalyticsEngineLister) GraphAnalyticsEngines(namespace string) GraphAnalyticsEngineNamespaceLister {
return graphAnalyticsEngineNamespaceLister{indexer: s.indexer, namespace: namespace}
}
// GraphAnalyticsEngineNamespaceLister helps list and get GraphAnalyticsEngines.
// All objects returned here must be treated as read-only.
type GraphAnalyticsEngineNamespaceLister interface {
// List lists all GraphAnalyticsEngines in the indexer for a given namespace.
// Objects returned here must be treated as read-only.
List(selector labels.Selector) (ret []*v1alpha1.GraphAnalyticsEngine, err error)
// Get retrieves the GraphAnalyticsEngine from the indexer for a given namespace and name.
// Objects returned here must be treated as read-only.
Get(name string) (*v1alpha1.GraphAnalyticsEngine, error)
GraphAnalyticsEngineNamespaceListerExpansion
}
// graphAnalyticsEngineNamespaceLister implements the GraphAnalyticsEngineNamespaceLister
// interface.
type graphAnalyticsEngineNamespaceLister struct {
indexer cache.Indexer
namespace string
}
// List lists all GraphAnalyticsEngines in the indexer for a given namespace.
func (s graphAnalyticsEngineNamespaceLister) List(selector labels.Selector) (ret []*v1alpha1.GraphAnalyticsEngine, err error) {
err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) {
ret = append(ret, m.(*v1alpha1.GraphAnalyticsEngine))
})
return ret, err
}
// Get retrieves the GraphAnalyticsEngine from the indexer for a given namespace and name.
func (s graphAnalyticsEngineNamespaceLister) Get(name string) (*v1alpha1.GraphAnalyticsEngine, error) {
obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name)
if err != nil {
return nil, err
}
if !exists {
return nil, errors.NewNotFound(v1alpha1.Resource("graphanalyticsengine"), name)
}
return obj.(*v1alpha1.GraphAnalyticsEngine), nil
}

View file

@ -1,7 +1,7 @@
//
// DISCLAIMER
//
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -40,3 +40,12 @@ func (o *Operator) onStartML(stop <-chan struct{}) {
func (o *Operator) onStartOperatorV2ML(operator operatorV2.Operator, recorder event.Recorder, client arangoClientSet.Interface, kubeClient kubernetes.Interface, informer arangoInformer.SharedInformerFactory, kubeInformer informers.SharedInformerFactory) {
panic("Unable to start ML Operator in Community")
}
// onStartAnalytics starts the operator and run till given channel is closed.
func (o *Operator) onStartAnalytics(stop <-chan struct{}) {
panic("Unable to start Analytics Operator in Community")
}
func (o *Operator) onStartOperatorV2Analytics(operator operatorV2.Operator, recorder event.Recorder, client arangoClientSet.Interface, kubeClient kubernetes.Interface, informer arangoInformer.SharedInformerFactory, kubeInformer informers.SharedInformerFactory) {
panic("Unable to start Analytics Operator in Community")
}

View file

@ -1,7 +1,7 @@
//
// DISCLAIMER
//
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@ -68,9 +68,10 @@ var logger = logging.Global().RegisterAndGetLogger("operator", logging.Info)
type operatorV2type string
const (
backupOperator operatorV2type = "backup"
mlOperator operatorV2type = "ml"
appsOperator operatorV2type = "apps"
backupOperator operatorV2type = "backup"
mlOperator operatorV2type = "ml"
analyticsOperator operatorV2type = "analytics"
appsOperator operatorV2type = "apps"
)
type Event struct {
@ -100,6 +101,7 @@ type Config struct {
EnableDeploymentReplication bool
EnableStorage bool
EnableML bool
EnableAnalytics bool
EnableBackup bool
EnableApps bool
EnableK2KClusterSync bool
@ -121,6 +123,7 @@ type Dependencies struct {
StorageProbe *probe.ReadyProbe
BackupProbe *probe.ReadyProbe
MlProbe *probe.ReadyProbe
AnalyticsProbe *probe.ReadyProbe
AppsProbe *probe.ReadyProbe
K2KClusterSyncProbe *probe.ReadyProbe
}
@ -182,6 +185,13 @@ func (o *Operator) Run() {
go o.runWithoutLeaderElection("arango-ml-operator", constants.MLLabelRole, o.onStartML, o.Dependencies.MlProbe)
}
}
if o.Config.EnableAnalytics {
if !o.Config.SingleMode {
go o.runLeaderElection("arango-analytics-operator", constants.AnalyticsLabelRole, o.onStartAnalytics, o.Dependencies.AnalyticsProbe)
} else {
go o.runWithoutLeaderElection("arango-analytics-operator", constants.AnalyticsLabelRole, o.onStartAnalytics, o.Dependencies.AnalyticsProbe)
}
}
if o.Config.EnableK2KClusterSync {
// Nothing to do
o.log.Warn("K2K Cluster sync is permanently disabled")
@ -277,6 +287,9 @@ func (o *Operator) onStartOperatorV2(operatorType operatorV2type, stop <-chan st
case mlOperator:
o.onStartOperatorV2ML(operator, eventRecorder, o.Client.Arango(), o.Client.Kubernetes(), arangoInformer, kubeInformer)
o.Dependencies.MlProbe.SetReady()
case analyticsOperator:
o.onStartOperatorV2Analytics(operator, eventRecorder, o.Client.Arango(), o.Client.Kubernetes(), arangoInformer, kubeInformer)
o.Dependencies.AnalyticsProbe.SetReady()
}
if err := operator.RegisterStarter(arangoInformer); err != nil {
@ -291,6 +304,7 @@ func (o *Operator) onStartOperatorV2(operatorType operatorV2type, stop <-chan st
operator.Start(8, stop)
o.Dependencies.MlProbe.SetReady()
o.Dependencies.AnalyticsProbe.SetReady()
<-stop
}

View file

@ -25,6 +25,7 @@ import (
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
analyticsApi "github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1"
backupApi "github.com/arangodb/kube-arangodb/pkg/apis/backup/v1"
mlApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1"
mlApi "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1beta1"
@ -46,6 +47,10 @@ func WithArangoBatchJobUpdateStatusInterfaceRetry(ctx context.Context, client Up
return WithUpdateStatusInterfaceRetry[mlApiv1alpha1.ArangoMLBatchJobStatus, *mlApiv1alpha1.ArangoMLBatchJob](ctx, client, obj, status, opts)
}
func WithAnalyticsGAEUpdateStatusInterfaceRetry(ctx context.Context, client UpdateStatusInterface[analyticsApi.GraphAnalyticsEngineStatus, *analyticsApi.GraphAnalyticsEngine], obj *analyticsApi.GraphAnalyticsEngine, status analyticsApi.GraphAnalyticsEngineStatus, opts meta.UpdateOptions) (*analyticsApi.GraphAnalyticsEngine, error) {
return WithUpdateStatusInterfaceRetry[analyticsApi.GraphAnalyticsEngineStatus, *analyticsApi.GraphAnalyticsEngine](ctx, client, obj, status, opts)
}
func WithArangoStorageUpdateStatusInterfaceRetry(ctx context.Context, client UpdateStatusInterface[mlApi.ArangoMLStorageStatus, *mlApi.ArangoMLStorage], obj *mlApi.ArangoMLStorage, status mlApi.ArangoMLStorageStatus, opts meta.UpdateOptions) (*mlApi.ArangoMLStorage, error) {
return WithUpdateStatusInterfaceRetry[mlApi.ArangoMLStorageStatus, *mlApi.ArangoMLStorage](ctx, client, obj, status, opts)
}

View file

@ -69,6 +69,7 @@ type Dependencies struct {
Backup OperatorDependency
Apps OperatorDependency
ML OperatorDependency
Analytics OperatorDependency
ClusterSync OperatorDependency
Operators Operators
Secrets typedCore.SecretInterface
@ -189,6 +190,10 @@ func NewServer(cli typedCore.CoreV1Interface, cfg Config, deps Dependencies) (*S
r.GET("/ready/ml", gin.WrapF(deps.ML.Probe.ReadyHandler))
readyProbes = append(readyProbes, deps.ML.Probe)
}
if deps.Analytics.Enabled {
r.GET("/ready/analytics", gin.WrapF(deps.Analytics.Probe.ReadyHandler))
readyProbes = append(readyProbes, deps.Analytics.Probe)
}
r.GET("/ready", gin.WrapF(ready(readyProbes...)))
r.GET("/metrics", gin.WrapF(metrics.Handler()))
r.POST("/login", s.auth.handleLogin)

View file

@ -72,6 +72,7 @@ const (
BackupLabelRole = "backup/role"
MLLabelRole = "ml/role"
AnalyticsLabelRole = "analytics/role"
AppsLabelRole = "apps/role"
ClusterSyncLabelRole = "clustersync/role"
LabelRole = "role"

View file

@ -36,6 +36,8 @@ import (
"k8s.io/apimachinery/pkg/util/uuid"
"k8s.io/client-go/kubernetes"
"github.com/arangodb/kube-arangodb/pkg/apis/analytics"
analyticsApi "github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1"
"github.com/arangodb/kube-arangodb/pkg/apis/backup"
backupApi "github.com/arangodb/kube-arangodb/pkg/apis/backup/v1"
"github.com/arangodb/kube-arangodb/pkg/apis/deployment"
@ -235,6 +237,12 @@ func CreateObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientSe
vl := *v
_, err := arango.SchedulerV1beta1().ArangoProfiles(vl.GetNamespace()).Create(context.Background(), vl, meta.CreateOptions{})
require.NoError(t, err)
case **analyticsApi.GraphAnalyticsEngine:
require.NotNil(t, v)
vl := *v
_, err := arango.AnalyticsV1alpha1().GraphAnalyticsEngines(vl.GetNamespace()).Create(context.Background(), vl, meta.CreateOptions{})
require.NoError(t, err)
default:
require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String()))
}
@ -383,6 +391,12 @@ func UpdateObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientSe
vl := *v
_, err := arango.SchedulerV1beta1().ArangoProfiles(vl.GetNamespace()).Update(context.Background(), vl, meta.UpdateOptions{})
require.NoError(t, err)
case **analyticsApi.GraphAnalyticsEngine:
require.NotNil(t, v)
vl := *v
_, err := arango.AnalyticsV1alpha1().GraphAnalyticsEngines(vl.GetNamespace()).Update(context.Background(), vl, meta.UpdateOptions{})
require.NoError(t, err)
default:
require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String()))
}
@ -506,6 +520,11 @@ func DeleteObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientSe
vl := *v
require.NoError(t, arango.SchedulerV1beta1().ArangoProfiles(vl.GetNamespace()).Delete(context.Background(), vl.GetName(), meta.DeleteOptions{}))
case **analyticsApi.GraphAnalyticsEngine:
require.NotNil(t, v)
vl := *v
require.NoError(t, arango.AnalyticsV1alpha1().GraphAnalyticsEngines(vl.GetNamespace()).Delete(context.Background(), vl.GetName(), meta.DeleteOptions{}))
default:
require.Fail(t, fmt.Sprintf("Unable to delete object: %s", reflect.TypeOf(v).String()))
}
@ -848,6 +867,21 @@ func RefreshObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientS
} else {
*v = vn
}
case **analyticsApi.GraphAnalyticsEngine:
require.NotNil(t, v)
vl := *v
vn, err := arango.AnalyticsV1alpha1().GraphAnalyticsEngines(vl.GetNamespace()).Get(context.Background(), vl.GetName(), meta.GetOptions{})
if err != nil {
if kerrors.IsNotFound(err) {
*v = nil
} else {
require.NoError(t, err)
}
} else {
*v = vn
}
default:
require.Fail(t, fmt.Sprintf("Unable to get object: %s", reflect.TypeOf(v).String()))
}
@ -1012,6 +1046,14 @@ func SetMetaBasedOnType(t *testing.T, object meta.Object) {
scheduler.ArangoProfileResourcePlural,
object.GetNamespace(),
object.GetName()))
case *analyticsApi.GraphAnalyticsEngine:
v.Kind = analytics.GraphAnalyticsEngineResourceKind
v.APIVersion = analyticsApi.SchemeGroupVersion.String()
v.SetSelfLink(fmt.Sprintf("/api/%s/%s/%s/%s",
analyticsApi.SchemeGroupVersion.String(),
analytics.GraphAnalyticsEngineResourcePlural,
object.GetNamespace(),
object.GetName()))
default:
require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String()))
}
@ -1182,6 +1224,12 @@ func GVK(t *testing.T, object meta.Object) schema.GroupVersionKind {
Version: schedulerApi.ArangoSchedulerVersion,
Kind: scheduler.ArangoProfileResourceKind,
}
case *analyticsApi.GraphAnalyticsEngine:
return schema.GroupVersionKind{
Group: analytics.ArangoAnalyticsGroupName,
Version: analyticsApi.ArangoAnalyticsVersion,
Kind: analytics.GraphAnalyticsEngineResourceKind,
}
default:
require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String()))
return schema.GroupVersionKind{}

View file

@ -31,6 +31,7 @@ import (
rbac "k8s.io/api/rbac/v1"
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
analyticsApi "github.com/arangodb/kube-arangodb/pkg/apis/analytics/v1alpha1"
backupApi "github.com/arangodb/kube-arangodb/pkg/apis/backup/v1"
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
mlApiv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/ml/v1alpha1"
@ -85,4 +86,5 @@ func Test_NewMetaObject(t *testing.T) {
NewMetaObjectRun[*mlApiv1alpha1.ArangoMLBatchJob](t)
NewMetaObjectRun[*mlApiv1alpha1.ArangoMLCronJob](t)
NewMetaObjectRun[*schedulerApi.ArangoProfile](t)
NewMetaObjectRun[*analyticsApi.GraphAnalyticsEngine](t)
}