Skip to content

Commit 28e0c3b

Browse files
author
Kubernetes Submit Queue
authored
Merge pull request kubernetes#55164 from NickrenREN/validation-not-zero
Automatic merge from submit-queue (batch tested with PRs 49258, 55164). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Make sure that storage request of pvc is not zero I do not know whether we should add the checking zero logic to `ValidateResourceQuantityValue`. But at lease we should do this when validate PVC. If PVC requests 0Gi storage,it does not make sense to provision that volume. Volume plugins will not check whether the request of PVC is 0 when they run `CreateVolume` or `CreateImage` called by `Provision()` **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes kubernetes#55163 **Special notes for your reviewer**: **Release note**: ```release-note NONE ```
2 parents 91615e4 + 3a22b5f commit 28e0c3b

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

pkg/apis/core/validation/validation.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ const isNegativeErrorMsg string = apimachineryvalidation.IsNegativeErrorMsg
6262
const isInvalidQuotaResource string = `must be a standard resource for quota`
6363
const fieldImmutableErrorMsg string = genericvalidation.FieldImmutableErrorMsg
6464
const isNotIntegerErrorMsg string = `must be an integer`
65+
const isZeroErrorMsg string = `must be greater than zero`
6566

6667
var pdPartitionErrorMsg string = validation.InclusiveRangeError(1, 255)
6768
var volumeModeErrorMsg string = "must be a number between 0 and 0777 (octal), both inclusive"
@@ -1601,6 +1602,9 @@ func ValidatePersistentVolumeClaimSpec(spec *core.PersistentVolumeClaimSpec, fld
16011602
allErrs = append(allErrs, field.Required(fldPath.Child("resources").Key(string(core.ResourceStorage)), ""))
16021603
} else {
16031604
allErrs = append(allErrs, ValidateResourceQuantityValue(string(core.ResourceStorage), storageValue, fldPath.Child("resources").Key(string(core.ResourceStorage)))...)
1605+
if storageValue.Value() == int64(0) {
1606+
allErrs = append(allErrs, field.Invalid(fldPath, storageValue, isZeroErrorMsg))
1607+
}
16041608
}
16051609

16061610
if spec.StorageClassName != nil && len(*spec.StorageClassName) > 0 {

pkg/apis/core/validation/validation_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -833,6 +833,28 @@ func TestValidatePersistentVolumeClaim(t *testing.T) {
833833
},
834834
}),
835835
},
836+
"zero-storage-request": {
837+
isExpectedFailure: true,
838+
claim: testVolumeClaim("foo", "ns", core.PersistentVolumeClaimSpec{
839+
Selector: &metav1.LabelSelector{
840+
MatchExpressions: []metav1.LabelSelectorRequirement{
841+
{
842+
Key: "key2",
843+
Operator: "Exists",
844+
},
845+
},
846+
},
847+
AccessModes: []core.PersistentVolumeAccessMode{
848+
core.ReadWriteOnce,
849+
core.ReadOnlyMany,
850+
},
851+
Resources: core.ResourceRequirements{
852+
Requests: core.ResourceList{
853+
core.ResourceName(api.ResourceStorage): resource.MustParse("0G"),
854+
},
855+
},
856+
}),
857+
},
836858
"invalid-storage-class-name": {
837859
isExpectedFailure: true,
838860
claim: testVolumeClaim("foo", "ns", core.PersistentVolumeClaimSpec{

0 commit comments

Comments
 (0)