Skip to content
This repository was archived by the owner on Mar 16, 2024. It is now read-only.

Commit cf5ba1d

Browse files
authored
Merge pull request #2371 from tylerslaton/revert-volume-size-removal
2 parents 8a1644f + 6baddd3 commit cf5ba1d

File tree

8 files changed

+54
-32
lines changed

8 files changed

+54
-32
lines changed

pkg/apis/internal.acorn.io/v1/appinstance.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"strings"
77

88
corev1 "k8s.io/api/core/v1"
9+
"k8s.io/apimachinery/pkg/api/resource"
910
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1011
)
1112

@@ -229,9 +230,10 @@ type AppStatusStaged struct {
229230
}
230231

231232
type Defaults struct {
232-
Volumes map[string]VolumeDefault `json:"volumes,omitempty"`
233-
Memory map[string]*int64 `json:"memory,omitempty"`
234-
Region string `json:"region,omitempty"`
233+
VolumeSize *resource.Quantity `json:"volumeSize,omitempty"`
234+
Volumes map[string]VolumeDefault `json:"volumes,omitempty"`
235+
Memory map[string]*int64 `json:"memory,omitempty"`
236+
Region string `json:"region,omitempty"`
235237
}
236238

237239
type VolumeDefault struct {

pkg/apis/internal.acorn.io/v1/zz_generated.deepcopy.go

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

pkg/controller/defaults/defaults.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ func Calculate(req router.Request, resp router.Response) (err error) {
3030
}
3131
}()
3232

33+
// addVolumeClassDefaults should run everytime as the function itself will not overwrite any existing
34+
// defaults. Effectively, this means that volume defaults only get set if they have not been set before.
35+
if err = addVolumeClassDefaults(req.Ctx, req.Client, appInstance); err != nil {
36+
return err
37+
}
38+
3339
if appInstance.Generation != appInstance.Status.ObservedGeneration {
3440
if err = calculate(req, appInstance); err != nil {
3541
return err
@@ -49,10 +55,6 @@ func calculate(req router.Request, appInstance *internalv1.AppInstance) error {
4955
return err
5056
}
5157

52-
if err = addVolumeClassDefaults(req.Ctx, req.Client, appInstance); err != nil {
53-
return err
54-
}
55-
5658
if err = addDefaultMemory(req, cfg, appInstance); err != nil {
5759
return err
5860
}

pkg/controller/defaults/testdata/volumeclass/volume-class-defaults-same-gen/expected.golden

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,12 @@ status:
3030
appStatus: {}
3131
columns: {}
3232
conditions:
33+
- error: true
34+
message: 'cannot establish defaults because two defaults volume classes exist:
35+
test-volume-class and test-volume-class-1'
3336
observedGeneration: 1
34-
reason: Success
35-
status: "True"
36-
success: true
37+
reason: Error
38+
status: "False"
3739
type: defaults
3840
defaults: {}
3941
namespace: app-created-namespace

pkg/controller/defaults/testdata/volumeclass/volume-class-two-cluster-defaults/expected.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ status:
2020
volume: foo
2121
volumes:
2222
foo: {}
23-
defaults:
24-
region: local
2523
conditions:
2624
- error: true
2725
message: 'cannot establish defaults because two defaults volume classes exist: test-volume-class and test-volume-class-1'

pkg/controller/defaults/testdata/volumeclass/volume-class-two-project-defaults/expected.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ status:
2020
volume: foo
2121
volumes:
2222
foo: {}
23-
defaults:
24-
region: local
2523
conditions:
2624
- error: true
2725
message: 'cannot establish defaults because two defaults volume classes exist: test-volume-class and test-volume-class-1'

pkg/controller/defaults/volumeclass.go

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,28 +37,38 @@ func addVolumeClassDefaults(ctx context.Context, c kclient.Client, app *v1.AppIn
3737
})
3838

3939
for name, vol := range app.Status.AppSpec.Volumes {
40-
if _, alreadySet := app.Status.Defaults.Volumes[name]; alreadySet {
41-
continue
42-
}
43-
4440
volDefaults := app.Status.Defaults.Volumes[name]
4541
vol = volume.CopyVolumeDefaults(vol, volumeBindings[name], volDefaults)
4642

47-
if vol.Class == "" && defaultVolumeClass != nil {
48-
volDefaults.Class = defaultVolumeClass.Name
49-
vol.Class = volDefaults.Class
50-
}
51-
if len(vol.AccessModes) == 0 {
52-
volDefaults.AccessModes = volumeClasses[vol.Class].AllowedAccessModes
43+
// This is a bit of a hack as we're migrating away from the VolumeSize field. Essentially,
44+
// we want to ensure that app.Status.Volumes[name] always has a size set. If the VolumeSize
45+
// field has been set in the past, we want to mirgrate that over to be set on app.Status.Volumes[name].
46+
// There is another edge case where the Size field was set by a VolumeClass's default size. In this
47+
// case we want to leave the Size field alone.
48+
if app.Status.Defaults.VolumeSize != nil && volDefaults.Size == "" {
49+
volDefaults.Size = v1.Quantity(app.Status.Defaults.VolumeSize.String())
5350
}
54-
if vol.Size == "" {
55-
volDefaults.Size = volumeClasses[vol.Class].Size.Default
56-
if volDefaults.Size == "" {
57-
defaultSize, err := getDefaultVolumeSize(ctx, c)
58-
if err != nil {
59-
return err
51+
52+
// If the Volume already has defaults, skip these steps. We don't want to overwrite
53+
// default class or access modes for volumes as it can lead to unexpected behavior when
54+
// volume classes are updated.
55+
if _, alreadySet := app.Status.Defaults.Volumes[name]; !alreadySet {
56+
if vol.Class == "" && defaultVolumeClass != nil {
57+
volDefaults.Class = defaultVolumeClass.Name
58+
vol.Class = volDefaults.Class
59+
}
60+
if len(vol.AccessModes) == 0 {
61+
volDefaults.AccessModes = volumeClasses[vol.Class].AllowedAccessModes
62+
}
63+
if vol.Size == "" {
64+
volDefaults.Size = volumeClasses[vol.Class].Size.Default
65+
if volDefaults.Size == "" {
66+
defaultSize, err := getDefaultVolumeSize(ctx, c)
67+
if err != nil {
68+
return err
69+
}
70+
volDefaults.Size = defaultSize
6071
}
61-
volDefaults.Size = defaultSize
6272
}
6373
}
6474

pkg/openapi/generated/openapi_generated.go

Lines changed: 6 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)