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

Commit

Permalink
Merge pull request #2371 from tylerslaton/revert-volume-size-removal
Browse files Browse the repository at this point in the history
  • Loading branch information
tylerslaton authored Dec 7, 2023
2 parents 8a1644f + 6baddd3 commit cf5ba1d
Show file tree
Hide file tree
Showing 8 changed files with 54 additions and 32 deletions.
8 changes: 5 additions & 3 deletions pkg/apis/internal.acorn.io/v1/appinstance.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"strings"

corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

Expand Down Expand Up @@ -229,9 +230,10 @@ type AppStatusStaged struct {
}

type Defaults struct {
Volumes map[string]VolumeDefault `json:"volumes,omitempty"`
Memory map[string]*int64 `json:"memory,omitempty"`
Region string `json:"region,omitempty"`
VolumeSize *resource.Quantity `json:"volumeSize,omitempty"`
Volumes map[string]VolumeDefault `json:"volumes,omitempty"`
Memory map[string]*int64 `json:"memory,omitempty"`
Region string `json:"region,omitempty"`
}

type VolumeDefault struct {
Expand Down
5 changes: 5 additions & 0 deletions pkg/apis/internal.acorn.io/v1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 6 additions & 4 deletions pkg/controller/defaults/defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ func Calculate(req router.Request, resp router.Response) (err error) {
}
}()

// addVolumeClassDefaults should run everytime as the function itself will not overwrite any existing
// defaults. Effectively, this means that volume defaults only get set if they have not been set before.
if err = addVolumeClassDefaults(req.Ctx, req.Client, appInstance); err != nil {
return err
}

if appInstance.Generation != appInstance.Status.ObservedGeneration {
if err = calculate(req, appInstance); err != nil {
return err
Expand All @@ -49,10 +55,6 @@ func calculate(req router.Request, appInstance *internalv1.AppInstance) error {
return err
}

if err = addVolumeClassDefaults(req.Ctx, req.Client, appInstance); err != nil {
return err
}

if err = addDefaultMemory(req, cfg, appInstance); err != nil {
return err
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,12 @@ status:
appStatus: {}
columns: {}
conditions:
- error: true
message: 'cannot establish defaults because two defaults volume classes exist:
test-volume-class and test-volume-class-1'
observedGeneration: 1
reason: Success
status: "True"
success: true
reason: Error
status: "False"
type: defaults
defaults: {}
namespace: app-created-namespace
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ status:
volume: foo
volumes:
foo: {}
defaults:
region: local
conditions:
- error: true
message: 'cannot establish defaults because two defaults volume classes exist: test-volume-class and test-volume-class-1'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ status:
volume: foo
volumes:
foo: {}
defaults:
region: local
conditions:
- error: true
message: 'cannot establish defaults because two defaults volume classes exist: test-volume-class and test-volume-class-1'
Expand Down
44 changes: 27 additions & 17 deletions pkg/controller/defaults/volumeclass.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,28 +37,38 @@ func addVolumeClassDefaults(ctx context.Context, c kclient.Client, app *v1.AppIn
})

for name, vol := range app.Status.AppSpec.Volumes {
if _, alreadySet := app.Status.Defaults.Volumes[name]; alreadySet {
continue
}

volDefaults := app.Status.Defaults.Volumes[name]
vol = volume.CopyVolumeDefaults(vol, volumeBindings[name], volDefaults)

if vol.Class == "" && defaultVolumeClass != nil {
volDefaults.Class = defaultVolumeClass.Name
vol.Class = volDefaults.Class
}
if len(vol.AccessModes) == 0 {
volDefaults.AccessModes = volumeClasses[vol.Class].AllowedAccessModes
// This is a bit of a hack as we're migrating away from the VolumeSize field. Essentially,
// we want to ensure that app.Status.Volumes[name] always has a size set. If the VolumeSize
// field has been set in the past, we want to mirgrate that over to be set on app.Status.Volumes[name].
// There is another edge case where the Size field was set by a VolumeClass's default size. In this
// case we want to leave the Size field alone.
if app.Status.Defaults.VolumeSize != nil && volDefaults.Size == "" {
volDefaults.Size = v1.Quantity(app.Status.Defaults.VolumeSize.String())
}
if vol.Size == "" {
volDefaults.Size = volumeClasses[vol.Class].Size.Default
if volDefaults.Size == "" {
defaultSize, err := getDefaultVolumeSize(ctx, c)
if err != nil {
return err

// If the Volume already has defaults, skip these steps. We don't want to overwrite
// default class or access modes for volumes as it can lead to unexpected behavior when
// volume classes are updated.
if _, alreadySet := app.Status.Defaults.Volumes[name]; !alreadySet {
if vol.Class == "" && defaultVolumeClass != nil {
volDefaults.Class = defaultVolumeClass.Name
vol.Class = volDefaults.Class
}
if len(vol.AccessModes) == 0 {
volDefaults.AccessModes = volumeClasses[vol.Class].AllowedAccessModes
}
if vol.Size == "" {
volDefaults.Size = volumeClasses[vol.Class].Size.Default
if volDefaults.Size == "" {
defaultSize, err := getDefaultVolumeSize(ctx, c)
if err != nil {
return err
}
volDefaults.Size = defaultSize
}
volDefaults.Size = defaultSize
}
}

Expand Down
7 changes: 6 additions & 1 deletion pkg/openapi/generated/openapi_generated.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit cf5ba1d

Please sign in to comment.