Skip to content

Commit 8af2e61

Browse files
authored
[Bugfix] Fix PDBs Version discovery (#1164)
1 parent fe434ef commit 8af2e61

File tree

30 files changed

+271
-23
lines changed

30 files changed

+271
-23
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
- (Improvement) Arango Kubernetes Client Mod Implementation
77
- (Refactoring) Extract kerrors package
88
- (Refactoring) Extract Inspector Definitions package
9+
- (Bugfix) Fix PDBs Version discovery
910

1011
## [1.2.20](https://github.com/arangodb/kube-arangodb/tree/1.2.20) (2022-10-25)
1112
- (Feature) Add action progress

pkg/deployment/resources/inspector/acs.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/arangodb/kube-arangodb/pkg/util/globals"
3232
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
3333
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
34+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version"
3435
)
3536

3637
func init() {
@@ -170,7 +171,11 @@ func (p *arangoClusterSynchronizationsInspector) Refresh(ctx context.Context) er
170171
return p.state.refresh(ctx, arangoClusterSynchronizationsInspectorLoaderObj)
171172
}
172173

173-
func (p arangoClusterSynchronizationsInspector) Throttle(c throttle.Components) throttle.Throttle {
174+
func (p *arangoClusterSynchronizationsInspector) Version() version.Version {
175+
return version.V1
176+
}
177+
178+
func (p *arangoClusterSynchronizationsInspector) Throttle(c throttle.Components) throttle.Throttle {
174179
return c.ArangoClusterSynchronization()
175180
}
176181

pkg/deployment/resources/inspector/am.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/arangodb/kube-arangodb/pkg/util/globals"
3232
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
3333
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
34+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version"
3435
)
3536

3637
func init() {
@@ -174,7 +175,11 @@ func (p *arangoMembersInspector) Refresh(ctx context.Context) error {
174175
return p.state.refresh(ctx, arangoMembersInspectorLoaderObj)
175176
}
176177

177-
func (p arangoMembersInspector) Throttle(c throttle.Components) throttle.Throttle {
178+
func (p *arangoMembersInspector) Version() version.Version {
179+
return version.V1
180+
}
181+
182+
func (p *arangoMembersInspector) Throttle(c throttle.Components) throttle.Throttle {
178183
return c.ArangoMember()
179184
}
180185

pkg/deployment/resources/inspector/at.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/arangodb/kube-arangodb/pkg/util/globals"
3232
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
3333
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
34+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version"
3435
)
3536

3637
func init() {
@@ -170,7 +171,11 @@ func (p *arangoTasksInspector) Refresh(ctx context.Context) error {
170171
return p.state.refresh(ctx, arangoTasksInspectorLoaderObj)
171172
}
172173

173-
func (p arangoTasksInspector) Throttle(c throttle.Components) throttle.Throttle {
174+
func (p *arangoTasksInspector) Version() version.Version {
175+
return version.V1
176+
}
177+
178+
func (p *arangoTasksInspector) Throttle(c throttle.Components) throttle.Throttle {
174179
return c.ArangoTask()
175180
}
176181

pkg/deployment/resources/inspector/endpoints.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/arangodb/kube-arangodb/pkg/util/globals"
3232
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
3333
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
34+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version"
3435
)
3536

3637
func init() {
@@ -170,7 +171,11 @@ func (p *endpointsInspector) Refresh(ctx context.Context) error {
170171
return p.state.refresh(ctx, endpointsInspectorLoaderObj)
171172
}
172173

173-
func (p endpointsInspector) Throttle(c throttle.Components) throttle.Throttle {
174+
func (p *endpointsInspector) Version() version.Version {
175+
return version.V1
176+
}
177+
178+
func (p *endpointsInspector) Throttle(c throttle.Components) throttle.Throttle {
174179
return c.Endpoints()
175180
}
176181

pkg/deployment/resources/inspector/nodes.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/arangodb/kube-arangodb/pkg/util/globals"
3232
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
3333
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
34+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version"
3435
)
3536

3637
func init() {
@@ -170,7 +171,11 @@ func (p *nodesInspector) Refresh(ctx context.Context) error {
170171
return p.state.refresh(ctx, nodesInspectorLoaderObj)
171172
}
172173

173-
func (p nodesInspector) Throttle(c throttle.Components) throttle.Throttle {
174+
func (p *nodesInspector) Version() version.Version {
175+
return version.V1
176+
}
177+
178+
func (p *nodesInspector) Throttle(c throttle.Components) throttle.Throttle {
174179
return c.Node()
175180
}
176181

pkg/deployment/resources/inspector/pdbs.go

+10-1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
"github.com/arangodb/kube-arangodb/pkg/util/globals"
3535
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
3636
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
37+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version"
3738
)
3839

3940
func init() {
@@ -281,7 +282,15 @@ func (p *podDisruptionBudgetsInspector) Refresh(ctx context.Context) error {
281282
return p.state.refresh(ctx, podDisruptionBudgetsInspectorLoaderObj)
282283
}
283284

284-
func (p podDisruptionBudgetsInspector) Throttle(c throttle.Components) throttle.Throttle {
285+
func (p *podDisruptionBudgetsInspector) Version() version.Version {
286+
if p.state.versionInfo.CompareTo("1.21") >= 0 {
287+
return version.V1
288+
}
289+
290+
return version.V1Beta1
291+
}
292+
293+
func (p *podDisruptionBudgetsInspector) Throttle(c throttle.Components) throttle.Throttle {
285294
return c.PodDisruptionBudget()
286295
}
287296

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
//
2+
// DISCLAIMER
3+
//
4+
// Copyright 2016-2022 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 inspector
22+
23+
import (
24+
"context"
25+
"testing"
26+
"time"
27+
28+
"github.com/stretchr/testify/require"
29+
kversion "k8s.io/apimachinery/pkg/version"
30+
31+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
32+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version"
33+
"github.com/arangodb/kube-arangodb/pkg/util/kclient"
34+
)
35+
36+
func Test_PDB_Versions(t *testing.T) {
37+
k8sVersions := map[string]version.Version{
38+
"v1.18.0": version.V1Beta1,
39+
"v1.19.0": version.V1Beta1,
40+
"v1.20.0": version.V1Beta1,
41+
"v1.21.0": version.V1,
42+
"v1.22.0": version.V1,
43+
"v1.23.0": version.V1,
44+
"v1.24.0": version.V1,
45+
"v1.25.0": version.V1,
46+
"v1.26.0": version.V1,
47+
}
48+
49+
for v, expected := range k8sVersions {
50+
t.Run(v, func(t *testing.T) {
51+
c := kclient.NewFakeClientWithVersion(&kversion.Info{
52+
GitVersion: v,
53+
})
54+
55+
tc := throttle.NewThrottleComponents(time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour, time.Hour)
56+
57+
i := NewInspector(tc, c, "test", "test")
58+
require.NoError(t, i.Refresh(context.Background()))
59+
60+
if expected.IsV1() {
61+
_, err := i.PodDisruptionBudget().V1()
62+
require.NoError(t, err)
63+
64+
_, err = i.PodDisruptionBudget().V1Beta1()
65+
require.Error(t, err)
66+
} else {
67+
_, err := i.PodDisruptionBudget().V1()
68+
require.Error(t, err)
69+
70+
_, err = i.PodDisruptionBudget().V1Beta1()
71+
require.NoError(t, err)
72+
}
73+
})
74+
}
75+
}

pkg/deployment/resources/inspector/pods.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/arangodb/kube-arangodb/pkg/util/globals"
3232
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
3333
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
34+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version"
3435
)
3536

3637
func init() {
@@ -174,7 +175,11 @@ func (p *podsInspector) Refresh(ctx context.Context) error {
174175
return p.state.refresh(ctx, podsInspectorLoaderObj)
175176
}
176177

177-
func (p podsInspector) Throttle(c throttle.Components) throttle.Throttle {
178+
func (p *podsInspector) Version() version.Version {
179+
return version.V1
180+
}
181+
182+
func (p *podsInspector) Throttle(c throttle.Components) throttle.Throttle {
178183
return c.Pod()
179184
}
180185

pkg/deployment/resources/inspector/pvcs.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/arangodb/kube-arangodb/pkg/util/globals"
3232
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
3333
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
34+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version"
3435
)
3536

3637
func init() {
@@ -174,7 +175,11 @@ func (p *persistentVolumeClaimsInspector) Refresh(ctx context.Context) error {
174175
return p.state.refresh(ctx, persistentVolumeClaimsInspectorLoaderObj)
175176
}
176177

177-
func (p persistentVolumeClaimsInspector) Throttle(c throttle.Components) throttle.Throttle {
178+
func (p *persistentVolumeClaimsInspector) Version() version.Version {
179+
return version.V1
180+
}
181+
182+
func (p *persistentVolumeClaimsInspector) Throttle(c throttle.Components) throttle.Throttle {
178183
return c.PersistentVolumeClaim()
179184
}
180185

pkg/deployment/resources/inspector/sa.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/arangodb/kube-arangodb/pkg/util/globals"
3232
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
3333
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
34+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version"
3435
)
3536

3637
func init() {
@@ -174,7 +175,11 @@ func (p *serviceAccountsInspector) Refresh(ctx context.Context) error {
174175
return p.state.refresh(ctx, serviceAccountsInspectorLoaderObj)
175176
}
176177

177-
func (p serviceAccountsInspector) Throttle(c throttle.Components) throttle.Throttle {
178+
func (p *serviceAccountsInspector) Version() version.Version {
179+
return version.V1
180+
}
181+
182+
func (p *serviceAccountsInspector) Throttle(c throttle.Components) throttle.Throttle {
178183
return c.ServiceAccount()
179184
}
180185

pkg/deployment/resources/inspector/secrets.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/arangodb/kube-arangodb/pkg/util/globals"
3232
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
3333
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
34+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version"
3435
)
3536

3637
func init() {
@@ -174,7 +175,11 @@ func (p *secretsInspector) Refresh(ctx context.Context) error {
174175
return p.state.refresh(ctx, secretsInspectorLoaderObj)
175176
}
176177

177-
func (p secretsInspector) Throttle(c throttle.Components) throttle.Throttle {
178+
func (p *secretsInspector) Version() version.Version {
179+
return version.V1
180+
}
181+
182+
func (p *secretsInspector) Throttle(c throttle.Components) throttle.Throttle {
178183
return c.Secret()
179184
}
180185

pkg/deployment/resources/inspector/services.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/arangodb/kube-arangodb/pkg/util/globals"
3232
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
3333
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
34+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version"
3435
)
3536

3637
func init() {
@@ -174,7 +175,11 @@ func (p *servicesInspector) Refresh(ctx context.Context) error {
174175
return p.state.refresh(ctx, servicesInspectorLoaderObj)
175176
}
176177

177-
func (p servicesInspector) Throttle(c throttle.Components) throttle.Throttle {
178+
func (p *servicesInspector) Version() version.Version {
179+
return version.V1
180+
}
181+
182+
func (p *servicesInspector) Throttle(c throttle.Components) throttle.Throttle {
178183
return c.Service()
179184
}
180185

pkg/deployment/resources/inspector/sm.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/arangodb/kube-arangodb/pkg/util/globals"
3232
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
3333
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/throttle"
34+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/version"
3435
)
3536

3637
func init() {
@@ -170,7 +171,11 @@ func (p *serviceMonitorsInspector) Refresh(ctx context.Context) error {
170171
return p.state.refresh(ctx, serviceMonitorsInspectorLoaderObj)
171172
}
172173

173-
func (p serviceMonitorsInspector) Throttle(c throttle.Components) throttle.Throttle {
174+
func (p *serviceMonitorsInspector) Version() version.Version {
175+
return version.V1
176+
}
177+
178+
func (p *serviceMonitorsInspector) Throttle(c throttle.Components) throttle.Throttle {
174179
return c.ServiceMonitor()
175180
}
176181

pkg/deployment/resources/pdbs.go

+6-7
Original file line numberDiff line numberDiff line change
@@ -126,23 +126,22 @@ func (r *Resources) ensurePDBForGroup(ctx context.Context, group api.ServerGroup
126126
deplName := r.context.GetAPIObject().GetName()
127127
pdbName := PDBNameForGroup(deplName, group)
128128
log := r.log.Str("section", "pdb").Str("group", group.AsRole())
129-
pdbMod := r.context.ACS().CurrentClusterCache().PodDisruptionBudgetsModInterface()
129+
cache := r.context.ACS().CurrentClusterCache()
130+
pdbMod := cache.PodDisruptionBudgetsModInterface()
130131

131132
for {
132133
var minAvailable *intstr.IntOrString
133134
var deletionTimestamp *meta.Time
134-
var isV1 bool
135135

136136
err := globals.GetGlobalTimeouts().Kubernetes().RunWithTimeout(ctx, func(ctxChild context.Context) error {
137-
if inspector, err := r.context.ACS().CurrentClusterCache().PodDisruptionBudget().V1(); err == nil {
137+
if inspector, err := cache.PodDisruptionBudget().V1(); err == nil {
138138
if pdb, err := inspector.Read().Get(ctxChild, pdbName, meta.GetOptions{}); err != nil {
139139
return err
140140
} else {
141-
isV1 = true
142141
minAvailable = pdb.Spec.MinAvailable
143142
deletionTimestamp = pdb.GetDeletionTimestamp()
144143
}
145-
} else if inspector, err := r.context.ACS().CurrentClusterCache().PodDisruptionBudget().V1Beta1(); err == nil {
144+
} else if inspector, err := cache.PodDisruptionBudget().V1Beta1(); err == nil {
146145
if pdb, err := inspector.Read().Get(ctxChild, pdbName, meta.GetOptions{}); err != nil {
147146
return err
148147
} else {
@@ -163,7 +162,7 @@ func (r *Resources) ensurePDBForGroup(ctx context.Context, group api.ServerGroup
163162
err = globals.GetGlobalTimeouts().Kubernetes().RunWithTimeout(ctx, func(ctxChild context.Context) error {
164163
var errInternal error
165164

166-
if isV1 {
165+
if cache.PodDisruptionBudget().Version().IsV1() {
167166
pdb := newPDBV1(wantedMinAvail, deplName, group, r.context.GetAPIObject().AsOwner())
168167
_, errInternal = pdbMod.V1().Create(ctxChild, pdb, meta.CreateOptions{})
169168
} else {
@@ -200,7 +199,7 @@ func (r *Resources) ensurePDBForGroup(ctx context.Context, group api.ServerGroup
200199
if deletionTimestamp == nil {
201200
// Update the PDB.
202201
err := globals.GetGlobalTimeouts().Kubernetes().RunWithTimeout(ctx, func(ctxChild context.Context) error {
203-
if isV1 {
202+
if cache.PodDisruptionBudget().Version().IsV1() {
204203
return pdbMod.V1().Delete(ctxChild, pdbName, meta.DeleteOptions{})
205204
}
206205

0 commit comments

Comments
 (0)