diff --git a/pkg/api/validation/validation.go b/pkg/api/validation/validation.go index 3def9883072..ea84cb1b0f0 100644 --- a/pkg/api/validation/validation.go +++ b/pkg/api/validation/validation.go @@ -3047,11 +3047,8 @@ func ValidateLimitRange(limitRange *api.LimitRange) field.ErrorList { if limit.Type == api.LimitTypePersistentVolumeClaim { _, minQuantityFound := limit.Min[api.ResourceStorage] _, maxQuantityFound := limit.Max[api.ResourceStorage] - if !minQuantityFound { - allErrs = append(allErrs, field.Required(idxPath.Child("min"), "minimum storage value is required")) - } - if !maxQuantityFound { - allErrs = append(allErrs, field.Required(idxPath.Child("max"), "maximum storage value is required")) + if !minQuantityFound && !maxQuantityFound { + allErrs = append(allErrs, field.Required(idxPath.Child("limits"), "either minimum or maximum storage value is required, but neither was provided")) } } diff --git a/pkg/api/validation/validation_test.go b/pkg/api/validation/validation_test.go index 1c270bd529b..e91ee13d64f 100644 --- a/pkg/api/validation/validation_test.go +++ b/pkg/api/validation/validation_test.go @@ -7069,6 +7069,28 @@ func TestValidateLimitRange(t *testing.T) { }, }, }, + { + name: "pvc-min-only", + spec: api.LimitRangeSpec{ + Limits: []api.LimitRangeItem{ + { + Type: api.LimitTypePersistentVolumeClaim, + Min: getStorageResourceList("5Gi"), + }, + }, + }, + }, + { + name: "pvc-max-only", + spec: api.LimitRangeSpec{ + Limits: []api.LimitRangeItem{ + { + Type: api.LimitTypePersistentVolumeClaim, + Max: getStorageResourceList("10Gi"), + }, + }, + }, + }, { name: "all-fields-valid-big-numbers", spec: api.LimitRangeSpec{ @@ -7276,27 +7298,15 @@ func TestValidateLimitRange(t *testing.T) { }}, "must be a standard limit type or fully qualified", }, - "invalid missing required min field": { + "min and max values missing, one required": { api.LimitRange{ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: api.LimitRangeSpec{ Limits: []api.LimitRangeItem{ { Type: api.LimitTypePersistentVolumeClaim, - Max: getStorageResourceList("10000T"), }, }, }}, - "minimum storage value is required", - }, - "invalid missing required max field": { - api.LimitRange{ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: api.LimitRangeSpec{ - Limits: []api.LimitRangeItem{ - { - Type: api.LimitTypePersistentVolumeClaim, - Min: getStorageResourceList("10000T"), - }, - }, - }}, - "maximum storage value is required", + "either minimum or maximum storage value is required, but neither was provided", }, "invalid min greater than max": { api.LimitRange{ObjectMeta: api.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: api.LimitRangeSpec{