mirror of
https://github.com/arangodb/kube-arangodb.git
synced 2024-12-14 11:57:37 +00:00
[Feature] [Platform] Chart (#1762)
This commit is contained in:
parent
dedb020a4d
commit
5a05c1db5b
55 changed files with 1731 additions and 23 deletions
|
@ -20,6 +20,7 @@
|
||||||
- (Feature) (Integration) Services Endpoint
|
- (Feature) (Integration) Services Endpoint
|
||||||
- (Feature) (Platform) Storage
|
- (Feature) (Platform) Storage
|
||||||
- (Maintenance) Extract GRPC Client Package
|
- (Maintenance) Extract GRPC Client Package
|
||||||
|
- (Feature) (Platform) Chart
|
||||||
|
|
||||||
## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14)
|
## [1.2.43](https://github.com/arangodb/kube-arangodb/tree/1.2.43) (2024-10-14)
|
||||||
- (Feature) ArangoRoute CRD
|
- (Feature) ArangoRoute CRD
|
||||||
|
|
3
Makefile
3
Makefile
|
@ -922,7 +922,8 @@ CRDS:=apps-job \
|
||||||
ml-storage ml-extension ml-job-batch ml-job-cron \
|
ml-storage ml-extension ml-job-batch ml-job-cron \
|
||||||
scheduler-profile scheduler-pod scheduler-deployment scheduler-batchjob scheduler-cronjob \
|
scheduler-profile scheduler-pod scheduler-deployment scheduler-batchjob scheduler-cronjob \
|
||||||
analytics-graphanalyticsengine \
|
analytics-graphanalyticsengine \
|
||||||
networking-route
|
networking-route \
|
||||||
|
platform-storage platform-chart
|
||||||
|
|
||||||
.PHONY: sync
|
.PHONY: sync
|
||||||
sync:
|
sync:
|
||||||
|
|
|
@ -195,7 +195,7 @@ Flags:
|
||||||
--kubernetes.max-batch-size int Size of batch during objects read (default 256)
|
--kubernetes.max-batch-size int Size of batch during objects read (default 256)
|
||||||
--kubernetes.qps float32 Number of queries per second for k8s API (default 15)
|
--kubernetes.qps float32 Number of queries per second for k8s API (default 15)
|
||||||
--log.format string Set log format. Allowed values: 'pretty', 'JSON'. If empty, default format is used (default "pretty")
|
--log.format string Set log format. Allowed values: 'pretty', 'JSON'. If empty, default format is used (default "pretty")
|
||||||
--log.level stringArray Set log levels in format <level> or <logger>=<level>. Possible loggers: action, agency, api-server, assertion, backup-operator, chaos-monkey, crd, deployment, deployment-ci, deployment-reconcile, deployment-replication, deployment-resilience, deployment-resources, deployment-storage, deployment-storage-pc, deployment-storage-service, generic-parent-operator, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, integration-storage-v2, integrations, k8s-client, kubernetes-informer, monitor, networking-route-operator, operator, operator-arangojob-handler, operator-v2, operator-v2-event, operator-v2-worker, panics, platform-storage-operator, pod_compare, root, root-event-recorder, scheduler-batchjob-operator, scheduler-cronjob-operator, scheduler-deployment-operator, scheduler-pod-operator, scheduler-profile-operator, server, server-authentication (default [info])
|
--log.level stringArray Set log levels in format <level> or <logger>=<level>. Possible loggers: action, agency, api-server, assertion, backup-operator, chaos-monkey, crd, deployment, deployment-ci, deployment-reconcile, deployment-replication, deployment-resilience, deployment-resources, deployment-storage, deployment-storage-pc, deployment-storage-service, generic-parent-operator, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, integration-storage-v2, integrations, k8s-client, kubernetes-informer, monitor, networking-route-operator, operator, operator-arangojob-handler, operator-v2, operator-v2-event, operator-v2-worker, panics, platform-chart-operator, platform-storage-operator, pod_compare, root, root-event-recorder, scheduler-batchjob-operator, scheduler-cronjob-operator, scheduler-deployment-operator, scheduler-pod-operator, scheduler-profile-operator, server, server-authentication (default [info])
|
||||||
--log.sampling If true, operator will try to minimize duplication of logging events (default true)
|
--log.sampling If true, operator will try to minimize duplication of logging events (default true)
|
||||||
--memory-limit uint Define memory limit for hard shutdown and the dump of goroutines. Used for testing
|
--memory-limit uint Define memory limit for hard shutdown and the dump of goroutines. Used for testing
|
||||||
--metrics.excluded-prefixes stringArray List of the excluded metrics prefixes
|
--metrics.excluded-prefixes stringArray List of the excluded metrics prefixes
|
||||||
|
|
25
chart/kube-arangodb-arm64/crds/platform-chart.yaml
Normal file
25
chart/kube-arangodb-arm64/crds/platform-chart.yaml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
name: arangoplatformcharts.platform.arangodb.com
|
||||||
|
spec:
|
||||||
|
group: platform.arangodb.com
|
||||||
|
names:
|
||||||
|
kind: ArangoPlatformChart
|
||||||
|
listKind: ArangoPlatformChartList
|
||||||
|
plural: arangoplatformcharts
|
||||||
|
singular: arangoplatformchart
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
type: object
|
||||||
|
x-kubernetes-preserve-unknown-fields: true
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
subresources:
|
||||||
|
status: {}
|
||||||
|
scale:
|
||||||
|
specReplicasPath: .spec.replicas
|
||||||
|
statusReplicasPath: .status.replicas
|
|
@ -14,10 +14,11 @@ metadata:
|
||||||
release: {{ .Release.Name }}
|
release: {{ .Release.Name }}
|
||||||
rules:
|
rules:
|
||||||
- apiGroups: ["platform.arangodb.com"]
|
- apiGroups: ["platform.arangodb.com"]
|
||||||
resources: ["arangoplatformstorages", "arangoplatformstorages/status"]
|
resources:
|
||||||
|
- "arangoplatformstorages"
|
||||||
|
- "arangoplatformstorages/status"
|
||||||
|
- "arangoplatformcharts"
|
||||||
|
- "arangoplatformcharts/status"
|
||||||
verbs: ["*"]
|
verbs: ["*"]
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["pods", "services", "endpoints"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
|
@ -0,0 +1,25 @@
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
name: arangoplatformcharts.platform.arangodb.com
|
||||||
|
spec:
|
||||||
|
group: platform.arangodb.com
|
||||||
|
names:
|
||||||
|
kind: ArangoPlatformChart
|
||||||
|
listKind: ArangoPlatformChartList
|
||||||
|
plural: arangoplatformcharts
|
||||||
|
singular: arangoplatformchart
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
type: object
|
||||||
|
x-kubernetes-preserve-unknown-fields: true
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
subresources:
|
||||||
|
status: {}
|
||||||
|
scale:
|
||||||
|
specReplicasPath: .spec.replicas
|
||||||
|
statusReplicasPath: .status.replicas
|
|
@ -14,10 +14,11 @@ metadata:
|
||||||
release: {{ .Release.Name }}
|
release: {{ .Release.Name }}
|
||||||
rules:
|
rules:
|
||||||
- apiGroups: ["platform.arangodb.com"]
|
- apiGroups: ["platform.arangodb.com"]
|
||||||
resources: ["arangoplatformstorages", "arangoplatformstorages/status"]
|
resources:
|
||||||
|
- "arangoplatformstorages"
|
||||||
|
- "arangoplatformstorages/status"
|
||||||
|
- "arangoplatformcharts"
|
||||||
|
- "arangoplatformcharts/status"
|
||||||
verbs: ["*"]
|
verbs: ["*"]
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["pods", "services", "endpoints"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
25
chart/kube-arangodb-enterprise/crds/platform-chart.yaml
Normal file
25
chart/kube-arangodb-enterprise/crds/platform-chart.yaml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
name: arangoplatformcharts.platform.arangodb.com
|
||||||
|
spec:
|
||||||
|
group: platform.arangodb.com
|
||||||
|
names:
|
||||||
|
kind: ArangoPlatformChart
|
||||||
|
listKind: ArangoPlatformChartList
|
||||||
|
plural: arangoplatformcharts
|
||||||
|
singular: arangoplatformchart
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
type: object
|
||||||
|
x-kubernetes-preserve-unknown-fields: true
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
subresources:
|
||||||
|
status: {}
|
||||||
|
scale:
|
||||||
|
specReplicasPath: .spec.replicas
|
||||||
|
statusReplicasPath: .status.replicas
|
|
@ -14,10 +14,11 @@ metadata:
|
||||||
release: {{ .Release.Name }}
|
release: {{ .Release.Name }}
|
||||||
rules:
|
rules:
|
||||||
- apiGroups: ["platform.arangodb.com"]
|
- apiGroups: ["platform.arangodb.com"]
|
||||||
resources: ["arangoplatformstorages", "arangoplatformstorages/status"]
|
resources:
|
||||||
|
- "arangoplatformstorages"
|
||||||
|
- "arangoplatformstorages/status"
|
||||||
|
- "arangoplatformcharts"
|
||||||
|
- "arangoplatformcharts/status"
|
||||||
verbs: ["*"]
|
verbs: ["*"]
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["pods", "services", "endpoints"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
25
chart/kube-arangodb/crds/platform-chart.yaml
Normal file
25
chart/kube-arangodb/crds/platform-chart.yaml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
name: arangoplatformcharts.platform.arangodb.com
|
||||||
|
spec:
|
||||||
|
group: platform.arangodb.com
|
||||||
|
names:
|
||||||
|
kind: ArangoPlatformChart
|
||||||
|
listKind: ArangoPlatformChartList
|
||||||
|
plural: arangoplatformcharts
|
||||||
|
singular: arangoplatformchart
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
type: object
|
||||||
|
x-kubernetes-preserve-unknown-fields: true
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
subresources:
|
||||||
|
status: {}
|
||||||
|
scale:
|
||||||
|
specReplicasPath: .spec.replicas
|
||||||
|
statusReplicasPath: .status.replicas
|
|
@ -14,10 +14,11 @@ metadata:
|
||||||
release: {{ .Release.Name }}
|
release: {{ .Release.Name }}
|
||||||
rules:
|
rules:
|
||||||
- apiGroups: ["platform.arangodb.com"]
|
- apiGroups: ["platform.arangodb.com"]
|
||||||
resources: ["arangoplatformstorages", "arangoplatformstorages/status"]
|
resources:
|
||||||
|
- "arangoplatformstorages"
|
||||||
|
- "arangoplatformstorages/status"
|
||||||
|
- "arangoplatformcharts"
|
||||||
|
- "arangoplatformcharts/status"
|
||||||
verbs: ["*"]
|
verbs: ["*"]
|
||||||
- apiGroups: [""]
|
|
||||||
resources: ["pods", "services", "endpoints"]
|
|
||||||
verbs: ["get", "list", "watch"]
|
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
14
docs/api/ArangoPlatformChart.V1Alpha1.md
Normal file
14
docs/api/ArangoPlatformChart.V1Alpha1.md
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
layout: page
|
||||||
|
parent: CRD reference
|
||||||
|
title: ArangoPlatformChart V1Alpha1
|
||||||
|
---
|
||||||
|
|
||||||
|
# API Reference for ArangoPlatformChart V1Alpha1
|
||||||
|
|
||||||
|
## Spec
|
||||||
|
|
||||||
|
### .spec.definition
|
||||||
|
|
||||||
|
Type: `array` <sup>[\[ref\]](https://github.com/arangodb/kube-arangodb/blob/1.2.43/pkg/apis/platform/v1alpha1/chart_spec.go#L30)</sup>
|
||||||
|
|
|
@ -80,7 +80,7 @@ Flags:
|
||||||
--kubernetes.max-batch-size int Size of batch during objects read (default 256)
|
--kubernetes.max-batch-size int Size of batch during objects read (default 256)
|
||||||
--kubernetes.qps float32 Number of queries per second for k8s API (default 15)
|
--kubernetes.qps float32 Number of queries per second for k8s API (default 15)
|
||||||
--log.format string Set log format. Allowed values: 'pretty', 'JSON'. If empty, default format is used (default "pretty")
|
--log.format string Set log format. Allowed values: 'pretty', 'JSON'. If empty, default format is used (default "pretty")
|
||||||
--log.level stringArray Set log levels in format <level> or <logger>=<level>. Possible loggers: action, agency, api-server, assertion, backup-operator, chaos-monkey, crd, deployment, deployment-ci, deployment-reconcile, deployment-replication, deployment-resilience, deployment-resources, deployment-storage, deployment-storage-pc, deployment-storage-service, generic-parent-operator, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, integration-storage-v2, integrations, k8s-client, kubernetes-informer, monitor, networking-route-operator, operator, operator-arangojob-handler, operator-v2, operator-v2-event, operator-v2-worker, panics, platform-storage-operator, pod_compare, root, root-event-recorder, scheduler-batchjob-operator, scheduler-cronjob-operator, scheduler-deployment-operator, scheduler-pod-operator, scheduler-profile-operator, server, server-authentication (default [info])
|
--log.level stringArray Set log levels in format <level> or <logger>=<level>. Possible loggers: action, agency, api-server, assertion, backup-operator, chaos-monkey, crd, deployment, deployment-ci, deployment-reconcile, deployment-replication, deployment-resilience, deployment-resources, deployment-storage, deployment-storage-pc, deployment-storage-service, generic-parent-operator, helm, http, inspector, integration-config-v1, integration-envoy-auth-v3, integration-scheduler-v2, integration-storage-v2, integrations, k8s-client, kubernetes-informer, monitor, networking-route-operator, operator, operator-arangojob-handler, operator-v2, operator-v2-event, operator-v2-worker, panics, platform-chart-operator, platform-storage-operator, pod_compare, root, root-event-recorder, scheduler-batchjob-operator, scheduler-cronjob-operator, scheduler-deployment-operator, scheduler-pod-operator, scheduler-profile-operator, server, server-authentication (default [info])
|
||||||
--log.sampling If true, operator will try to minimize duplication of logging events (default true)
|
--log.sampling If true, operator will try to minimize duplication of logging events (default true)
|
||||||
--memory-limit uint Define memory limit for hard shutdown and the dump of goroutines. Used for testing
|
--memory-limit uint Define memory limit for hard shutdown and the dump of goroutines. Used for testing
|
||||||
--metrics.excluded-prefixes stringArray List of the excluded metrics prefixes
|
--metrics.excluded-prefixes stringArray List of the excluded metrics prefixes
|
||||||
|
|
|
@ -339,6 +339,15 @@ func Test_GenerateCRValidationSchemas(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"platform-chart": {
|
||||||
|
fmt.Sprintf("%s/pkg/apis/platform/v1alpha1", root): {
|
||||||
|
"v1alpha1": {
|
||||||
|
objects: map[string]interface{}{
|
||||||
|
"spec": platformApi.ArangoPlatformChart{}.Spec,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for filePrefix, packagesToVersion := range input {
|
for filePrefix, packagesToVersion := range input {
|
||||||
|
|
|
@ -354,6 +354,9 @@ func Test_GenerateAPIDocs(t *testing.T) {
|
||||||
"ArangoPlatformStorage.V1Alpha1": {
|
"ArangoPlatformStorage.V1Alpha1": {
|
||||||
"Spec": platformApi.ArangoPlatformStorage{}.Spec,
|
"Spec": platformApi.ArangoPlatformStorage{}.Spec,
|
||||||
},
|
},
|
||||||
|
"ArangoPlatformChart.V1Alpha1": {
|
||||||
|
"Spec": platformApi.ArangoPlatformChart{}.Spec,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Shared: []string{
|
Shared: []string{
|
||||||
"shared/v1",
|
"shared/v1",
|
||||||
|
|
|
@ -25,5 +25,9 @@ const (
|
||||||
ArangoPlatformStorageResourceKind = "ArangoPlatformStorage"
|
ArangoPlatformStorageResourceKind = "ArangoPlatformStorage"
|
||||||
ArangoPlatformStorageResourcePlural = "arangoplatformstorages"
|
ArangoPlatformStorageResourcePlural = "arangoplatformstorages"
|
||||||
|
|
||||||
|
ArangoPlatformChartCRDName = ArangoPlatformChartResourcePlural + "." + ArangoPlatformGroupName
|
||||||
|
ArangoPlatformChartResourceKind = "ArangoPlatformChart"
|
||||||
|
ArangoPlatformChartResourcePlural = "arangoplatformcharts"
|
||||||
|
|
||||||
ArangoPlatformGroupName = "platform.arangodb.com"
|
ArangoPlatformGroupName = "platform.arangodb.com"
|
||||||
)
|
)
|
||||||
|
|
69
pkg/apis/platform/v1alpha1/chart.go
Normal file
69
pkg/apis/platform/v1alpha1/chart.go
Normal 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/platform"
|
||||||
|
)
|
||||||
|
|
||||||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
|
||||||
|
// ArangoPlatformChartList is a list of ArangoPlatform Chart.
|
||||||
|
type ArangoPlatformChartList struct {
|
||||||
|
meta.TypeMeta `json:",inline"`
|
||||||
|
meta.ListMeta `json:"metadata,omitempty"`
|
||||||
|
|
||||||
|
Items []ArangoPlatformChart `json:"items"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// +genclient
|
||||||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
|
||||||
|
// ArangoPlatformChart contains definition and status of the ArangoPlatform Chart.
|
||||||
|
type ArangoPlatformChart struct {
|
||||||
|
meta.TypeMeta `json:",inline"`
|
||||||
|
meta.ObjectMeta `json:"metadata,omitempty"`
|
||||||
|
|
||||||
|
Spec ArangoPlatformChartSpec `json:"spec"`
|
||||||
|
Status ArangoPlatformChartStatus `json:"status"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AsOwner creates an OwnerReference for the given Extension
|
||||||
|
func (a *ArangoPlatformChart) AsOwner() meta.OwnerReference {
|
||||||
|
trueVar := true
|
||||||
|
return meta.OwnerReference{
|
||||||
|
APIVersion: SchemeGroupVersion.String(),
|
||||||
|
Kind: platform.ArangoPlatformChartResourceKind,
|
||||||
|
Name: a.Name,
|
||||||
|
UID: a.UID,
|
||||||
|
Controller: &trueVar,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *ArangoPlatformChart) GetStatus() ArangoPlatformChartStatus {
|
||||||
|
return a.Status
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *ArangoPlatformChart) SetStatus(status ArangoPlatformChartStatus) {
|
||||||
|
a.Status = status
|
||||||
|
}
|
42
pkg/apis/platform/v1alpha1/chart_details.go
Normal file
42
pkg/apis/platform/v1alpha1/chart_details.go
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
//
|
||||||
|
// DISCLAIMER
|
||||||
|
//
|
||||||
|
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
type ChartDetails struct {
|
||||||
|
Name string `json:"name,omitempty"`
|
||||||
|
Version string `json:"version,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ChartDetails) GetName() string {
|
||||||
|
if c == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Name
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ChartDetails) GetVersion() string {
|
||||||
|
if c == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.Version
|
||||||
|
}
|
43
pkg/apis/platform/v1alpha1/chart_spec.go
Normal file
43
pkg/apis/platform/v1alpha1/chart_spec.go
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
//
|
||||||
|
// DISCLAIMER
|
||||||
|
//
|
||||||
|
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
|
||||||
|
sharedApi "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ArangoPlatformChartSpec struct {
|
||||||
|
Definition sharedApi.Data `json:"definition,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ArangoPlatformChartSpec) Validate() error {
|
||||||
|
if c == nil {
|
||||||
|
return errors.Errorf("Nil spec not allowed")
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(c.Definition) == 0 {
|
||||||
|
return shared.PrefixResourceError("definition", errors.Errorf("Chart definition cannot be empty"))
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
33
pkg/apis/platform/v1alpha1/chart_status.go
Normal file
33
pkg/apis/platform/v1alpha1/chart_status.go
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
//
|
||||||
|
// DISCLAIMER
|
||||||
|
//
|
||||||
|
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ArangoPlatformChartStatus struct {
|
||||||
|
Info *ChartStatusInfo `json:"info,omitempty"`
|
||||||
|
|
||||||
|
// Conditions specific to the entire storage
|
||||||
|
// +doc/type: api.Conditions
|
||||||
|
Conditions api.ConditionList `json:"conditions,omitempty"`
|
||||||
|
}
|
33
pkg/apis/platform/v1alpha1/chart_status_info.go
Normal file
33
pkg/apis/platform/v1alpha1/chart_status_info.go
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
//
|
||||||
|
// DISCLAIMER
|
||||||
|
//
|
||||||
|
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import sharedApi "github.com/arangodb/kube-arangodb/pkg/apis/shared/v1"
|
||||||
|
|
||||||
|
type ChartStatusInfo struct {
|
||||||
|
Definition sharedApi.Data `json:"definition,omitempty"`
|
||||||
|
Checksum string `json:"checksum,omitempty"`
|
||||||
|
|
||||||
|
Valid bool `json:"valid,omitempty"`
|
||||||
|
Message string `json:"message,omitempty"`
|
||||||
|
|
||||||
|
Details *ChartDetails `json:"details,omitempty"`
|
||||||
|
}
|
|
@ -49,6 +49,8 @@ func addKnownTypes(s *runtime.Scheme) error {
|
||||||
s.AddKnownTypes(SchemeGroupVersion,
|
s.AddKnownTypes(SchemeGroupVersion,
|
||||||
&ArangoPlatformStorage{},
|
&ArangoPlatformStorage{},
|
||||||
&ArangoPlatformStorageList{},
|
&ArangoPlatformStorageList{},
|
||||||
|
&ArangoPlatformChart{},
|
||||||
|
&ArangoPlatformChartList{},
|
||||||
)
|
)
|
||||||
meta.AddToGroupVersion(s, SchemeGroupVersion)
|
meta.AddToGroupVersion(s, SchemeGroupVersion)
|
||||||
return nil
|
return nil
|
||||||
|
|
152
pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go
generated
152
pkg/apis/platform/v1alpha1/zz_generated.deepcopy.go
generated
|
@ -31,6 +31,116 @@ import (
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *ArangoPlatformChart) DeepCopyInto(out *ArangoPlatformChart) {
|
||||||
|
*out = *in
|
||||||
|
out.TypeMeta = in.TypeMeta
|
||||||
|
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
||||||
|
in.Spec.DeepCopyInto(&out.Spec)
|
||||||
|
in.Status.DeepCopyInto(&out.Status)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformChart.
|
||||||
|
func (in *ArangoPlatformChart) DeepCopy() *ArangoPlatformChart {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(ArangoPlatformChart)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||||
|
func (in *ArangoPlatformChart) DeepCopyObject() runtime.Object {
|
||||||
|
if c := in.DeepCopy(); c != nil {
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *ArangoPlatformChartList) DeepCopyInto(out *ArangoPlatformChartList) {
|
||||||
|
*out = *in
|
||||||
|
out.TypeMeta = in.TypeMeta
|
||||||
|
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
||||||
|
if in.Items != nil {
|
||||||
|
in, out := &in.Items, &out.Items
|
||||||
|
*out = make([]ArangoPlatformChart, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformChartList.
|
||||||
|
func (in *ArangoPlatformChartList) DeepCopy() *ArangoPlatformChartList {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(ArangoPlatformChartList)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||||
|
func (in *ArangoPlatformChartList) DeepCopyObject() runtime.Object {
|
||||||
|
if c := in.DeepCopy(); c != nil {
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *ArangoPlatformChartSpec) DeepCopyInto(out *ArangoPlatformChartSpec) {
|
||||||
|
*out = *in
|
||||||
|
if in.Definition != nil {
|
||||||
|
in, out := &in.Definition, &out.Definition
|
||||||
|
*out = make(v1.Data, len(*in))
|
||||||
|
copy(*out, *in)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformChartSpec.
|
||||||
|
func (in *ArangoPlatformChartSpec) DeepCopy() *ArangoPlatformChartSpec {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(ArangoPlatformChartSpec)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *ArangoPlatformChartStatus) DeepCopyInto(out *ArangoPlatformChartStatus) {
|
||||||
|
*out = *in
|
||||||
|
if in.Info != nil {
|
||||||
|
in, out := &in.Info, &out.Info
|
||||||
|
*out = new(ChartStatusInfo)
|
||||||
|
(*in).DeepCopyInto(*out)
|
||||||
|
}
|
||||||
|
if in.Conditions != nil {
|
||||||
|
in, out := &in.Conditions, &out.Conditions
|
||||||
|
*out = make(deploymentv1.ConditionList, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ArangoPlatformChartStatus.
|
||||||
|
func (in *ArangoPlatformChartStatus) DeepCopy() *ArangoPlatformChartStatus {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(ArangoPlatformChartStatus)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *ArangoPlatformStorage) DeepCopyInto(out *ArangoPlatformStorage) {
|
func (in *ArangoPlatformStorage) DeepCopyInto(out *ArangoPlatformStorage) {
|
||||||
*out = *in
|
*out = *in
|
||||||
|
@ -244,3 +354,45 @@ func (in *ArangoPlatformStorageStatus) DeepCopy() *ArangoPlatformStorageStatus {
|
||||||
in.DeepCopyInto(out)
|
in.DeepCopyInto(out)
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *ChartDetails) DeepCopyInto(out *ChartDetails) {
|
||||||
|
*out = *in
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartDetails.
|
||||||
|
func (in *ChartDetails) DeepCopy() *ChartDetails {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(ChartDetails)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *ChartStatusInfo) DeepCopyInto(out *ChartStatusInfo) {
|
||||||
|
*out = *in
|
||||||
|
if in.Definition != nil {
|
||||||
|
in, out := &in.Definition, &out.Definition
|
||||||
|
*out = make(v1.Data, len(*in))
|
||||||
|
copy(*out, *in)
|
||||||
|
}
|
||||||
|
if in.Details != nil {
|
||||||
|
in, out := &in.Details, &out.Details
|
||||||
|
*out = new(ChartDetails)
|
||||||
|
**out = **in
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartStatusInfo.
|
||||||
|
func (in *ChartStatusInfo) DeepCopy() *ChartStatusInfo {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(ChartStatusInfo)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
59
pkg/apis/shared/v1/data.go
Normal file
59
pkg/apis/shared/v1/data.go
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
//
|
||||||
|
// DISCLAIMER
|
||||||
|
//
|
||||||
|
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
|
||||||
|
package v1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/base64"
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ json.Marshaler = &Data{}
|
||||||
|
var _ json.Unmarshaler = &Data{}
|
||||||
|
|
||||||
|
type Data []byte
|
||||||
|
|
||||||
|
func (d Data) MarshalJSON() ([]byte, error) {
|
||||||
|
s := base64.StdEncoding.EncodeToString(d)
|
||||||
|
|
||||||
|
return json.Marshal(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d Data) SHA256() string {
|
||||||
|
return util.SHA256(d)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *Data) UnmarshalJSON(bytes []byte) error {
|
||||||
|
if d == nil {
|
||||||
|
return errors.Errorf("nil object provided")
|
||||||
|
}
|
||||||
|
|
||||||
|
ret, err := base64.StdEncoding.DecodeString(string(bytes))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
*d = ret
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
20
pkg/apis/shared/v1/zz_generated.deepcopy.go
generated
20
pkg/apis/shared/v1/zz_generated.deepcopy.go
generated
|
@ -29,6 +29,26 @@ import (
|
||||||
types "k8s.io/apimachinery/pkg/types"
|
types "k8s.io/apimachinery/pkg/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in Data) DeepCopyInto(out *Data) {
|
||||||
|
{
|
||||||
|
in := &in
|
||||||
|
*out = make(Data, len(*in))
|
||||||
|
copy(*out, *in)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Data.
|
||||||
|
func (in Data) DeepCopy() Data {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(Data)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return *out
|
||||||
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in HashList) DeepCopyInto(out *HashList) {
|
func (in HashList) DeepCopyInto(out *HashList) {
|
||||||
{
|
{
|
||||||
|
|
|
@ -100,6 +100,7 @@ func AllDefinitions() []Definition {
|
||||||
|
|
||||||
// Platform
|
// Platform
|
||||||
PlatformStorageDefinitionWithOptions(),
|
PlatformStorageDefinitionWithOptions(),
|
||||||
|
PlatformChartDefinitionWithOptions(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ import (
|
||||||
"github.com/arangodb/kube-arangodb/pkg/apis/backup"
|
"github.com/arangodb/kube-arangodb/pkg/apis/backup"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/apis/deployment"
|
"github.com/arangodb/kube-arangodb/pkg/apis/deployment"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/apis/ml"
|
"github.com/arangodb/kube-arangodb/pkg/apis/ml"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/apis/platform"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/apis/replication"
|
"github.com/arangodb/kube-arangodb/pkg/apis/replication"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/apis/scheduler"
|
"github.com/arangodb/kube-arangodb/pkg/apis/scheduler"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/apis/storage"
|
"github.com/arangodb/kube-arangodb/pkg/apis/storage"
|
||||||
|
@ -96,6 +97,8 @@ func Test_CRD(t *testing.T) {
|
||||||
{scheduler.DeploymentCRDName, SchedulerDeploymentDefinitionWithOptions},
|
{scheduler.DeploymentCRDName, SchedulerDeploymentDefinitionWithOptions},
|
||||||
{scheduler.BatchJobCRDName, SchedulerBatchJobDefinitionWithOptions},
|
{scheduler.BatchJobCRDName, SchedulerBatchJobDefinitionWithOptions},
|
||||||
{scheduler.CronJobCRDName, SchedulerCronJobDefinitionWithOptions},
|
{scheduler.CronJobCRDName, SchedulerCronJobDefinitionWithOptions},
|
||||||
|
{platform.ArangoPlatformStorageCRDName, PlatformStorageDefinitionWithOptions},
|
||||||
|
{platform.ArangoPlatformChartCRDName, PlatformChartDefinitionWithOptions},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range testCases {
|
for _, tc := range testCases {
|
||||||
|
@ -154,6 +157,7 @@ func Test_CRDGetters(t *testing.T) {
|
||||||
AnalyticsGAEWithOptions,
|
AnalyticsGAEWithOptions,
|
||||||
NetworkingRouteWithOptions,
|
NetworkingRouteWithOptions,
|
||||||
PlatformStorageWithOptions,
|
PlatformStorageWithOptions,
|
||||||
|
PlatformChartWithOptions,
|
||||||
}
|
}
|
||||||
require.Equal(t, len(AllDefinitions()), len(getters))
|
require.Equal(t, len(AllDefinitions()), len(getters))
|
||||||
|
|
||||||
|
|
51
pkg/crd/crds/platform-chart.go
Normal file
51
pkg/crd/crds/platform-chart.go
Normal 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 PlatformChartWithOptions(opts ...func(*CRDOptions)) *apiextensions.CustomResourceDefinition {
|
||||||
|
return getCRD(PlatformChartDefinitionData(), opts...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func PlatformChartDefinitionWithOptions(opts ...func(*CRDOptions)) Definition {
|
||||||
|
return Definition{
|
||||||
|
DefinitionData: PlatformChartDefinitionData(),
|
||||||
|
CRD: PlatformChartWithOptions(opts...),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func PlatformChartDefinitionData() DefinitionData {
|
||||||
|
return DefinitionData{
|
||||||
|
definition: platformChart,
|
||||||
|
schemaDefinition: platformChartSchemaRaw,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:embed platform-chart.yaml
|
||||||
|
var platformChart []byte
|
||||||
|
|
||||||
|
//go:embed platform-chart.schema.generated.yaml
|
||||||
|
var platformChartSchemaRaw []byte
|
14
pkg/crd/crds/platform-chart.schema.generated.yaml
Normal file
14
pkg/crd/crds/platform-chart.schema.generated.yaml
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
v1alpha1:
|
||||||
|
openAPIV3Schema:
|
||||||
|
properties:
|
||||||
|
spec:
|
||||||
|
properties:
|
||||||
|
definition:
|
||||||
|
format: byte
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
status:
|
||||||
|
description: Object with preserved fields for backward compatibility
|
||||||
|
type: object
|
||||||
|
x-kubernetes-preserve-unknown-fields: true
|
||||||
|
type: object
|
25
pkg/crd/crds/platform-chart.yaml
Normal file
25
pkg/crd/crds/platform-chart.yaml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
name: arangoplatformcharts.platform.arangodb.com
|
||||||
|
spec:
|
||||||
|
group: platform.arangodb.com
|
||||||
|
names:
|
||||||
|
kind: ArangoPlatformChart
|
||||||
|
listKind: ArangoPlatformChartList
|
||||||
|
plural: arangoplatformcharts
|
||||||
|
singular: arangoplatformchart
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
type: object
|
||||||
|
x-kubernetes-preserve-unknown-fields: true
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
subresources:
|
||||||
|
status: {}
|
||||||
|
scale:
|
||||||
|
specReplicasPath: .spec.replicas
|
||||||
|
statusReplicasPath: .status.replicas
|
|
@ -27,6 +27,7 @@ import (
|
||||||
func init() {
|
func init() {
|
||||||
defs := []func(...func(options *crds.CRDOptions)) crds.Definition{
|
defs := []func(...func(options *crds.CRDOptions)) crds.Definition{
|
||||||
crds.PlatformStorageDefinitionWithOptions,
|
crds.PlatformStorageDefinitionWithOptions,
|
||||||
|
crds.PlatformChartDefinitionWithOptions,
|
||||||
}
|
}
|
||||||
for _, getDef := range defs {
|
for _, getDef := range defs {
|
||||||
defFn := getDef // bring into scope
|
defFn := getDef // bring into scope
|
||||||
|
|
73
pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformchart.go
generated
Normal file
73
pkg/generated/clientset/versioned/typed/platform/v1alpha1/arangoplatformchart.go
generated
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
//
|
||||||
|
// DISCLAIMER
|
||||||
|
//
|
||||||
|
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
|
||||||
|
// Code generated by client-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1"
|
||||||
|
scheme "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/scheme"
|
||||||
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
types "k8s.io/apimachinery/pkg/types"
|
||||||
|
watch "k8s.io/apimachinery/pkg/watch"
|
||||||
|
gentype "k8s.io/client-go/gentype"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ArangoPlatformChartsGetter has a method to return a ArangoPlatformChartInterface.
|
||||||
|
// A group's client should implement this interface.
|
||||||
|
type ArangoPlatformChartsGetter interface {
|
||||||
|
ArangoPlatformCharts(namespace string) ArangoPlatformChartInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
// ArangoPlatformChartInterface has methods to work with ArangoPlatformChart resources.
|
||||||
|
type ArangoPlatformChartInterface interface {
|
||||||
|
Create(ctx context.Context, arangoPlatformChart *v1alpha1.ArangoPlatformChart, opts v1.CreateOptions) (*v1alpha1.ArangoPlatformChart, error)
|
||||||
|
Update(ctx context.Context, arangoPlatformChart *v1alpha1.ArangoPlatformChart, opts v1.UpdateOptions) (*v1alpha1.ArangoPlatformChart, error)
|
||||||
|
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
|
||||||
|
UpdateStatus(ctx context.Context, arangoPlatformChart *v1alpha1.ArangoPlatformChart, opts v1.UpdateOptions) (*v1alpha1.ArangoPlatformChart, error)
|
||||||
|
Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
|
||||||
|
DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
|
||||||
|
Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.ArangoPlatformChart, error)
|
||||||
|
List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.ArangoPlatformChartList, error)
|
||||||
|
Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
|
||||||
|
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoPlatformChart, err error)
|
||||||
|
ArangoPlatformChartExpansion
|
||||||
|
}
|
||||||
|
|
||||||
|
// arangoPlatformCharts implements ArangoPlatformChartInterface
|
||||||
|
type arangoPlatformCharts struct {
|
||||||
|
*gentype.ClientWithList[*v1alpha1.ArangoPlatformChart, *v1alpha1.ArangoPlatformChartList]
|
||||||
|
}
|
||||||
|
|
||||||
|
// newArangoPlatformCharts returns a ArangoPlatformCharts
|
||||||
|
func newArangoPlatformCharts(c *PlatformV1alpha1Client, namespace string) *arangoPlatformCharts {
|
||||||
|
return &arangoPlatformCharts{
|
||||||
|
gentype.NewClientWithList[*v1alpha1.ArangoPlatformChart, *v1alpha1.ArangoPlatformChartList](
|
||||||
|
"arangoplatformcharts",
|
||||||
|
c.RESTClient(),
|
||||||
|
scheme.ParameterCodec,
|
||||||
|
namespace,
|
||||||
|
func() *v1alpha1.ArangoPlatformChart { return &v1alpha1.ArangoPlatformChart{} },
|
||||||
|
func() *v1alpha1.ArangoPlatformChartList { return &v1alpha1.ArangoPlatformChartList{} }),
|
||||||
|
}
|
||||||
|
}
|
151
pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformchart.go
generated
Normal file
151
pkg/generated/clientset/versioned/typed/platform/v1alpha1/fake/fake_arangoplatformchart.go
generated
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
//
|
||||||
|
// DISCLAIMER
|
||||||
|
//
|
||||||
|
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
|
||||||
|
// Code generated by client-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package fake
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1"
|
||||||
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
labels "k8s.io/apimachinery/pkg/labels"
|
||||||
|
types "k8s.io/apimachinery/pkg/types"
|
||||||
|
watch "k8s.io/apimachinery/pkg/watch"
|
||||||
|
testing "k8s.io/client-go/testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
// FakeArangoPlatformCharts implements ArangoPlatformChartInterface
|
||||||
|
type FakeArangoPlatformCharts struct {
|
||||||
|
Fake *FakePlatformV1alpha1
|
||||||
|
ns string
|
||||||
|
}
|
||||||
|
|
||||||
|
var arangoplatformchartsResource = v1alpha1.SchemeGroupVersion.WithResource("arangoplatformcharts")
|
||||||
|
|
||||||
|
var arangoplatformchartsKind = v1alpha1.SchemeGroupVersion.WithKind("ArangoPlatformChart")
|
||||||
|
|
||||||
|
// Get takes name of the arangoPlatformChart, and returns the corresponding arangoPlatformChart object, and an error if there is any.
|
||||||
|
func (c *FakeArangoPlatformCharts) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.ArangoPlatformChart, err error) {
|
||||||
|
emptyResult := &v1alpha1.ArangoPlatformChart{}
|
||||||
|
obj, err := c.Fake.
|
||||||
|
Invokes(testing.NewGetActionWithOptions(arangoplatformchartsResource, c.ns, name, options), emptyResult)
|
||||||
|
|
||||||
|
if obj == nil {
|
||||||
|
return emptyResult, err
|
||||||
|
}
|
||||||
|
return obj.(*v1alpha1.ArangoPlatformChart), err
|
||||||
|
}
|
||||||
|
|
||||||
|
// List takes label and field selectors, and returns the list of ArangoPlatformCharts that match those selectors.
|
||||||
|
func (c *FakeArangoPlatformCharts) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.ArangoPlatformChartList, err error) {
|
||||||
|
emptyResult := &v1alpha1.ArangoPlatformChartList{}
|
||||||
|
obj, err := c.Fake.
|
||||||
|
Invokes(testing.NewListActionWithOptions(arangoplatformchartsResource, arangoplatformchartsKind, c.ns, opts), emptyResult)
|
||||||
|
|
||||||
|
if obj == nil {
|
||||||
|
return emptyResult, err
|
||||||
|
}
|
||||||
|
|
||||||
|
label, _, _ := testing.ExtractFromListOptions(opts)
|
||||||
|
if label == nil {
|
||||||
|
label = labels.Everything()
|
||||||
|
}
|
||||||
|
list := &v1alpha1.ArangoPlatformChartList{ListMeta: obj.(*v1alpha1.ArangoPlatformChartList).ListMeta}
|
||||||
|
for _, item := range obj.(*v1alpha1.ArangoPlatformChartList).Items {
|
||||||
|
if label.Matches(labels.Set(item.Labels)) {
|
||||||
|
list.Items = append(list.Items, item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Watch returns a watch.Interface that watches the requested arangoPlatformCharts.
|
||||||
|
func (c *FakeArangoPlatformCharts) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
|
||||||
|
return c.Fake.
|
||||||
|
InvokesWatch(testing.NewWatchActionWithOptions(arangoplatformchartsResource, c.ns, opts))
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create takes the representation of a arangoPlatformChart and creates it. Returns the server's representation of the arangoPlatformChart, and an error, if there is any.
|
||||||
|
func (c *FakeArangoPlatformCharts) Create(ctx context.Context, arangoPlatformChart *v1alpha1.ArangoPlatformChart, opts v1.CreateOptions) (result *v1alpha1.ArangoPlatformChart, err error) {
|
||||||
|
emptyResult := &v1alpha1.ArangoPlatformChart{}
|
||||||
|
obj, err := c.Fake.
|
||||||
|
Invokes(testing.NewCreateActionWithOptions(arangoplatformchartsResource, c.ns, arangoPlatformChart, opts), emptyResult)
|
||||||
|
|
||||||
|
if obj == nil {
|
||||||
|
return emptyResult, err
|
||||||
|
}
|
||||||
|
return obj.(*v1alpha1.ArangoPlatformChart), err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update takes the representation of a arangoPlatformChart and updates it. Returns the server's representation of the arangoPlatformChart, and an error, if there is any.
|
||||||
|
func (c *FakeArangoPlatformCharts) Update(ctx context.Context, arangoPlatformChart *v1alpha1.ArangoPlatformChart, opts v1.UpdateOptions) (result *v1alpha1.ArangoPlatformChart, err error) {
|
||||||
|
emptyResult := &v1alpha1.ArangoPlatformChart{}
|
||||||
|
obj, err := c.Fake.
|
||||||
|
Invokes(testing.NewUpdateActionWithOptions(arangoplatformchartsResource, c.ns, arangoPlatformChart, opts), emptyResult)
|
||||||
|
|
||||||
|
if obj == nil {
|
||||||
|
return emptyResult, err
|
||||||
|
}
|
||||||
|
return obj.(*v1alpha1.ArangoPlatformChart), err
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateStatus was generated because the type contains a Status member.
|
||||||
|
// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus().
|
||||||
|
func (c *FakeArangoPlatformCharts) UpdateStatus(ctx context.Context, arangoPlatformChart *v1alpha1.ArangoPlatformChart, opts v1.UpdateOptions) (result *v1alpha1.ArangoPlatformChart, err error) {
|
||||||
|
emptyResult := &v1alpha1.ArangoPlatformChart{}
|
||||||
|
obj, err := c.Fake.
|
||||||
|
Invokes(testing.NewUpdateSubresourceActionWithOptions(arangoplatformchartsResource, "status", c.ns, arangoPlatformChart, opts), emptyResult)
|
||||||
|
|
||||||
|
if obj == nil {
|
||||||
|
return emptyResult, err
|
||||||
|
}
|
||||||
|
return obj.(*v1alpha1.ArangoPlatformChart), err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete takes name of the arangoPlatformChart and deletes it. Returns an error if one occurs.
|
||||||
|
func (c *FakeArangoPlatformCharts) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
|
||||||
|
_, err := c.Fake.
|
||||||
|
Invokes(testing.NewDeleteActionWithOptions(arangoplatformchartsResource, c.ns, name, opts), &v1alpha1.ArangoPlatformChart{})
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteCollection deletes a collection of objects.
|
||||||
|
func (c *FakeArangoPlatformCharts) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
|
||||||
|
action := testing.NewDeleteCollectionActionWithOptions(arangoplatformchartsResource, c.ns, opts, listOpts)
|
||||||
|
|
||||||
|
_, err := c.Fake.Invokes(action, &v1alpha1.ArangoPlatformChartList{})
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Patch applies the patch and returns the patched arangoPlatformChart.
|
||||||
|
func (c *FakeArangoPlatformCharts) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.ArangoPlatformChart, err error) {
|
||||||
|
emptyResult := &v1alpha1.ArangoPlatformChart{}
|
||||||
|
obj, err := c.Fake.
|
||||||
|
Invokes(testing.NewPatchSubresourceActionWithOptions(arangoplatformchartsResource, c.ns, name, pt, data, opts, subresources...), emptyResult)
|
||||||
|
|
||||||
|
if obj == nil {
|
||||||
|
return emptyResult, err
|
||||||
|
}
|
||||||
|
return obj.(*v1alpha1.ArangoPlatformChart), err
|
||||||
|
}
|
|
@ -32,6 +32,10 @@ type FakePlatformV1alpha1 struct {
|
||||||
*testing.Fake
|
*testing.Fake
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *FakePlatformV1alpha1) ArangoPlatformCharts(namespace string) v1alpha1.ArangoPlatformChartInterface {
|
||||||
|
return &FakeArangoPlatformCharts{c, namespace}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *FakePlatformV1alpha1) ArangoPlatformStorages(namespace string) v1alpha1.ArangoPlatformStorageInterface {
|
func (c *FakePlatformV1alpha1) ArangoPlatformStorages(namespace string) v1alpha1.ArangoPlatformStorageInterface {
|
||||||
return &FakeArangoPlatformStorages{c, namespace}
|
return &FakeArangoPlatformStorages{c, namespace}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,4 +22,6 @@
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
|
type ArangoPlatformChartExpansion interface{}
|
||||||
|
|
||||||
type ArangoPlatformStorageExpansion interface{}
|
type ArangoPlatformStorageExpansion interface{}
|
||||||
|
|
|
@ -32,6 +32,7 @@ import (
|
||||||
|
|
||||||
type PlatformV1alpha1Interface interface {
|
type PlatformV1alpha1Interface interface {
|
||||||
RESTClient() rest.Interface
|
RESTClient() rest.Interface
|
||||||
|
ArangoPlatformChartsGetter
|
||||||
ArangoPlatformStoragesGetter
|
ArangoPlatformStoragesGetter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,6 +41,10 @@ type PlatformV1alpha1Client struct {
|
||||||
restClient rest.Interface
|
restClient rest.Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *PlatformV1alpha1Client) ArangoPlatformCharts(namespace string) ArangoPlatformChartInterface {
|
||||||
|
return newArangoPlatformCharts(c, namespace)
|
||||||
|
}
|
||||||
|
|
||||||
func (c *PlatformV1alpha1Client) ArangoPlatformStorages(namespace string) ArangoPlatformStorageInterface {
|
func (c *PlatformV1alpha1Client) ArangoPlatformStorages(namespace string) ArangoPlatformStorageInterface {
|
||||||
return newArangoPlatformStorages(c, namespace)
|
return newArangoPlatformStorages(c, namespace)
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,6 +124,8 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource
|
||||||
return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1alpha1().ArangoRoutes().Informer()}, nil
|
return &genericInformer{resource: resource.GroupResource(), informer: f.Networking().V1alpha1().ArangoRoutes().Informer()}, nil
|
||||||
|
|
||||||
// Group=platform.arangodb.com, Version=v1alpha1
|
// Group=platform.arangodb.com, Version=v1alpha1
|
||||||
|
case platformv1alpha1.SchemeGroupVersion.WithResource("arangoplatformcharts"):
|
||||||
|
return &genericInformer{resource: resource.GroupResource(), informer: f.Platform().V1alpha1().ArangoPlatformCharts().Informer()}, nil
|
||||||
case platformv1alpha1.SchemeGroupVersion.WithResource("arangoplatformstorages"):
|
case platformv1alpha1.SchemeGroupVersion.WithResource("arangoplatformstorages"):
|
||||||
return &genericInformer{resource: resource.GroupResource(), informer: f.Platform().V1alpha1().ArangoPlatformStorages().Informer()}, nil
|
return &genericInformer{resource: resource.GroupResource(), informer: f.Platform().V1alpha1().ArangoPlatformStorages().Informer()}, nil
|
||||||
|
|
||||||
|
|
94
pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformchart.go
generated
Normal file
94
pkg/generated/informers/externalversions/platform/v1alpha1/arangoplatformchart.go
generated
Normal 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"
|
||||||
|
|
||||||
|
platformv1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1"
|
||||||
|
versioned "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned"
|
||||||
|
internalinterfaces "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions/internalinterfaces"
|
||||||
|
v1alpha1 "github.com/arangodb/kube-arangodb/pkg/generated/listers/platform/v1alpha1"
|
||||||
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
|
watch "k8s.io/apimachinery/pkg/watch"
|
||||||
|
cache "k8s.io/client-go/tools/cache"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ArangoPlatformChartInformer provides access to a shared informer and lister for
|
||||||
|
// ArangoPlatformCharts.
|
||||||
|
type ArangoPlatformChartInformer interface {
|
||||||
|
Informer() cache.SharedIndexInformer
|
||||||
|
Lister() v1alpha1.ArangoPlatformChartLister
|
||||||
|
}
|
||||||
|
|
||||||
|
type arangoPlatformChartInformer struct {
|
||||||
|
factory internalinterfaces.SharedInformerFactory
|
||||||
|
tweakListOptions internalinterfaces.TweakListOptionsFunc
|
||||||
|
namespace string
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewArangoPlatformChartInformer constructs a new informer for ArangoPlatformChart type.
|
||||||
|
// Always prefer using an informer factory to get a shared informer instead of getting an independent
|
||||||
|
// one. This reduces memory footprint and number of connections to the server.
|
||||||
|
func NewArangoPlatformChartInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
|
||||||
|
return NewFilteredArangoPlatformChartInformer(client, namespace, resyncPeriod, indexers, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewFilteredArangoPlatformChartInformer constructs a new informer for ArangoPlatformChart type.
|
||||||
|
// Always prefer using an informer factory to get a shared informer instead of getting an independent
|
||||||
|
// one. This reduces memory footprint and number of connections to the server.
|
||||||
|
func NewFilteredArangoPlatformChartInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
|
||||||
|
return cache.NewSharedIndexInformer(
|
||||||
|
&cache.ListWatch{
|
||||||
|
ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
|
||||||
|
if tweakListOptions != nil {
|
||||||
|
tweakListOptions(&options)
|
||||||
|
}
|
||||||
|
return client.PlatformV1alpha1().ArangoPlatformCharts(namespace).List(context.TODO(), options)
|
||||||
|
},
|
||||||
|
WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
|
||||||
|
if tweakListOptions != nil {
|
||||||
|
tweakListOptions(&options)
|
||||||
|
}
|
||||||
|
return client.PlatformV1alpha1().ArangoPlatformCharts(namespace).Watch(context.TODO(), options)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
&platformv1alpha1.ArangoPlatformChart{},
|
||||||
|
resyncPeriod,
|
||||||
|
indexers,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *arangoPlatformChartInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
|
||||||
|
return NewFilteredArangoPlatformChartInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *arangoPlatformChartInformer) Informer() cache.SharedIndexInformer {
|
||||||
|
return f.factory.InformerFor(&platformv1alpha1.ArangoPlatformChart{}, f.defaultInformer)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *arangoPlatformChartInformer) Lister() v1alpha1.ArangoPlatformChartLister {
|
||||||
|
return v1alpha1.NewArangoPlatformChartLister(f.Informer().GetIndexer())
|
||||||
|
}
|
|
@ -28,6 +28,8 @@ import (
|
||||||
|
|
||||||
// Interface provides access to all the informers in this group version.
|
// Interface provides access to all the informers in this group version.
|
||||||
type Interface interface {
|
type Interface interface {
|
||||||
|
// ArangoPlatformCharts returns a ArangoPlatformChartInformer.
|
||||||
|
ArangoPlatformCharts() ArangoPlatformChartInformer
|
||||||
// ArangoPlatformStorages returns a ArangoPlatformStorageInformer.
|
// ArangoPlatformStorages returns a ArangoPlatformStorageInformer.
|
||||||
ArangoPlatformStorages() ArangoPlatformStorageInformer
|
ArangoPlatformStorages() ArangoPlatformStorageInformer
|
||||||
}
|
}
|
||||||
|
@ -43,6 +45,11 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList
|
||||||
return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
|
return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ArangoPlatformCharts returns a ArangoPlatformChartInformer.
|
||||||
|
func (v *version) ArangoPlatformCharts() ArangoPlatformChartInformer {
|
||||||
|
return &arangoPlatformChartInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
|
||||||
|
}
|
||||||
|
|
||||||
// ArangoPlatformStorages returns a ArangoPlatformStorageInformer.
|
// ArangoPlatformStorages returns a ArangoPlatformStorageInformer.
|
||||||
func (v *version) ArangoPlatformStorages() ArangoPlatformStorageInformer {
|
func (v *version) ArangoPlatformStorages() ArangoPlatformStorageInformer {
|
||||||
return &arangoPlatformStorageInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
|
return &arangoPlatformStorageInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
|
||||||
|
|
74
pkg/generated/listers/platform/v1alpha1/arangoplatformchart.go
generated
Normal file
74
pkg/generated/listers/platform/v1alpha1/arangoplatformchart.go
generated
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
//
|
||||||
|
// DISCLAIMER
|
||||||
|
//
|
||||||
|
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
|
||||||
|
// Code generated by lister-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
v1alpha1 "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1"
|
||||||
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
|
"k8s.io/client-go/listers"
|
||||||
|
"k8s.io/client-go/tools/cache"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ArangoPlatformChartLister helps list ArangoPlatformCharts.
|
||||||
|
// All objects returned here must be treated as read-only.
|
||||||
|
type ArangoPlatformChartLister interface {
|
||||||
|
// List lists all ArangoPlatformCharts in the indexer.
|
||||||
|
// Objects returned here must be treated as read-only.
|
||||||
|
List(selector labels.Selector) (ret []*v1alpha1.ArangoPlatformChart, err error)
|
||||||
|
// ArangoPlatformCharts returns an object that can list and get ArangoPlatformCharts.
|
||||||
|
ArangoPlatformCharts(namespace string) ArangoPlatformChartNamespaceLister
|
||||||
|
ArangoPlatformChartListerExpansion
|
||||||
|
}
|
||||||
|
|
||||||
|
// arangoPlatformChartLister implements the ArangoPlatformChartLister interface.
|
||||||
|
type arangoPlatformChartLister struct {
|
||||||
|
listers.ResourceIndexer[*v1alpha1.ArangoPlatformChart]
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewArangoPlatformChartLister returns a new ArangoPlatformChartLister.
|
||||||
|
func NewArangoPlatformChartLister(indexer cache.Indexer) ArangoPlatformChartLister {
|
||||||
|
return &arangoPlatformChartLister{listers.New[*v1alpha1.ArangoPlatformChart](indexer, v1alpha1.Resource("arangoplatformchart"))}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ArangoPlatformCharts returns an object that can list and get ArangoPlatformCharts.
|
||||||
|
func (s *arangoPlatformChartLister) ArangoPlatformCharts(namespace string) ArangoPlatformChartNamespaceLister {
|
||||||
|
return arangoPlatformChartNamespaceLister{listers.NewNamespaced[*v1alpha1.ArangoPlatformChart](s.ResourceIndexer, namespace)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ArangoPlatformChartNamespaceLister helps list and get ArangoPlatformCharts.
|
||||||
|
// All objects returned here must be treated as read-only.
|
||||||
|
type ArangoPlatformChartNamespaceLister interface {
|
||||||
|
// List lists all ArangoPlatformCharts in the indexer for a given namespace.
|
||||||
|
// Objects returned here must be treated as read-only.
|
||||||
|
List(selector labels.Selector) (ret []*v1alpha1.ArangoPlatformChart, err error)
|
||||||
|
// Get retrieves the ArangoPlatformChart from the indexer for a given namespace and name.
|
||||||
|
// Objects returned here must be treated as read-only.
|
||||||
|
Get(name string) (*v1alpha1.ArangoPlatformChart, error)
|
||||||
|
ArangoPlatformChartNamespaceListerExpansion
|
||||||
|
}
|
||||||
|
|
||||||
|
// arangoPlatformChartNamespaceLister implements the ArangoPlatformChartNamespaceLister
|
||||||
|
// interface.
|
||||||
|
type arangoPlatformChartNamespaceLister struct {
|
||||||
|
listers.ResourceIndexer[*v1alpha1.ArangoPlatformChart]
|
||||||
|
}
|
|
@ -22,6 +22,14 @@
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
|
// ArangoPlatformChartListerExpansion allows custom methods to be added to
|
||||||
|
// ArangoPlatformChartLister.
|
||||||
|
type ArangoPlatformChartListerExpansion interface{}
|
||||||
|
|
||||||
|
// ArangoPlatformChartNamespaceListerExpansion allows custom methods to be added to
|
||||||
|
// ArangoPlatformChartNamespaceLister.
|
||||||
|
type ArangoPlatformChartNamespaceListerExpansion interface{}
|
||||||
|
|
||||||
// ArangoPlatformStorageListerExpansion allows custom methods to be added to
|
// ArangoPlatformStorageListerExpansion allows custom methods to be added to
|
||||||
// ArangoPlatformStorageLister.
|
// ArangoPlatformStorageLister.
|
||||||
type ArangoPlatformStorageListerExpansion interface{}
|
type ArangoPlatformStorageListerExpansion interface{}
|
||||||
|
|
148
pkg/handlers/platform/chart/chart_test.go
Normal file
148
pkg/handlers/platform/chart/chart_test.go
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
//
|
||||||
|
// DISCLAIMER
|
||||||
|
//
|
||||||
|
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
|
||||||
|
package chart
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/operatorV2/operation"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/tests"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test_ChartReconcile_EmptyChart(t *testing.T) {
|
||||||
|
handler := newFakeHandler()
|
||||||
|
|
||||||
|
// Arrange
|
||||||
|
extension := tests.NewMetaObject[*platformApi.ArangoPlatformChart](t, tests.FakeNamespace, "example",
|
||||||
|
func(t *testing.T, obj *platformApi.ArangoPlatformChart) {})
|
||||||
|
extension_invalid_name := tests.NewMetaObject[*platformApi.ArangoPlatformChart](t, tests.FakeNamespace, "example-wrong-name",
|
||||||
|
func(t *testing.T, obj *platformApi.ArangoPlatformChart) {})
|
||||||
|
|
||||||
|
refresh := tests.CreateObjects(t, handler.kubeClient, handler.client, &extension, &extension_invalid_name)
|
||||||
|
|
||||||
|
t.Run("Missing chart", func(t *testing.T) {
|
||||||
|
// Test
|
||||||
|
require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension)))
|
||||||
|
|
||||||
|
// Refresh
|
||||||
|
refresh(t)
|
||||||
|
|
||||||
|
// Validate
|
||||||
|
require.False(t, extension.Status.Conditions.IsTrue(platformApi.SpecValidCondition))
|
||||||
|
require.False(t, extension.Status.Conditions.IsTrue(platformApi.ReadyCondition))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Invalid chart", func(t *testing.T) {
|
||||||
|
// Arrange
|
||||||
|
tests.Apply(t, extension, func(t *testing.T, obj *platformApi.ArangoPlatformChart) {
|
||||||
|
obj.Spec.Definition = []byte("1234")
|
||||||
|
})
|
||||||
|
tests.UpdateObjects(t, handler.kubeClient, handler.client, &extension)
|
||||||
|
|
||||||
|
// Test
|
||||||
|
require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension)))
|
||||||
|
|
||||||
|
// Refresh
|
||||||
|
refresh(t)
|
||||||
|
|
||||||
|
// Validate
|
||||||
|
require.True(t, extension.Status.Conditions.IsTrue(platformApi.SpecValidCondition))
|
||||||
|
require.NotNil(t, extension.Status.Info)
|
||||||
|
require.False(t, extension.Status.Info.Valid)
|
||||||
|
require.EqualValues(t, extension.Status.Info.Message, "Chart is invalid")
|
||||||
|
require.False(t, extension.Status.Conditions.IsTrue(platformApi.ReadyCondition))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Invalid chart name", func(t *testing.T) {
|
||||||
|
// Arrange
|
||||||
|
tests.Apply(t, extension_invalid_name, func(t *testing.T, obj *platformApi.ArangoPlatformChart) {
|
||||||
|
obj.Spec.Definition = chart_1_0
|
||||||
|
})
|
||||||
|
tests.UpdateObjects(t, handler.kubeClient, handler.client, &extension_invalid_name)
|
||||||
|
|
||||||
|
// Test
|
||||||
|
require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension_invalid_name)))
|
||||||
|
|
||||||
|
// Refresh
|
||||||
|
refresh(t)
|
||||||
|
|
||||||
|
// Validate
|
||||||
|
require.True(t, extension_invalid_name.Status.Conditions.IsTrue(platformApi.SpecValidCondition))
|
||||||
|
require.NotNil(t, extension_invalid_name.Status.Info)
|
||||||
|
require.False(t, extension_invalid_name.Status.Info.Valid)
|
||||||
|
require.EqualValues(t, extension_invalid_name.Status.Info.Message, "Chart Name mismatch")
|
||||||
|
require.False(t, extension_invalid_name.Status.Conditions.IsTrue(platformApi.ReadyCondition))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Valid chart 1.0.0", func(t *testing.T) {
|
||||||
|
// Arrange
|
||||||
|
tests.Apply(t, extension, func(t *testing.T, obj *platformApi.ArangoPlatformChart) {
|
||||||
|
obj.Spec.Definition = chart_1_0
|
||||||
|
})
|
||||||
|
tests.UpdateObjects(t, handler.kubeClient, handler.client, &extension)
|
||||||
|
|
||||||
|
// Test
|
||||||
|
require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension)))
|
||||||
|
|
||||||
|
// Refresh
|
||||||
|
refresh(t)
|
||||||
|
|
||||||
|
// Validate
|
||||||
|
require.True(t, extension.Status.Conditions.IsTrue(platformApi.SpecValidCondition))
|
||||||
|
require.NotNil(t, extension.Status.Info)
|
||||||
|
require.True(t, extension.Status.Info.Valid)
|
||||||
|
require.EqualValues(t, extension.Status.Info.Message, "")
|
||||||
|
require.NotNil(t, extension.Status.Info.Details)
|
||||||
|
require.EqualValues(t, "example", extension.Status.Info.Details.GetName())
|
||||||
|
require.EqualValues(t, "1.0.0", extension.Status.Info.Details.GetVersion())
|
||||||
|
require.EqualValues(t, util.SHA256(chart_1_0), extension.Status.Info.Checksum)
|
||||||
|
require.True(t, extension.Status.Conditions.IsTrue(platformApi.ReadyCondition))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Valid chart 1.1.0", func(t *testing.T) {
|
||||||
|
// Arrange
|
||||||
|
tests.Apply(t, extension, func(t *testing.T, obj *platformApi.ArangoPlatformChart) {
|
||||||
|
obj.Spec.Definition = chart_1_1
|
||||||
|
})
|
||||||
|
tests.UpdateObjects(t, handler.kubeClient, handler.client, &extension)
|
||||||
|
|
||||||
|
// Test
|
||||||
|
require.NoError(t, tests.Handle(handler, tests.NewItem(t, operation.Update, extension)))
|
||||||
|
|
||||||
|
// Refresh
|
||||||
|
refresh(t)
|
||||||
|
|
||||||
|
// Validate
|
||||||
|
require.True(t, extension.Status.Conditions.IsTrue(platformApi.SpecValidCondition))
|
||||||
|
require.NotNil(t, extension.Status.Info)
|
||||||
|
require.True(t, extension.Status.Info.Valid)
|
||||||
|
require.EqualValues(t, extension.Status.Info.Message, "")
|
||||||
|
require.NotNil(t, extension.Status.Info.Details)
|
||||||
|
require.EqualValues(t, "example", extension.Status.Info.Details.GetName())
|
||||||
|
require.EqualValues(t, "1.1.0", extension.Status.Info.Details.GetVersion())
|
||||||
|
require.EqualValues(t, util.SHA256(chart_1_1), extension.Status.Info.Checksum)
|
||||||
|
require.True(t, extension.Status.Conditions.IsTrue(platformApi.ReadyCondition))
|
||||||
|
})
|
||||||
|
}
|
181
pkg/handlers/platform/chart/handler.go
Normal file
181
pkg/handlers/platform/chart/handler.go
Normal file
|
@ -0,0 +1,181 @@
|
||||||
|
//
|
||||||
|
// DISCLAIMER
|
||||||
|
//
|
||||||
|
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
|
||||||
|
package chart
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"helm.sh/helm/v3/pkg/chart"
|
||||||
|
apiErrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
|
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/client-go/kubernetes"
|
||||||
|
|
||||||
|
platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1"
|
||||||
|
arangoClientSet "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/logging"
|
||||||
|
operator "github.com/arangodb/kube-arangodb/pkg/operatorV2"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/operatorV2/event"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/operatorV2/operation"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/helm"
|
||||||
|
)
|
||||||
|
|
||||||
|
var logger = logging.Global().RegisterAndGetLogger("platform-chart-operator", logging.Info)
|
||||||
|
|
||||||
|
type handler struct {
|
||||||
|
client arangoClientSet.Interface
|
||||||
|
kubeClient kubernetes.Interface
|
||||||
|
|
||||||
|
eventRecorder event.RecorderInstance
|
||||||
|
|
||||||
|
operator operator.Operator
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *handler) Name() string {
|
||||||
|
return Kind()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *handler) Handle(ctx context.Context, item operation.Item) error {
|
||||||
|
// Get Backup object. It also covers NotFound case
|
||||||
|
object, err := util.WithKubernetesContextTimeoutP2A2(ctx, h.client.PlatformV1alpha1().ArangoPlatformCharts(item.Namespace).Get, item.Name, meta.GetOptions{})
|
||||||
|
if err != nil {
|
||||||
|
if apiErrors.IsNotFound(err) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
status := object.Status.DeepCopy()
|
||||||
|
|
||||||
|
changed, reconcileErr := operator.HandleP3WithStop(ctx, item, object, status, h.handle)
|
||||||
|
if reconcileErr != nil && !operator.IsReconcile(reconcileErr) {
|
||||||
|
logger.Err(reconcileErr).Warn("Fail for %s %s/%s",
|
||||||
|
item.Kind,
|
||||||
|
item.Namespace,
|
||||||
|
item.Name)
|
||||||
|
|
||||||
|
return reconcileErr
|
||||||
|
}
|
||||||
|
|
||||||
|
if !changed {
|
||||||
|
return reconcileErr
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.Debug("Updating %s %s/%s",
|
||||||
|
item.Kind,
|
||||||
|
item.Namespace,
|
||||||
|
item.Name)
|
||||||
|
|
||||||
|
if _, err := operator.WithArangoPlatformChartUpdateStatusInterfaceRetry(context.Background(), h.client.PlatformV1alpha1().ArangoPlatformCharts(object.GetNamespace()), object, *status, meta.UpdateOptions{}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return reconcileErr
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *handler) handle(ctx context.Context, item operation.Item, extension *platformApi.ArangoPlatformChart, status *platformApi.ArangoPlatformChartStatus) (bool, error) {
|
||||||
|
return operator.HandleP3WithCondition(ctx, &status.Conditions, platformApi.ReadyCondition, item, extension, status, h.HandleSpecValidity, h.HandleSpecData)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *handler) HandleSpecValidity(ctx context.Context, item operation.Item, extension *platformApi.ArangoPlatformChart, status *platformApi.ArangoPlatformChartStatus) (bool, error) {
|
||||||
|
if err := extension.Spec.Validate(); err != nil {
|
||||||
|
// We have received an error in the spec!
|
||||||
|
|
||||||
|
logger.Err(err).Warn("Invalid Spec on %s", item.String())
|
||||||
|
|
||||||
|
if status.Conditions.Update(platformApi.SpecValidCondition, false, "Spec is invalid", "Spec is invalid") {
|
||||||
|
return true, operator.Stop("Invalid spec")
|
||||||
|
}
|
||||||
|
return false, operator.Stop("Invalid spec")
|
||||||
|
}
|
||||||
|
|
||||||
|
if status.Conditions.Update(platformApi.SpecValidCondition, true, "Spec is valid", "Spec is valid") {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *handler) HandleSpecData(ctx context.Context, item operation.Item, extension *platformApi.ArangoPlatformChart, status *platformApi.ArangoPlatformChartStatus) (bool, error) {
|
||||||
|
if status.Info != nil {
|
||||||
|
if status.Info.Checksum != extension.Spec.Definition.SHA256() {
|
||||||
|
status.Info = nil
|
||||||
|
return true, operator.Reconcile("Spec changed")
|
||||||
|
}
|
||||||
|
|
||||||
|
if !status.Info.Valid {
|
||||||
|
return false, operator.Stop("Invalid Chart")
|
||||||
|
}
|
||||||
|
|
||||||
|
// All fine
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
chart, err := helm.Chart(extension.Spec.Definition).Get()
|
||||||
|
if err != nil {
|
||||||
|
status.Info = &platformApi.ChartStatusInfo{
|
||||||
|
Definition: extension.Spec.Definition,
|
||||||
|
Checksum: extension.Spec.Definition.SHA256(),
|
||||||
|
Valid: false,
|
||||||
|
Message: "Chart is invalid",
|
||||||
|
}
|
||||||
|
|
||||||
|
return true, operator.Reconcile("Spec changed")
|
||||||
|
}
|
||||||
|
|
||||||
|
if chart.Name() != extension.GetName() {
|
||||||
|
status.Info = &platformApi.ChartStatusInfo{
|
||||||
|
Definition: extension.Spec.Definition,
|
||||||
|
Checksum: extension.Spec.Definition.SHA256(),
|
||||||
|
Valid: false,
|
||||||
|
Message: "Chart Name mismatch",
|
||||||
|
}
|
||||||
|
|
||||||
|
return true, operator.Reconcile("Spec changed")
|
||||||
|
}
|
||||||
|
|
||||||
|
status.Info = &platformApi.ChartStatusInfo{
|
||||||
|
Definition: extension.Spec.Definition,
|
||||||
|
Checksum: extension.Spec.Definition.SHA256(),
|
||||||
|
Valid: true,
|
||||||
|
Details: chartInfoExtract(chart),
|
||||||
|
}
|
||||||
|
|
||||||
|
return true, operator.Reconcile("Spec changed")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *handler) CanBeHandled(item operation.Item) bool {
|
||||||
|
return item.Group == Group() &&
|
||||||
|
item.Version == Version() &&
|
||||||
|
item.Kind == Kind()
|
||||||
|
}
|
||||||
|
|
||||||
|
func chartInfoExtract(chart *chart.Chart) *platformApi.ChartDetails {
|
||||||
|
if chart == nil || chart.Metadata == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return &platformApi.ChartDetails{
|
||||||
|
Name: chart.Name(),
|
||||||
|
Version: chart.Metadata.Version,
|
||||||
|
}
|
||||||
|
}
|
59
pkg/handlers/platform/chart/handler_test.go
Normal file
59
pkg/handlers/platform/chart/handler_test.go
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
//
|
||||||
|
// DISCLAIMER
|
||||||
|
//
|
||||||
|
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
|
||||||
|
package chart
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
apiErrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
|
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/operatorV2/operation"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/tests"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test_ObjectNotFound(t *testing.T) {
|
||||||
|
// Arrange
|
||||||
|
handler := newFakeHandler()
|
||||||
|
|
||||||
|
i := newItem(operation.Add, "test", "test")
|
||||||
|
|
||||||
|
actions := map[operation.Operation]bool{
|
||||||
|
operation.Add: false,
|
||||||
|
operation.Update: false,
|
||||||
|
operation.Delete: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Act
|
||||||
|
for operation, shouldFail := range actions {
|
||||||
|
t.Run(string(operation), func(t *testing.T) {
|
||||||
|
err := tests.Handle(handler, i)
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
if shouldFail {
|
||||||
|
require.Error(t, err)
|
||||||
|
require.True(t, apiErrors.IsNotFound(err))
|
||||||
|
} else {
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
38
pkg/handlers/platform/chart/local.go
Normal file
38
pkg/handlers/platform/chart/local.go
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
//
|
||||||
|
// DISCLAIMER
|
||||||
|
//
|
||||||
|
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
|
||||||
|
package chart
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/apis/platform"
|
||||||
|
platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Kind() string {
|
||||||
|
return platform.ArangoPlatformChartResourceKind
|
||||||
|
}
|
||||||
|
|
||||||
|
func Group() string {
|
||||||
|
return platformApi.SchemeGroupVersion.Group
|
||||||
|
}
|
||||||
|
|
||||||
|
func Version() string {
|
||||||
|
return platformApi.SchemeGroupVersion.Version
|
||||||
|
}
|
55
pkg/handlers/platform/chart/register.go
Normal file
55
pkg/handlers/platform/chart/register.go
Normal 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 chart
|
||||||
|
|
||||||
|
import (
|
||||||
|
"k8s.io/client-go/kubernetes"
|
||||||
|
|
||||||
|
arangoClientSet "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned"
|
||||||
|
arangoInformer "github.com/arangodb/kube-arangodb/pkg/generated/informers/externalversions"
|
||||||
|
operator "github.com/arangodb/kube-arangodb/pkg/operatorV2"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/operatorV2/event"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RegisterInformer into operator
|
||||||
|
func RegisterInformer(operator operator.Operator, recorder event.Recorder, client arangoClientSet.Interface, kubeClient kubernetes.Interface, informer arangoInformer.SharedInformerFactory) error {
|
||||||
|
if err := operator.RegisterInformer(informer.Platform().V1alpha1().ArangoPlatformCharts().Informer(),
|
||||||
|
Group(),
|
||||||
|
Version(),
|
||||||
|
Kind()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
h := &handler{
|
||||||
|
client: client,
|
||||||
|
kubeClient: kubeClient,
|
||||||
|
|
||||||
|
eventRecorder: recorder.NewInstance(Group(), Version(), Kind()),
|
||||||
|
|
||||||
|
operator: operator,
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := operator.RegisterHandler(h); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
BIN
pkg/handlers/platform/chart/suite/example-1.0.0.tgz
Normal file
BIN
pkg/handlers/platform/chart/suite/example-1.0.0.tgz
Normal file
Binary file not shown.
BIN
pkg/handlers/platform/chart/suite/example-1.1.0.tgz
Normal file
BIN
pkg/handlers/platform/chart/suite/example-1.1.0.tgz
Normal file
Binary file not shown.
67
pkg/handlers/platform/chart/suite_test.go
Normal file
67
pkg/handlers/platform/chart/suite_test.go
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
//
|
||||||
|
// DISCLAIMER
|
||||||
|
//
|
||||||
|
// Copyright 2024 ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Copyright holder is ArangoDB GmbH, Cologne, Germany
|
||||||
|
//
|
||||||
|
|
||||||
|
package chart
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "embed"
|
||||||
|
|
||||||
|
"k8s.io/client-go/kubernetes/fake"
|
||||||
|
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/apis/apps"
|
||||||
|
appsApi "github.com/arangodb/kube-arangodb/pkg/apis/apps/v1"
|
||||||
|
fakeClientSet "github.com/arangodb/kube-arangodb/pkg/generated/clientset/versioned/fake"
|
||||||
|
operator "github.com/arangodb/kube-arangodb/pkg/operatorV2"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/operatorV2/event"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/operatorV2/operation"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:embed suite/example-1.0.0.tgz
|
||||||
|
var chart_1_0 []byte
|
||||||
|
|
||||||
|
//go:embed suite/example-1.1.0.tgz
|
||||||
|
var chart_1_1 []byte
|
||||||
|
|
||||||
|
func newFakeHandler() *handler {
|
||||||
|
f := fakeClientSet.NewSimpleClientset()
|
||||||
|
k := fake.NewSimpleClientset()
|
||||||
|
|
||||||
|
h := &handler{
|
||||||
|
client: f,
|
||||||
|
kubeClient: k,
|
||||||
|
eventRecorder: event.NewEventRecorder("mock", k).NewInstance(Group(), Version(), Kind()),
|
||||||
|
operator: operator.NewOperator("mock", "mock", "mock"),
|
||||||
|
}
|
||||||
|
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
|
||||||
|
func newItem(o operation.Operation, namespace, name string) operation.Item {
|
||||||
|
return operation.Item{
|
||||||
|
Group: appsApi.SchemeGroupVersion.Group,
|
||||||
|
Version: appsApi.SchemeGroupVersion.Version,
|
||||||
|
Kind: apps.ArangoJobResourceKind,
|
||||||
|
|
||||||
|
Operation: o,
|
||||||
|
|
||||||
|
Namespace: namespace,
|
||||||
|
Name: name,
|
||||||
|
}
|
||||||
|
}
|
|
@ -26,7 +26,6 @@ import (
|
||||||
apiErrors "k8s.io/apimachinery/pkg/api/errors"
|
apiErrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
|
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
|
||||||
networkingApi "github.com/arangodb/kube-arangodb/pkg/apis/networking/v1alpha1"
|
|
||||||
platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1"
|
platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1"
|
||||||
operator "github.com/arangodb/kube-arangodb/pkg/operatorV2"
|
operator "github.com/arangodb/kube-arangodb/pkg/operatorV2"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/operatorV2/operation"
|
"github.com/arangodb/kube-arangodb/pkg/operatorV2/operation"
|
||||||
|
@ -51,7 +50,7 @@ func (h *handler) HandleArangoDeployment(ctx context.Context, item operation.Ite
|
||||||
|
|
||||||
// Condition for Found should be set to true
|
// Condition for Found should be set to true
|
||||||
|
|
||||||
if status.Conditions.UpdateWithHash(networkingApi.DeploymentFoundCondition, true, "ArangoDeployment found", "ArangoDeployment found", string(deployment.GetUID())) {
|
if status.Conditions.UpdateWithHash(platformApi.DeploymentFoundCondition, true, "ArangoDeployment found", "ArangoDeployment found", string(deployment.GetUID())) {
|
||||||
return true, operator.Reconcile("Conditions updated")
|
return true, operator.Reconcile("Conditions updated")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,12 +21,12 @@
|
||||||
package storage
|
package storage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/arangodb/kube-arangodb/pkg/apis/ml"
|
"github.com/arangodb/kube-arangodb/pkg/apis/platform"
|
||||||
platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1"
|
platformApi "github.com/arangodb/kube-arangodb/pkg/apis/platform/v1alpha1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Kind() string {
|
func Kind() string {
|
||||||
return ml.ArangoMLStorageResourceKind
|
return platform.ArangoPlatformStorageResourceKind
|
||||||
}
|
}
|
||||||
|
|
||||||
func Group() string {
|
func Group() string {
|
||||||
|
|
|
@ -49,6 +49,7 @@ import (
|
||||||
"github.com/arangodb/kube-arangodb/pkg/handlers/backup"
|
"github.com/arangodb/kube-arangodb/pkg/handlers/backup"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/handlers/job"
|
"github.com/arangodb/kube-arangodb/pkg/handlers/job"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/handlers/networking/route"
|
"github.com/arangodb/kube-arangodb/pkg/handlers/networking/route"
|
||||||
|
platformChart "github.com/arangodb/kube-arangodb/pkg/handlers/platform/chart"
|
||||||
platformStorage "github.com/arangodb/kube-arangodb/pkg/handlers/platform/storage"
|
platformStorage "github.com/arangodb/kube-arangodb/pkg/handlers/platform/storage"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/handlers/policy"
|
"github.com/arangodb/kube-arangodb/pkg/handlers/policy"
|
||||||
schedulerBatchJobHandler "github.com/arangodb/kube-arangodb/pkg/handlers/scheduler/batchjob"
|
schedulerBatchJobHandler "github.com/arangodb/kube-arangodb/pkg/handlers/scheduler/batchjob"
|
||||||
|
@ -407,6 +408,10 @@ func (o *Operator) onStartOperatorV2Platform(operator operatorV2.Operator, recor
|
||||||
if err := platformStorage.RegisterInformer(operator, recorder, client, kubeClient, informer); err != nil {
|
if err := platformStorage.RegisterInformer(operator, recorder, client, kubeClient, informer); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := platformChart.RegisterInformer(operator, recorder, client, kubeClient, informer); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *Operator) onStartOperatorV2Scheduler(operator operatorV2.Operator, recorder event.Recorder, client arangoClientSet.Interface, kubeClient kubernetes.Interface, informer arangoInformer.SharedInformerFactory, kubeInformer informers.SharedInformerFactory) {
|
func (o *Operator) onStartOperatorV2Scheduler(operator operatorV2.Operator, recorder event.Recorder, client arangoClientSet.Interface, kubeClient kubernetes.Interface, informer arangoInformer.SharedInformerFactory, kubeInformer informers.SharedInformerFactory) {
|
||||||
|
|
|
@ -85,3 +85,7 @@ func WithArangoStorageUpdateStatusInterfaceRetry(ctx context.Context, client Upd
|
||||||
func WithArangoPlatformStorageUpdateStatusInterfaceRetry(ctx context.Context, client UpdateStatusInterface[platformApi.ArangoPlatformStorageStatus, *platformApi.ArangoPlatformStorage], obj *platformApi.ArangoPlatformStorage, status platformApi.ArangoPlatformStorageStatus, opts meta.UpdateOptions) (*platformApi.ArangoPlatformStorage, error) {
|
func WithArangoPlatformStorageUpdateStatusInterfaceRetry(ctx context.Context, client UpdateStatusInterface[platformApi.ArangoPlatformStorageStatus, *platformApi.ArangoPlatformStorage], obj *platformApi.ArangoPlatformStorage, status platformApi.ArangoPlatformStorageStatus, opts meta.UpdateOptions) (*platformApi.ArangoPlatformStorage, error) {
|
||||||
return WithUpdateStatusInterfaceRetry[platformApi.ArangoPlatformStorageStatus, *platformApi.ArangoPlatformStorage](ctx, client, obj, status, opts)
|
return WithUpdateStatusInterfaceRetry[platformApi.ArangoPlatformStorageStatus, *platformApi.ArangoPlatformStorage](ctx, client, obj, status, opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func WithArangoPlatformChartUpdateStatusInterfaceRetry(ctx context.Context, client UpdateStatusInterface[platformApi.ArangoPlatformChartStatus, *platformApi.ArangoPlatformChart], obj *platformApi.ArangoPlatformChart, status platformApi.ArangoPlatformChartStatus, opts meta.UpdateOptions) (*platformApi.ArangoPlatformChart, error) {
|
||||||
|
return WithUpdateStatusInterfaceRetry[platformApi.ArangoPlatformChartStatus, *platformApi.ArangoPlatformChart](ctx, client, obj, status, opts)
|
||||||
|
}
|
||||||
|
|
|
@ -307,6 +307,12 @@ func CreateObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientSe
|
||||||
vl := *v
|
vl := *v
|
||||||
_, err := arango.PlatformV1alpha1().ArangoPlatformStorages(vl.GetNamespace()).Create(context.Background(), vl, meta.CreateOptions{})
|
_, err := arango.PlatformV1alpha1().ArangoPlatformStorages(vl.GetNamespace()).Create(context.Background(), vl, meta.CreateOptions{})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
case **platformApi.ArangoPlatformChart:
|
||||||
|
require.NotNil(t, v)
|
||||||
|
|
||||||
|
vl := *v
|
||||||
|
_, err := arango.PlatformV1alpha1().ArangoPlatformCharts(vl.GetNamespace()).Create(context.Background(), vl, meta.CreateOptions{})
|
||||||
|
require.NoError(t, err)
|
||||||
default:
|
default:
|
||||||
require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String()))
|
require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String()))
|
||||||
}
|
}
|
||||||
|
@ -520,6 +526,12 @@ func UpdateObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientSe
|
||||||
vl := *v
|
vl := *v
|
||||||
_, err := arango.PlatformV1alpha1().ArangoPlatformStorages(vl.GetNamespace()).Update(context.Background(), vl, meta.UpdateOptions{})
|
_, err := arango.PlatformV1alpha1().ArangoPlatformStorages(vl.GetNamespace()).Update(context.Background(), vl, meta.UpdateOptions{})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
case **platformApi.ArangoPlatformChart:
|
||||||
|
require.NotNil(t, v)
|
||||||
|
|
||||||
|
vl := *v
|
||||||
|
_, err := arango.PlatformV1alpha1().ArangoPlatformCharts(vl.GetNamespace()).Update(context.Background(), vl, meta.UpdateOptions{})
|
||||||
|
require.NoError(t, err)
|
||||||
default:
|
default:
|
||||||
require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String()))
|
require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String()))
|
||||||
}
|
}
|
||||||
|
@ -698,6 +710,11 @@ func DeleteObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientSe
|
||||||
|
|
||||||
vl := *v
|
vl := *v
|
||||||
require.NoError(t, arango.PlatformV1alpha1().ArangoPlatformStorages(vl.GetNamespace()).Delete(context.Background(), vl.GetName(), meta.DeleteOptions{}))
|
require.NoError(t, arango.PlatformV1alpha1().ArangoPlatformStorages(vl.GetNamespace()).Delete(context.Background(), vl.GetName(), meta.DeleteOptions{}))
|
||||||
|
case **platformApi.ArangoPlatformChart:
|
||||||
|
require.NotNil(t, v)
|
||||||
|
|
||||||
|
vl := *v
|
||||||
|
require.NoError(t, arango.PlatformV1alpha1().ArangoPlatformCharts(vl.GetNamespace()).Delete(context.Background(), vl.GetName(), meta.DeleteOptions{}))
|
||||||
default:
|
default:
|
||||||
require.Fail(t, fmt.Sprintf("Unable to delete object: %s", reflect.TypeOf(v).String()))
|
require.Fail(t, fmt.Sprintf("Unable to delete object: %s", reflect.TypeOf(v).String()))
|
||||||
}
|
}
|
||||||
|
@ -1204,6 +1221,21 @@ func RefreshObjects(t *testing.T, k8s kubernetes.Interface, arango arangoClientS
|
||||||
} else {
|
} else {
|
||||||
*v = vn
|
*v = vn
|
||||||
}
|
}
|
||||||
|
case **platformApi.ArangoPlatformChart:
|
||||||
|
require.NotNil(t, v)
|
||||||
|
|
||||||
|
vl := *v
|
||||||
|
|
||||||
|
vn, err := arango.PlatformV1alpha1().ArangoPlatformCharts(vl.GetNamespace()).Get(context.Background(), vl.GetName(), meta.GetOptions{})
|
||||||
|
if err != nil {
|
||||||
|
if kerrors.IsNotFound(err) {
|
||||||
|
*v = nil
|
||||||
|
} else {
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
*v = vn
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
require.Fail(t, fmt.Sprintf("Unable to get object: %s", reflect.TypeOf(v).String()))
|
require.Fail(t, fmt.Sprintf("Unable to get object: %s", reflect.TypeOf(v).String()))
|
||||||
}
|
}
|
||||||
|
@ -1456,6 +1488,14 @@ func SetMetaBasedOnType(t *testing.T, object meta.Object) {
|
||||||
platform.ArangoPlatformStorageResourcePlural,
|
platform.ArangoPlatformStorageResourcePlural,
|
||||||
object.GetNamespace(),
|
object.GetNamespace(),
|
||||||
object.GetName()))
|
object.GetName()))
|
||||||
|
case *platformApi.ArangoPlatformChart:
|
||||||
|
v.Kind = platform.ArangoPlatformChartResourceKind
|
||||||
|
v.APIVersion = networkingApi.SchemeGroupVersion.String()
|
||||||
|
v.SetSelfLink(fmt.Sprintf("/api/%s/%s/%s/%s",
|
||||||
|
platformApi.SchemeGroupVersion.String(),
|
||||||
|
platform.ArangoPlatformChartResourcePlural,
|
||||||
|
object.GetNamespace(),
|
||||||
|
object.GetName()))
|
||||||
default:
|
default:
|
||||||
require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String()))
|
require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String()))
|
||||||
}
|
}
|
||||||
|
@ -1691,6 +1731,12 @@ func GVK(t *testing.T, object meta.Object) schema.GroupVersionKind {
|
||||||
Version: platformApi.ArangoPlatformVersion,
|
Version: platformApi.ArangoPlatformVersion,
|
||||||
Kind: platform.ArangoPlatformStorageResourceKind,
|
Kind: platform.ArangoPlatformStorageResourceKind,
|
||||||
}
|
}
|
||||||
|
case *platformApi.ArangoPlatformChart:
|
||||||
|
return schema.GroupVersionKind{
|
||||||
|
Group: platform.ArangoPlatformGroupName,
|
||||||
|
Version: platformApi.ArangoPlatformVersion,
|
||||||
|
Kind: platform.ArangoPlatformChartResourceKind,
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String()))
|
require.Fail(t, fmt.Sprintf("Unable to create object: %s", reflect.TypeOf(v).String()))
|
||||||
return schema.GroupVersionKind{}
|
return schema.GroupVersionKind{}
|
||||||
|
|
|
@ -100,4 +100,5 @@ func Test_NewMetaObject(t *testing.T) {
|
||||||
NewMetaObjectRun[*analyticsApi.GraphAnalyticsEngine](t)
|
NewMetaObjectRun[*analyticsApi.GraphAnalyticsEngine](t)
|
||||||
NewMetaObjectRun[*networkingApi.ArangoRoute](t)
|
NewMetaObjectRun[*networkingApi.ArangoRoute](t)
|
||||||
NewMetaObjectRun[*platformApi.ArangoPlatformStorage](t)
|
NewMetaObjectRun[*platformApi.ArangoPlatformStorage](t)
|
||||||
|
NewMetaObjectRun[*platformApi.ArangoPlatformChart](t)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue