From cbcd376b2b7c7b07e6985ccf13f3d518e5d0d129 Mon Sep 17 00:00:00 2001 From: Brandon Date: Sat, 26 Feb 2022 16:21:58 -0600 Subject: [PATCH] break up errors --- .../aws/apis/v1alpha1/provider_validation.go | 61 +++++++++++++------ 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/pkg/cloudprovider/aws/apis/v1alpha1/provider_validation.go b/pkg/cloudprovider/aws/apis/v1alpha1/provider_validation.go index cb1b58d8106e..e1edc0d002c9 100644 --- a/pkg/cloudprovider/aws/apis/v1alpha1/provider_validation.go +++ b/pkg/cloudprovider/aws/apis/v1alpha1/provider_validation.go @@ -176,27 +176,52 @@ func (a *AWS) validateStringEnum(value, field string, validValues []string) *api } func (a *AWS) validateBlockDeviceMappings() (errs *apis.FieldError) { - if a.BlockDeviceMappings == nil { - return nil - } for i, blockDeviceMapping := range a.BlockDeviceMappings { - if blockDeviceMapping.DeviceName == nil { - errs = errs.Also(apis.ErrMissingField(fmt.Sprintf("%s[%d].deviceName", blockDeviceMappingsPath, i))) - } - if blockDeviceMapping.EBS == nil { - errs = errs.Also(apis.ErrMissingField(fmt.Sprintf("%s[%d].ebs", blockDeviceMappingsPath, i))) - continue + if err := a.validateBlockDeviceMapping(blockDeviceMapping); err != nil { + errs = errs.Also(err.ViaFieldIndex(blockDeviceMappingsPath, i)) } - if blockDeviceMapping.EBS.VolumeType != nil { - if fieldErr := a.validateStringEnum(*blockDeviceMapping.EBS.VolumeType, fmt.Sprintf("%s[%d].ebs.volumeType", blockDeviceMappingsPath, i), ec2.VolumeType_Values()); fieldErr != nil { - errs = errs.Also(fieldErr) - } - } - if blockDeviceMapping.EBS.VolumeSize == nil { - errs = errs.Also(apis.ErrMissingField(fmt.Sprintf("%s[%d].ebs.volumeSize", blockDeviceMappingsPath, i))) - } else if blockDeviceMapping.EBS.VolumeSize.Cmp(minVolumeSize) == -1 || blockDeviceMapping.EBS.VolumeSize.Cmp(maxVolumeSize) == 1 { - errs = errs.Also(apis.ErrOutOfBoundsValue(blockDeviceMapping.EBS.VolumeSize.String(), minVolumeSize.String(), maxVolumeSize.String(), fmt.Sprintf("%s[%d].ebs.volumeSize", blockDeviceMappingsPath, i))) + } + return errs +} + +func (a *AWS) validateBlockDeviceMapping(blockDeviceMapping *BlockDeviceMapping) (errs *apis.FieldError) { + return errs.Also(a.validateDeviceName(blockDeviceMapping), a.validateEBS(blockDeviceMapping)) +} + +func (a *AWS) validateDeviceName(blockDeviceMapping *BlockDeviceMapping) (err *apis.FieldError) { + if blockDeviceMapping.DeviceName == nil { + return apis.ErrMissingField("deviceName") + } + return nil +} + +func (a *AWS) validateEBS(blockDeviceMapping *BlockDeviceMapping) (errs *apis.FieldError) { + if blockDeviceMapping.EBS == nil { + return apis.ErrMissingField("ebs") + } + for _, err := range []*apis.FieldError{ + a.validateVolumeType(blockDeviceMapping), + a.validateVolumeSize(blockDeviceMapping), + } { + if err != nil { + errs = errs.Also(err.ViaField("ebs")) } } return errs } + +func (a *AWS) validateVolumeType(blockDeviceMapping *BlockDeviceMapping) (err *apis.FieldError) { + if blockDeviceMapping.EBS.VolumeType != nil { + return a.validateStringEnum(*blockDeviceMapping.EBS.VolumeType, "volumeType", ec2.VolumeType_Values()) + } + return nil +} + +func (a *AWS) validateVolumeSize(blockDeviceMapping *BlockDeviceMapping) (err *apis.FieldError) { + if blockDeviceMapping.EBS.VolumeSize == nil { + return apis.ErrMissingField("volumeSize") + } else if blockDeviceMapping.EBS.VolumeSize.Cmp(minVolumeSize) == -1 || blockDeviceMapping.EBS.VolumeSize.Cmp(maxVolumeSize) == 1 { + return apis.ErrOutOfBoundsValue(blockDeviceMapping.EBS.VolumeSize.String(), minVolumeSize.String(), maxVolumeSize.String(), "volumeSize") + } + return nil +}