Skip to content

Commit 6e960fe

Browse files
authored
Merge pull request #232 from arangodb/bugfix/immutable-field-fix
Applying defaults after immutable fields have been reset
2 parents 8c9fee8 + 523f11e commit 6e960fe

File tree

3 files changed

+42
-5
lines changed

3 files changed

+42
-5
lines changed

pkg/apis/deployment/v1alpha/deployment_spec_test.go

+40-4
Original file line numberDiff line numberDiff line change
@@ -45,22 +45,39 @@ func TestDeploymentSpecSetDefaults(t *testing.T) {
4545

4646
func TestDeploymentSpecResetImmutableFields(t *testing.T) {
4747
tests := []struct {
48-
Original DeploymentSpec
49-
Target DeploymentSpec
50-
Expected DeploymentSpec
51-
Result []string
48+
Original DeploymentSpec
49+
Target DeploymentSpec
50+
Expected DeploymentSpec
51+
ApplyDefaults bool
52+
Result []string
5253
}{
5354
// Valid "changes"
5455
{
5556
DeploymentSpec{Image: util.NewString("foo")},
5657
DeploymentSpec{Image: util.NewString("foo2")},
5758
DeploymentSpec{Image: util.NewString("foo2")},
59+
false,
60+
nil,
61+
},
62+
{
63+
DeploymentSpec{Image: util.NewString("foo")},
64+
DeploymentSpec{Image: util.NewString("foo2")},
65+
DeploymentSpec{Image: util.NewString("foo2")},
66+
true,
5867
nil,
5968
},
6069
{
6170
DeploymentSpec{ImagePullPolicy: util.NewPullPolicy(v1.PullAlways)},
6271
DeploymentSpec{ImagePullPolicy: util.NewPullPolicy(v1.PullNever)},
6372
DeploymentSpec{ImagePullPolicy: util.NewPullPolicy(v1.PullNever)},
73+
false,
74+
nil,
75+
},
76+
{
77+
DeploymentSpec{ImagePullPolicy: util.NewPullPolicy(v1.PullAlways)},
78+
DeploymentSpec{ImagePullPolicy: util.NewPullPolicy(v1.PullNever)},
79+
DeploymentSpec{ImagePullPolicy: util.NewPullPolicy(v1.PullNever)},
80+
true,
6481
nil,
6582
},
6683

@@ -69,12 +86,31 @@ func TestDeploymentSpecResetImmutableFields(t *testing.T) {
6986
DeploymentSpec{Mode: NewMode(DeploymentModeSingle)},
7087
DeploymentSpec{Mode: NewMode(DeploymentModeCluster)},
7188
DeploymentSpec{Mode: NewMode(DeploymentModeSingle)},
89+
false,
7290
[]string{"mode"},
7391
},
92+
{
93+
DeploymentSpec{Mode: NewMode(DeploymentModeSingle)},
94+
DeploymentSpec{Mode: NewMode(DeploymentModeCluster)},
95+
DeploymentSpec{Mode: NewMode(DeploymentModeSingle)},
96+
true,
97+
[]string{"mode", "agents.count"},
98+
},
7499
}
75100

76101
for _, test := range tests {
102+
if test.ApplyDefaults {
103+
test.Original.SetDefaults("foo")
104+
test.Expected.SetDefaults("foo")
105+
test.Target.SetDefaultsFrom(test.Original)
106+
test.Target.SetDefaults("foo")
107+
}
77108
result := test.Original.ResetImmutableFields(&test.Target)
109+
if test.ApplyDefaults {
110+
if len(result) > 0 {
111+
test.Target.SetDefaults("foo")
112+
}
113+
}
78114
assert.Equal(t, test.Result, result)
79115
assert.Equal(t, test.Expected, test.Target)
80116
}

pkg/apis/deployment/v1alpha/server_group_spec.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ func (s *ServerGroupSpec) SetDefaults(group ServerGroup, used bool, mode Deploym
135135
s.Count = util.NewInt(3)
136136
}
137137
} else if s.GetCount() > 0 && !used {
138-
s.Count = util.NewInt(0)
138+
s.Count = nil
139139
}
140140
if _, found := s.Resources.Requests[v1.ResourceStorage]; !found {
141141
switch group {

pkg/deployment/deployment.go

+1
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ func (d *Deployment) handleArangoDeploymentUpdatedEvent() error {
292292
resetFields := specBefore.ResetImmutableFields(&newAPIObject.Spec)
293293
if len(resetFields) > 0 {
294294
log.Debug().Strs("fields", resetFields).Msg("Found modified immutable fields")
295+
newAPIObject.Spec.SetDefaults(d.apiObject.GetName())
295296
}
296297
if err := newAPIObject.Spec.Validate(); err != nil {
297298
d.CreateEvent(k8sutil.NewErrorEvent("Validation failed", err, d.apiObject))

0 commit comments

Comments
 (0)