Skip to content

Commit 5bdd168

Browse files
authored
[Feature] ArangoMember Overrides (#1398)
1 parent 0aa65c6 commit 5bdd168

24 files changed

+506
-52
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
- (Feature) Add basic metrics for ArangoDeploymentReplication CR
1919
- (Bugfix) Use ArangoMember as owner reference for syncmaster secrets instead of Deployment
2020
- (Improvement) Remove PodSchedulingFailure condition instead of setting to false, restart pod if it could not be scheduled
21+
- (Feature) Add ArangoMember overrides
2122

2223
## [1.2.32](https://github.com/arangodb/kube-arangodb/tree/1.2.32) (2023-08-07)
2324
- (Feature) Backup lifetime - remove Backup once its lifetime has been reached

docs/api/ArangoMember.V1.md

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# API Reference for ArangoMember V1
2+
3+
## Spec
4+
5+
### .spec.deploymentUID: string
6+
7+
DeploymentUID define Deployment UID.
8+
9+
[Code Reference](/pkg/apis/deployment/v1/arango_member_spec.go#L34)
10+
11+
### .spec.group: int
12+
13+
Group define Member Groups.
14+
15+
[Code Reference](/pkg/apis/deployment/v1/arango_member_spec.go#L29)
16+
17+
### .spec.id: string
18+
19+
[Code Reference](/pkg/apis/deployment/v1/arango_member_spec.go#L31)
20+
21+
### .spec.overrides.resources: core.ResourceRequirements
22+
23+
Resources holds resource requests & limits. Overrides template provided on the group level.
24+
25+
Links:
26+
* [Documentation of core.ResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/#resourcerequirements-v1-core)
27+
28+
[Code Reference](/pkg/apis/deployment/v1/arango_member_spec_overrides.go#L38)
29+
30+
### .spec.overrides.volumeClaimTemplate: core.PersistentVolumeClaim
31+
32+
VolumeClaimTemplate specifies a template for volume claims. Overrides template provided on the group level.
33+
34+
Links:
35+
* [Documentation of core.PersistentVolumeClaim](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/#persistentvolumeclaim-v1-core)
36+
37+
[Code Reference](/pkg/apis/deployment/v1/arango_member_spec_overrides.go#L33)
38+
39+
### .spec.template.checksum: string
40+
41+
Checksum keep the Pod Spec Checksum (with ignored fields).
42+
43+
[Code Reference](/pkg/apis/deployment/v1/arango_member_pod_template.go#L60)
44+
45+
### .spec.template.endpoint: string
46+
47+
Deprecated: Endpoint is not saved into the template
48+
49+
[Code Reference](/pkg/apis/deployment/v1/arango_member_pod_template.go#L63)
50+
51+
### .spec.template.podSpec: core.PodTemplateSpec
52+
53+
PodSpec specifies the Pod Spec used for this Member.
54+
55+
Links:
56+
* [Documentation of core.PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/#podtemplatespec-v1-core)
57+
58+
[Code Reference](/pkg/apis/deployment/v1/arango_member_pod_template.go#L54)
59+
60+
### .spec.template.podSpecChecksum: string
61+
62+
PodSpecChecksum keep the Pod Spec Checksum (without ignored fields).
63+
64+
[Code Reference](/pkg/apis/deployment/v1/arango_member_pod_template.go#L57)
65+

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ require (
2828
github.com/arangodb/go-driver v1.4.1
2929
github.com/arangodb/go-driver/v2 v2.0.0-20211021031401-d92dcd5a4c83
3030
github.com/arangodb/go-upgrade-rules v0.0.0-20180809110947-031b4774ff21
31+
github.com/arangodb/rebalancer v0.1.1
3132
github.com/cenkalti/backoff v2.2.1+incompatible
3233
github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9
3334
github.com/gin-gonic/gin v1.9.1

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ github.com/arangodb/go-upgrade-rules v0.0.0-20180809110947-031b4774ff21 h1:+W7D5
8282
github.com/arangodb/go-upgrade-rules v0.0.0-20180809110947-031b4774ff21/go.mod h1:RkPIG6JJ2pcJUoymc18NxAJGraZd+iAEVnOTDjZey/w=
8383
github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e h1:Xg+hGrY2LcQBbxd0ZFdbGSyRKTYMZCfBbw/pMJFOk1g=
8484
github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e/go.mod h1:mq7Shfa/CaixoDxiyAAc5jZ6CVBAyPaNQCGS7mkj4Ho=
85+
github.com/arangodb/rebalancer v0.1.1 h1:8MikmxlhywKnw/wiDqctD8FFwBZhAAF1E3mIqh8nzCA=
86+
github.com/arangodb/rebalancer v0.1.1/go.mod h1:wLvglmYNuoTUYbLQq/UESIMVkINmSX9eZWC5QB9kNyk=
8587
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
8688
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
8789
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=

internal/docs_test.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,13 @@ func Test_GenerateAPIDocs(t *testing.T) {
147147
},
148148
},
149149
fmt.Sprintf("%s/pkg/apis/deployment/v1", root))
150+
151+
generateDocs(t, map[string]map[string]interface{}{
152+
"ArangoMember.V1": {
153+
"Spec": api.ArangoMember{}.Spec,
154+
},
155+
},
156+
fmt.Sprintf("%s/pkg/apis/deployment/v1", root))
150157
}
151158

152159
func generateDocs(t *testing.T, objects map[string]map[string]interface{}, paths ...string) {
@@ -320,7 +327,7 @@ func iterateOverObjectDirect(t *testing.T, docs map[string]*ast.Field, name stri
320327

321328
doc, ok := docs[docName]
322329
if !ok && !f.Anonymous {
323-
require.True(t, ok, docName)
330+
require.True(t, ok, docName, f.Name)
324331
}
325332

326333
if !f.Anonymous {

pkg/apis/deployment/v1/arango_member_pod_template.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,18 @@ func GetArangoMemberPodTemplate(pod *core.PodTemplateSpec, podSpecChecksum strin
4848
}
4949

5050
type ArangoMemberPodTemplate struct {
51-
PodSpec *core.PodTemplateSpec `json:"podSpec,omitempty"`
52-
PodSpecChecksum string `json:"podSpecChecksum,omitempty"`
53-
Checksum string `json:"checksum,omitempty"`
51+
// PodSpec specifies the Pod Spec used for this Member.
52+
// +doc/type: core.PodTemplateSpec
53+
// +doc/link: Documentation of core.PodTemplateSpec|https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/#podtemplatespec-v1-core
54+
PodSpec *core.PodTemplateSpec `json:"podSpec,omitempty"`
5455

55-
// deprecated
56+
// PodSpecChecksum keep the Pod Spec Checksum (without ignored fields).
57+
PodSpecChecksum string `json:"podSpecChecksum,omitempty"`
58+
59+
// Checksum keep the Pod Spec Checksum (with ignored fields).
60+
Checksum string `json:"checksum,omitempty"`
61+
62+
// Deprecated: Endpoint is not saved into the template
5663
Endpoint *string `json:"endpoint,omitempty"`
5764
}
5865

pkg/apis/deployment/v1/arango_member_spec.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//
22
// DISCLAIMER
33
//
4-
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
4+
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
55
//
66
// Licensed under the Apache License, Version 2.0 (the "License");
77
// you may not use this file except in compliance with the License.
@@ -25,9 +25,17 @@ import (
2525
)
2626

2727
type ArangoMemberSpec struct {
28-
Group ServerGroup `json:"group,omitempty"`
29-
ID string `json:"id,omitempty"`
30-
DeploymentUID types.UID `json:"deploymentUID,omitempty"`
28+
// Group define Member Groups.
29+
Group ServerGroup `json:"group,omitempty"`
3130

31+
ID string `json:"id,omitempty"`
32+
33+
// DeploymentUID define Deployment UID.
34+
DeploymentUID types.UID `json:"deploymentUID,omitempty"`
35+
36+
// Overrides define Member Overrides (Override values from ServerGroup).
37+
Overrides *ArangoMemberSpecOverrides `json:"overrides,omitempty"`
38+
39+
// Template keeps template which is gonna be applied on the Pod.
3240
Template *ArangoMemberPodTemplate `json:"template,omitempty"`
3341
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
//
2+
// DISCLAIMER
3+
//
4+
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
5+
//
6+
// Licensed under the Apache License, Version 2.0 (the "License");
7+
// you may not use this file except in compliance with the License.
8+
// You may obtain a copy of the License at
9+
//
10+
// http://www.apache.org/licenses/LICENSE-2.0
11+
//
12+
// Unless required by applicable law or agreed to in writing, software
13+
// distributed under the License is distributed on an "AS IS" BASIS,
14+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
// See the License for the specific language governing permissions and
16+
// limitations under the License.
17+
//
18+
// Copyright holder is ArangoDB GmbH, Cologne, Germany
19+
//
20+
21+
package v1
22+
23+
import (
24+
core "k8s.io/api/core/v1"
25+
26+
"github.com/arangodb/kube-arangodb/pkg/util"
27+
)
28+
29+
type ArangoMemberSpecOverrides struct {
30+
// VolumeClaimTemplate specifies a template for volume claims. Overrides template provided on the group level.
31+
// +doc/type: core.PersistentVolumeClaim
32+
// +doc/link: Documentation of core.PersistentVolumeClaim|https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/#persistentvolumeclaim-v1-core
33+
VolumeClaimTemplate *core.PersistentVolumeClaim `json:"volumeClaimTemplate,omitempty"`
34+
35+
// Resources holds resource requests & limits. Overrides template provided on the group level.
36+
// +doc/type: core.ResourceRequirements
37+
// +doc/link: Documentation of core.ResourceRequirements|https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/#resourcerequirements-v1-core
38+
Resources core.ResourceRequirements `json:"resources,omitempty"`
39+
}
40+
41+
func (a *ArangoMemberSpecOverrides) HasVolumeClaimTemplate(g *ServerGroupSpec) bool {
42+
if g != nil {
43+
if g.HasVolumeClaimTemplate() {
44+
return true
45+
}
46+
}
47+
48+
if a != nil {
49+
return a.VolumeClaimTemplate != nil
50+
}
51+
52+
return false
53+
}
54+
55+
func (a *ArangoMemberSpecOverrides) GetVolumeClaimTemplate(g *ServerGroupSpec) *core.PersistentVolumeClaim {
56+
if a != nil {
57+
if a.VolumeClaimTemplate != nil {
58+
return a.VolumeClaimTemplate.DeepCopy()
59+
}
60+
}
61+
62+
if g != nil {
63+
if g.VolumeClaimTemplate != nil {
64+
return g.VolumeClaimTemplate.DeepCopy()
65+
}
66+
}
67+
68+
return &core.PersistentVolumeClaim{}
69+
}
70+
71+
func (a *ArangoMemberSpecOverrides) GetResources(g *ServerGroupSpec) core.ResourceRequirements {
72+
rl := core.ResourceList{}
73+
rr := core.ResourceList{}
74+
75+
if g != nil {
76+
if l := g.Resources.Limits; len(l) > 0 {
77+
for k, v := range l {
78+
rl[k] = v
79+
}
80+
}
81+
if l := g.Resources.Requests; len(l) > 0 {
82+
for k, v := range l {
83+
rr[k] = v
84+
}
85+
}
86+
}
87+
88+
if a != nil {
89+
if l := a.Resources.Limits; len(l) > 0 {
90+
for k, v := range l {
91+
rl[k] = v
92+
}
93+
}
94+
if l := a.Resources.Requests; len(l) > 0 {
95+
for k, v := range l {
96+
rr[k] = v
97+
}
98+
}
99+
}
100+
101+
ret := core.ResourceRequirements{}
102+
103+
if len(rl) > 0 {
104+
ret.Limits = rl
105+
}
106+
if len(rr) > 0 {
107+
ret.Requests = rr
108+
}
109+
110+
return ret
111+
}
112+
113+
func (a *ArangoMemberSpecOverrides) GetStorageClassName(g *ServerGroupSpec) string {
114+
if a != nil {
115+
if z := a.VolumeClaimTemplate; z != nil {
116+
return util.TypeOrDefault[string](z.Spec.StorageClassName)
117+
}
118+
}
119+
120+
if g != nil {
121+
return g.GetStorageClassName()
122+
}
123+
124+
return ""
125+
}

pkg/apis/deployment/v1/zz_generated.deepcopy.go

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/apis/deployment/v2alpha1/arango_member_pod_template.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,18 @@ func GetArangoMemberPodTemplate(pod *core.PodTemplateSpec, podSpecChecksum strin
4848
}
4949

5050
type ArangoMemberPodTemplate struct {
51-
PodSpec *core.PodTemplateSpec `json:"podSpec,omitempty"`
52-
PodSpecChecksum string `json:"podSpecChecksum,omitempty"`
53-
Checksum string `json:"checksum,omitempty"`
51+
// PodSpec specifies the Pod Spec used for this Member.
52+
// +doc/type: core.PodTemplateSpec
53+
// +doc/link: Documentation of core.PodTemplateSpec|https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.26/#podtemplatespec-v1-core
54+
PodSpec *core.PodTemplateSpec `json:"podSpec,omitempty"`
5455

55-
// deprecated
56+
// PodSpecChecksum keep the Pod Spec Checksum (without ignored fields).
57+
PodSpecChecksum string `json:"podSpecChecksum,omitempty"`
58+
59+
// Checksum keep the Pod Spec Checksum (with ignored fields).
60+
Checksum string `json:"checksum,omitempty"`
61+
62+
// Deprecated: Endpoint is not saved into the template
5663
Endpoint *string `json:"endpoint,omitempty"`
5764
}
5865

0 commit comments

Comments
 (0)