mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Fix pvc requests.storage validation
This commit is contained in:
		@@ -1014,26 +1014,37 @@ func ValidatePersistentVolumeStatusUpdate(newPv, oldPv *api.PersistentVolume) fi
 | 
				
			|||||||
	return allErrs
 | 
						return allErrs
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ValidatePersistentVolumeClaim validates a PersistentVolumeClaim
 | 
				
			||||||
func ValidatePersistentVolumeClaim(pvc *api.PersistentVolumeClaim) field.ErrorList {
 | 
					func ValidatePersistentVolumeClaim(pvc *api.PersistentVolumeClaim) field.ErrorList {
 | 
				
			||||||
	allErrs := ValidateObjectMeta(&pvc.ObjectMeta, true, ValidatePersistentVolumeName, field.NewPath("metadata"))
 | 
						allErrs := ValidateObjectMeta(&pvc.ObjectMeta, true, ValidatePersistentVolumeName, field.NewPath("metadata"))
 | 
				
			||||||
	specPath := field.NewPath("spec")
 | 
						allErrs = append(allErrs, ValidatePersistentVolumeClaimSpec(&pvc.Spec, field.NewPath("spec"))...)
 | 
				
			||||||
	if len(pvc.Spec.AccessModes) == 0 {
 | 
						return allErrs
 | 
				
			||||||
		allErrs = append(allErrs, field.Required(specPath.Child("accessModes"), "at least 1 accessMode is required"))
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ValidatePersistentVolumeClaimSpec validates a PersistentVolumeClaimSpec
 | 
				
			||||||
 | 
					func ValidatePersistentVolumeClaimSpec(spec *api.PersistentVolumeClaimSpec, fldPath *field.Path) field.ErrorList {
 | 
				
			||||||
 | 
						allErrs := field.ErrorList{}
 | 
				
			||||||
 | 
						if len(spec.AccessModes) == 0 {
 | 
				
			||||||
 | 
							allErrs = append(allErrs, field.Required(fldPath.Child("accessModes"), "at least 1 access mode is required"))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if pvc.Spec.Selector != nil {
 | 
						if spec.Selector != nil {
 | 
				
			||||||
		allErrs = append(allErrs, unversionedvalidation.ValidateLabelSelector(pvc.Spec.Selector, specPath.Child("selector"))...)
 | 
							allErrs = append(allErrs, unversionedvalidation.ValidateLabelSelector(spec.Selector, fldPath.Child("selector"))...)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for _, mode := range pvc.Spec.AccessModes {
 | 
						for _, mode := range spec.AccessModes {
 | 
				
			||||||
		if mode != api.ReadWriteOnce && mode != api.ReadOnlyMany && mode != api.ReadWriteMany {
 | 
							if mode != api.ReadWriteOnce && mode != api.ReadOnlyMany && mode != api.ReadWriteMany {
 | 
				
			||||||
			allErrs = append(allErrs, field.NotSupported(specPath.Child("accessModes"), mode, supportedAccessModes.List()))
 | 
								allErrs = append(allErrs, field.NotSupported(fldPath.Child("accessModes"), mode, supportedAccessModes.List()))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if _, ok := pvc.Spec.Resources.Requests[api.ResourceStorage]; !ok {
 | 
						storageValue, ok := spec.Resources.Requests[api.ResourceStorage]
 | 
				
			||||||
		allErrs = append(allErrs, field.Required(specPath.Child("resources").Key(string(api.ResourceStorage)), ""))
 | 
						if !ok {
 | 
				
			||||||
 | 
							allErrs = append(allErrs, field.Required(fldPath.Child("resources").Key(string(api.ResourceStorage)), ""))
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							allErrs = append(allErrs, ValidateResourceQuantityValue(string(api.ResourceStorage), storageValue, fldPath.Child("resources").Key(string(api.ResourceStorage)))...)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return allErrs
 | 
						return allErrs
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ValidatePersistentVolumeClaimUpdate validates an update to a PeristentVolumeClaim
 | 
				
			||||||
func ValidatePersistentVolumeClaimUpdate(newPvc, oldPvc *api.PersistentVolumeClaim) field.ErrorList {
 | 
					func ValidatePersistentVolumeClaimUpdate(newPvc, oldPvc *api.PersistentVolumeClaim) field.ErrorList {
 | 
				
			||||||
	allErrs := ValidateObjectMetaUpdate(&newPvc.ObjectMeta, &oldPvc.ObjectMeta, field.NewPath("metadata"))
 | 
						allErrs := ValidateObjectMetaUpdate(&newPvc.ObjectMeta, &oldPvc.ObjectMeta, field.NewPath("metadata"))
 | 
				
			||||||
	allErrs = append(allErrs, ValidatePersistentVolumeClaim(newPvc)...)
 | 
						allErrs = append(allErrs, ValidatePersistentVolumeClaim(newPvc)...)
 | 
				
			||||||
@@ -1054,6 +1065,7 @@ func ValidatePersistentVolumeClaimUpdate(newPvc, oldPvc *api.PersistentVolumeCla
 | 
				
			|||||||
	return allErrs
 | 
						return allErrs
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ValidatePersistentVolumeClaimStatusUpdate validates an update to status of a PeristentVolumeClaim
 | 
				
			||||||
func ValidatePersistentVolumeClaimStatusUpdate(newPvc, oldPvc *api.PersistentVolumeClaim) field.ErrorList {
 | 
					func ValidatePersistentVolumeClaimStatusUpdate(newPvc, oldPvc *api.PersistentVolumeClaim) field.ErrorList {
 | 
				
			||||||
	allErrs := ValidateObjectMetaUpdate(&newPvc.ObjectMeta, &oldPvc.ObjectMeta, field.NewPath("metadata"))
 | 
						allErrs := ValidateObjectMetaUpdate(&newPvc.ObjectMeta, &oldPvc.ObjectMeta, field.NewPath("metadata"))
 | 
				
			||||||
	if len(newPvc.ResourceVersion) == 0 {
 | 
						if len(newPvc.ResourceVersion) == 0 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -675,6 +675,28 @@ func TestValidatePersistentVolumeClaim(t *testing.T) {
 | 
				
			|||||||
				},
 | 
									},
 | 
				
			||||||
			}),
 | 
								}),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							"negative-storage-request": {
 | 
				
			||||||
 | 
								isExpectedFailure: true,
 | 
				
			||||||
 | 
								claim: testVolumeClaim("foo", "ns", api.PersistentVolumeClaimSpec{
 | 
				
			||||||
 | 
									Selector: &unversioned.LabelSelector{
 | 
				
			||||||
 | 
										MatchExpressions: []unversioned.LabelSelectorRequirement{
 | 
				
			||||||
 | 
											{
 | 
				
			||||||
 | 
												Key:      "key2",
 | 
				
			||||||
 | 
												Operator: "Exists",
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									AccessModes: []api.PersistentVolumeAccessMode{
 | 
				
			||||||
 | 
										api.ReadWriteOnce,
 | 
				
			||||||
 | 
										api.ReadOnlyMany,
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									Resources: api.ResourceRequirements{
 | 
				
			||||||
 | 
										Requests: api.ResourceList{
 | 
				
			||||||
 | 
											api.ResourceName(api.ResourceStorage): resource.MustParse("-10G"),
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								}),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for name, scenario := range scenarios {
 | 
						for name, scenario := range scenarios {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user