Skip to content

Commit 7420e13

Browse files
authored
[Feature] Use inspector for ArangoMember (#1176)
1 parent 2f94237 commit 7420e13

15 files changed

+185
-282
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
- (Bugfix) Unlock broken inspectors
1616
- (Debug) Allow to send package to stdout
1717
- (Improvement) ArangoDB image validation (=>3.10) for ARM64 architecture
18+
- (Improvement) Use inspector for ArangoMember
1819

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

pkg/deployment/deployment.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ import (
4646
memberState "github.com/arangodb/kube-arangodb/pkg/deployment/member"
4747
"github.com/arangodb/kube-arangodb/pkg/deployment/patch"
4848
"github.com/arangodb/kube-arangodb/pkg/deployment/reconcile"
49-
"github.com/arangodb/kube-arangodb/pkg/deployment/reconciler"
5049
"github.com/arangodb/kube-arangodb/pkg/deployment/resilience"
5150
"github.com/arangodb/kube-arangodb/pkg/deployment/resources"
5251
"github.com/arangodb/kube-arangodb/pkg/deployment/resources/inspector"
@@ -59,7 +58,6 @@ import (
5958
"github.com/arangodb/kube-arangodb/pkg/util/errors"
6059
"github.com/arangodb/kube-arangodb/pkg/util/globals"
6160
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
62-
inspectorInterface "github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector"
6361
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/kerrors"
6462
"github.com/arangodb/kube-arangodb/pkg/util/kclient"
6563
"github.com/arangodb/kube-arangodb/pkg/util/trigger"
@@ -139,14 +137,6 @@ type Deployment struct {
139137
metrics Metrics
140138
}
141139

142-
func (d *Deployment) WithArangoMember(cache inspectorInterface.Inspector, timeout time.Duration, name string) reconciler.ArangoMemberModContext {
143-
return reconciler.NewArangoMemberModContext(cache, timeout, name)
144-
}
145-
146-
func (d *Deployment) WithCurrentArangoMember(name string) reconciler.ArangoMemberModContext {
147-
return d.WithArangoMember(d.acs.CurrentClusterCache(), globals.GetGlobals().Timeouts().Kubernetes().Get(), name)
148-
}
149-
150140
func (d *Deployment) GetMembersState() memberState.StateInspector {
151141
return d.memberState
152142
}

pkg/deployment/deployment_run_test.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import (
3737
"github.com/arangodb/kube-arangodb/pkg/util"
3838
"github.com/arangodb/kube-arangodb/pkg/util/errors"
3939
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
40+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector"
4041
)
4142

4243
func runTestCases(t *testing.T, testCases ...testCaseStruct) {
@@ -149,9 +150,7 @@ func runTestCase(t *testing.T, testCase testCaseStruct) {
149150
},
150151
}
151152

152-
c := d.WithCurrentArangoMember(m.ArangoMemberName(d.GetName(), group))
153-
154-
if loopErr = c.Create(context.Background(), &member); loopErr != nil {
153+
if _, loopErr = d.acs.CurrentClusterCache().ArangoMemberModInterface().V1().Create(context.Background(), &member, meta.CreateOptions{}); loopErr != nil {
155154
break
156155
}
157156

@@ -188,16 +187,16 @@ func runTestCase(t *testing.T, testCase testCaseStruct) {
188187
member.Status.Template = podTemplate
189188
member.Spec.Template = podTemplate
190189

191-
if loopErr = c.Update(context.Background(), func(obj *api.ArangoMember) bool {
192-
obj.Spec.Template = podTemplate
193-
return true
190+
if loopErr = inspector.WithArangoMemberUpdate(context.Background(), d.acs.CurrentClusterCache(), member.GetName(), func(in *api.ArangoMember) (bool, error) {
191+
in.Spec.Template = podTemplate
192+
return true, nil
194193
}); loopErr != nil {
195194
break
196195
}
197196

198-
if loopErr = c.UpdateStatus(context.Background(), func(obj *api.ArangoMember, s *api.ArangoMemberStatus) bool {
199-
s.Template = podTemplate
200-
return true
197+
if loopErr = inspector.WithArangoMemberStatusUpdate(context.Background(), d.acs.CurrentClusterCache(), member.GetName(), func(in *api.ArangoMember) (bool, error) {
198+
in.Status.Template = podTemplate
199+
return true, nil
201200
}); loopErr != nil {
202201
break
203202
}

pkg/deployment/reconcile/action_arango_member_update_pod_spec.go

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"github.com/arangodb/kube-arangodb/pkg/deployment/resources"
2828
"github.com/arangodb/kube-arangodb/pkg/util"
2929
"github.com/arangodb/kube-arangodb/pkg/util/errors"
30+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector"
3031
)
3132

3233
// newArangoMemberUpdatePodSpecAction creates a new Action that implements the given
@@ -61,7 +62,11 @@ func (a *actionArangoMemberUpdatePodSpec) Start(ctx context.Context) (bool, erro
6162
return true, nil
6263
}
6364

64-
member, ok := a.actionCtx.ACS().CurrentClusterCache().ArangoMember().V1().GetSimple(m.ArangoMemberName(a.actionCtx.GetName(), a.action.Group))
65+
name := m.ArangoMemberName(a.actionCtx.GetName(), a.action.Group)
66+
67+
cache := a.actionCtx.ACS().CurrentClusterCache()
68+
69+
_, ok := cache.ArangoMember().V1().GetSimple(name)
6570
if !ok {
6671
err := errors.Newf("ArangoMember not found")
6772
a.log.Err(err).Error("ArangoMember not found")
@@ -118,26 +123,24 @@ func (a *actionArangoMemberUpdatePodSpec) Start(ctx context.Context) (bool, erro
118123
template.Endpoint = &q
119124
}
120125

121-
c := a.actionCtx.WithCurrentArangoMember(member.GetName())
122-
123-
if err := c.Update(ctx, func(member *api.ArangoMember) bool {
126+
if err := inspector.WithArangoMemberUpdate(ctx, cache, name, func(member *api.ArangoMember) (bool, error) {
124127
if !member.Spec.Template.Equals(template) {
125128
member.Spec.Template = template.DeepCopy()
126-
return true
129+
return true, nil
127130
}
128131

129-
return false
132+
return false, nil
130133
}); err != nil {
131134
a.log.Err(err).Error("Error while updating member")
132135
return false, err
133136
}
134137

135-
if err := c.UpdateStatus(ctx, func(member *api.ArangoMember, status *api.ArangoMemberStatus) bool {
136-
if (status.Template == nil || status.Template.PodSpec == nil) && (m.Pod == nil || m.Pod.SpecVersion == "" || m.Pod.SpecVersion == template.PodSpecChecksum) {
137-
status.Template = template.DeepCopy()
138+
if err := inspector.WithArangoMemberStatusUpdate(ctx, cache, name, func(member *api.ArangoMember) (bool, error) {
139+
if (member.Status.Template == nil || member.Status.Template.PodSpec == nil) && (m.Pod == nil || m.Pod.SpecVersion == "" || m.Pod.SpecVersion == template.PodSpecChecksum) {
140+
member.Status.Template = template.DeepCopy()
138141
}
139142

140-
return true
143+
return true, nil
141144
}); err != nil {
142145
a.log.Err(err).Error("Error while updating member status")
143146
return false, err

pkg/deployment/reconcile/action_arango_member_update_pod_status.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525

2626
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
2727
"github.com/arangodb/kube-arangodb/pkg/util/errors"
28+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector"
2829
)
2930

3031
const (
@@ -60,7 +61,10 @@ func (a *actionArangoMemberUpdatePodStatus) Start(ctx context.Context) (bool, er
6061
return true, nil
6162
}
6263

63-
member, ok := a.actionCtx.ACS().CurrentClusterCache().ArangoMember().V1().GetSimple(m.ArangoMemberName(a.actionCtx.GetName(), a.action.Group))
64+
name := m.ArangoMemberName(a.actionCtx.GetName(), a.action.Group)
65+
cache := a.actionCtx.ACS().CurrentClusterCache()
66+
67+
member, ok := cache.ArangoMember().V1().GetSimple(name)
6468
if !ok {
6569
err := errors.Newf("ArangoMember not found")
6670
a.log.Err(err).Error("ArangoMember not found")
@@ -79,12 +83,12 @@ func (a *actionArangoMemberUpdatePodStatus) Start(ctx context.Context) (bool, er
7983
}
8084

8185
if member.Status.Template == nil || !member.Status.Template.Equals(member.Spec.Template) {
82-
if err := a.actionCtx.WithCurrentArangoMember(member.GetName()).UpdateStatus(ctx, func(obj *api.ArangoMember, status *api.ArangoMemberStatus) bool {
83-
if status.Template == nil || !status.Template.Equals(member.Spec.Template) {
84-
status.Template = member.Spec.Template.DeepCopy()
85-
return true
86+
if err := inspector.WithArangoMemberStatusUpdate(ctx, cache, name, func(in *api.ArangoMember) (bool, error) {
87+
if in.Status.Template == nil || !in.Status.Template.Equals(member.Spec.Template) {
88+
in.Status.Template = member.Spec.Template.DeepCopy()
89+
return true, nil
8690
}
87-
return false
91+
return false, nil
8892
}); err != nil {
8993
a.log.Err(err).Error("Error while updating member")
9094
return false, err

pkg/deployment/reconcile/action_context.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ import (
4646
type ActionContext interface {
4747
reconciler.DeploymentStatusUpdate
4848
reconciler.DeploymentAgencyMaintenance
49-
reconciler.ArangoMemberContext
5049
reconciler.DeploymentPodRenderer
5150
reconciler.ArangoAgencyGet
5251
reconciler.DeploymentInfoGetter
@@ -220,14 +219,6 @@ func (ac *actionContext) Add(key api.PlanLocalKey, value string, override bool)
220219
return ac.locals.Add(key, value, override)
221220
}
222221

223-
func (ac *actionContext) WithArangoMember(cache inspectorInterface.Inspector, timeout time.Duration, name string) reconciler.ArangoMemberModContext {
224-
return ac.context.WithArangoMember(cache, timeout, name)
225-
}
226-
227-
func (ac *actionContext) WithCurrentArangoMember(name string) reconciler.ArangoMemberModContext {
228-
return ac.context.WithCurrentArangoMember(name)
229-
}
230-
231222
func (ac *actionContext) GetMembersState() member.StateInspector {
232223
return ac.context.GetMembersState()
233224
}

pkg/deployment/reconcile/action_runtime_container_args_udpate.go

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
"github.com/arangodb/kube-arangodb/pkg/deployment/rotation"
3333
"github.com/arangodb/kube-arangodb/pkg/util/globals"
3434
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
35+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector"
3536
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
3637
)
3738

@@ -64,7 +65,7 @@ func (a actionRuntimeContainerArgsLogLevelUpdate) Post(ctx context.Context) erro
6465
}
6566

6667
memberName := m.ArangoMemberName(a.actionCtx.GetName(), a.action.Group)
67-
member, ok := cache.ArangoMember().V1().GetSimple(memberName)
68+
_, ok = cache.ArangoMember().V1().GetSimple(memberName)
6869
if !ok {
6970
return errors.Errorf("ArangoMember %s not found", memberName)
7071
}
@@ -76,37 +77,37 @@ func (a actionRuntimeContainerArgsLogLevelUpdate) Post(ctx context.Context) erro
7677
}
7778

7879
log := a.log.Str("containerName", containerName)
79-
updateMemberStatusArgs := func(obj *api.ArangoMember, s *api.ArangoMemberStatus) bool {
80-
if obj.Spec.Template == nil || s.Template == nil ||
81-
obj.Spec.Template.PodSpec == nil || s.Template.PodSpec == nil {
80+
updateMemberStatusArgs := func(in *api.ArangoMember) (bool, error) {
81+
if in.Spec.Template == nil || in.Status.Template == nil ||
82+
in.Spec.Template.PodSpec == nil || in.Status.Template.PodSpec == nil {
8283
log.Info("Nil Member definition")
83-
return false
84+
return false, nil
8485
}
8586

86-
if len(obj.Spec.Template.PodSpec.Spec.Containers) != len(s.Template.PodSpec.Spec.Containers) {
87+
if len(in.Spec.Template.PodSpec.Spec.Containers) != len(in.Status.Template.PodSpec.Spec.Containers) {
8788
log.Info("Invalid size of containers")
88-
return false
89+
return false, nil
8990
}
9091

91-
for id := range obj.Spec.Template.PodSpec.Spec.Containers {
92-
if obj.Spec.Template.PodSpec.Spec.Containers[id].Name == containerName {
93-
if s.Template.PodSpec.Spec.Containers[id].Name != containerName {
92+
for id := range in.Spec.Template.PodSpec.Spec.Containers {
93+
if in.Spec.Template.PodSpec.Spec.Containers[id].Name == containerName {
94+
if in.Status.Template.PodSpec.Spec.Containers[id].Name != containerName {
9495
log.Info("Invalid order of containers")
95-
return false
96+
return false, nil
9697
}
9798

98-
s.Template.PodSpec.Spec.Containers[id].Command = obj.Spec.Template.PodSpec.Spec.Containers[id].Command
99+
in.Status.Template.PodSpec.Spec.Containers[id].Command = in.Spec.Template.PodSpec.Spec.Containers[id].Command
99100
log.Info("Updating container args")
100-
return true
101+
return true, nil
101102
}
102103
}
103104

104105
log.Info("can not find the container")
105106

106-
return false
107+
return false, nil
107108
}
108109

109-
err := a.actionCtx.WithCurrentArangoMember(member.GetName()).UpdateStatus(ctx, updateMemberStatusArgs)
110+
err := inspector.WithArangoMemberStatusUpdate(ctx, cache, memberName, updateMemberStatusArgs)
110111
if err != nil {
111112
return errors.WithMessage(err, "Error while updating member status")
112113
}

pkg/deployment/reconcile/action_runtime_container_image_update.go

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/arangodb/kube-arangodb/pkg/deployment/rotation"
3232
"github.com/arangodb/kube-arangodb/pkg/util/errors"
3333
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
34+
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector"
3435
)
3536

3637
func newRuntimeContainerImageUpdateAction(action api.Action, actionCtx ActionContext) Action {
@@ -56,51 +57,54 @@ func (a actionRuntimeContainerImageUpdate) Post(ctx context.Context) error {
5657
return nil
5758
}
5859

59-
name, image, ok := a.getContainerDetails()
60+
cname, image, ok := a.getContainerDetails()
6061
if !ok {
6162
a.log.Info("Unable to find container details")
6263
return nil
6364
}
6465

65-
member, ok := a.actionCtx.ACS().CurrentClusterCache().ArangoMember().V1().GetSimple(m.ArangoMemberName(a.actionCtx.GetName(), a.action.Group))
66+
cache := a.actionCtx.ACS().CurrentClusterCache()
67+
name := m.ArangoMemberName(a.actionCtx.GetName(), a.action.Group)
68+
69+
_, ok = cache.ArangoMember().V1().GetSimple(name)
6670
if !ok {
6771
err := errors.Newf("ArangoMember not found")
6872
a.log.Err(err).Error("ArangoMember not found")
6973
return err
7074
}
7175

72-
return a.actionCtx.WithCurrentArangoMember(member.GetName()).UpdateStatus(ctx, func(obj *api.ArangoMember, s *api.ArangoMemberStatus) bool {
73-
if obj.Spec.Template == nil || s.Template == nil ||
74-
obj.Spec.Template.PodSpec == nil || s.Template.PodSpec == nil {
76+
return inspector.WithArangoMemberUpdate(ctx, cache, name, func(in *api.ArangoMember) (bool, error) {
77+
if in.Spec.Template == nil || in.Status.Template == nil ||
78+
in.Spec.Template.PodSpec == nil || in.Status.Template.PodSpec == nil {
7579
a.log.Info("Nil Member definition")
76-
return false
80+
return false, nil
7781
}
7882

79-
if len(obj.Spec.Template.PodSpec.Spec.Containers) != len(s.Template.PodSpec.Spec.Containers) {
83+
if len(in.Spec.Template.PodSpec.Spec.Containers) != len(in.Status.Template.PodSpec.Spec.Containers) {
8084
a.log.Info("Invalid size of containers")
81-
return false
85+
return false, nil
8286
}
8387

84-
for id := range obj.Spec.Template.PodSpec.Spec.Containers {
85-
if obj.Spec.Template.PodSpec.Spec.Containers[id].Name == name {
86-
if s.Template.PodSpec.Spec.Containers[id].Name != name {
88+
for id := range in.Spec.Template.PodSpec.Spec.Containers {
89+
if in.Spec.Template.PodSpec.Spec.Containers[id].Name == cname {
90+
if in.Status.Template.PodSpec.Spec.Containers[id].Name != cname {
8791
a.log.Info("Invalid order of containers")
88-
return false
92+
return false, nil
8993
}
9094

91-
if obj.Spec.Template.PodSpec.Spec.Containers[id].Image != image {
92-
a.log.Str("got", obj.Spec.Template.PodSpec.Spec.Containers[id].Image).Str("expected", image).Info("Invalid spec image of container")
93-
return false
95+
if in.Spec.Template.PodSpec.Spec.Containers[id].Image != image {
96+
a.log.Str("got", in.Spec.Template.PodSpec.Spec.Containers[id].Image).Str("expected", image).Info("Invalid spec image of container")
97+
return false, nil
9498
}
9599

96-
if s.Template.PodSpec.Spec.Containers[id].Image != image {
97-
s.Template.PodSpec.Spec.Containers[id].Image = image
98-
return true
100+
if in.Status.Template.PodSpec.Spec.Containers[id].Image != image {
101+
in.Status.Template.PodSpec.Spec.Containers[id].Image = image
102+
return true, nil
99103
}
100-
return false
104+
return false, nil
101105
}
102106
}
103-
return false
107+
return false, nil
104108
})
105109
}
106110

pkg/deployment/reconcile/context.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ type CreateMemberMod func(s *api.DeploymentStatus, g api.ServerGroup, m *api.Mem
3737
type Context interface {
3838
reconciler.DeploymentStatusUpdate
3939
reconciler.DeploymentAgencyMaintenance
40-
reconciler.ArangoMemberContext
4140
reconciler.DeploymentPodRenderer
4241
reconciler.DeploymentImageManager
4342
reconciler.ArangoAgencyGet

pkg/deployment/reconcile/plan_builder_context.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ type PlanBuilderContext interface {
3636

3737
reconciler.DeploymentInfoGetter
3838
reconciler.DeploymentAgencyMaintenance
39-
reconciler.ArangoMemberContext
4039
reconciler.DeploymentPodRenderer
4140
reconciler.DeploymentImageManager
4241
reconciler.ArangoAgencyGet

0 commit comments

Comments
 (0)