Skip to content

Commit 0556b20

Browse files
authored
Merge pull request kubernetes#129435 from googs1025/dra/validation
chore: add more error info for validateResourceSliceSpec
2 parents 75633d0 + f540197 commit 0556b20

File tree

2 files changed

+12
-12
lines changed

2 files changed

+12
-12
lines changed

pkg/apis/resource/validation/validation.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -383,14 +383,14 @@ func validateAllocationConfigSource(source resource.AllocationConfigSource, fldP
383383
return allErrs
384384
}
385385

386-
// ValidateClass validates a DeviceClass.
386+
// ValidateDeviceClass validates a DeviceClass.
387387
func ValidateDeviceClass(class *resource.DeviceClass) field.ErrorList {
388388
allErrs := corevalidation.ValidateObjectMeta(&class.ObjectMeta, false, corevalidation.ValidateClassName, field.NewPath("metadata"))
389389
allErrs = append(allErrs, validateDeviceClassSpec(&class.Spec, nil, field.NewPath("spec"))...)
390390
return allErrs
391391
}
392392

393-
// ValidateClassUpdate tests if an update to DeviceClass is valid.
393+
// ValidateDeviceClassUpdate tests if an update to DeviceClass is valid.
394394
func ValidateDeviceClassUpdate(class, oldClass *resource.DeviceClass) field.ErrorList {
395395
allErrs := corevalidation.ValidateObjectMetaUpdate(&class.ObjectMeta, &oldClass.ObjectMeta, field.NewPath("metadata"))
396396
allErrs = append(allErrs, validateDeviceClassSpec(&class.Spec, &oldClass.Spec, field.NewPath("spec"))...)
@@ -466,7 +466,7 @@ func ValidateResourceSlice(slice *resource.ResourceSlice) field.ErrorList {
466466
return allErrs
467467
}
468468

469-
// ValidateResourceSlice tests if a ResourceSlice update is valid.
469+
// ValidateResourceSliceUpdate tests if a ResourceSlice update is valid.
470470
func ValidateResourceSliceUpdate(resourceSlice, oldResourceSlice *resource.ResourceSlice) field.ErrorList {
471471
allErrs := corevalidation.ValidateObjectMetaUpdate(&resourceSlice.ObjectMeta, &oldResourceSlice.ObjectMeta, field.NewPath("metadata"))
472472
allErrs = append(allErrs, validateResourceSliceSpec(&resourceSlice.Spec, &oldResourceSlice.Spec, field.NewPath("spec"))...)
@@ -483,13 +483,13 @@ func validateResourceSliceSpec(spec, oldSpec *resource.ResourceSliceSpec, fldPat
483483
allErrs = append(allErrs, apimachineryvalidation.ValidateImmutableField(spec.NodeName, oldSpec.NodeName, fldPath.Child("nodeName"))...)
484484
}
485485

486-
numNodeSelectionFields := 0
486+
setFields := make([]string, 0, 3)
487487
if spec.NodeName != "" {
488-
numNodeSelectionFields++
488+
setFields = append(setFields, "`nodeName`")
489489
allErrs = append(allErrs, validateNodeName(spec.NodeName, fldPath.Child("nodeName"))...)
490490
}
491491
if spec.NodeSelector != nil {
492-
numNodeSelectionFields++
492+
setFields = append(setFields, "`nodeSelector`")
493493
allErrs = append(allErrs, corevalidation.ValidateNodeSelector(spec.NodeSelector, false, fldPath.Child("nodeSelector"))...)
494494
if len(spec.NodeSelector.NodeSelectorTerms) != 1 {
495495
// This additional constraint simplifies merging of different selectors
@@ -498,14 +498,15 @@ func validateResourceSliceSpec(spec, oldSpec *resource.ResourceSliceSpec, fldPat
498498
}
499499
}
500500
if spec.AllNodes {
501-
numNodeSelectionFields++
501+
setFields = append(setFields, "`allNodes`")
502502
}
503-
switch numNodeSelectionFields {
503+
switch len(setFields) {
504504
case 0:
505505
allErrs = append(allErrs, field.Required(fldPath, "exactly one of `nodeName`, `nodeSelector`, or `allNodes` is required"))
506506
case 1:
507507
default:
508-
allErrs = append(allErrs, field.Invalid(fldPath, nil, "exactly one of `nodeName`, `nodeSelector`, or `allNodes` is required"))
508+
allErrs = append(allErrs, field.Invalid(fldPath, fmt.Sprintf("{%s}", strings.Join(setFields, ", ")),
509+
"exactly one of `nodeName`, `nodeSelector`, or `allNodes` is required, but multiple fields are set"))
509510
}
510511

511512
allErrs = append(allErrs, validateSet(spec.Devices, resource.ResourceSliceMaxDevices, validateDevice,
@@ -569,7 +570,6 @@ var (
569570

570571
// optional dot-separated build identifier segments (e.g. +build.id.20240305)
571572
`(\+` + buildIdentifier + `(\.` + buildIdentifier + `)*)?` +
572-
573573
`$`)
574574
)
575575

pkg/apis/resource/validation/validation_resourceslice_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ func TestValidateResourceSlice(t *testing.T) {
273273
}(),
274274
},
275275
"bad-node-selection": {
276-
wantFailures: field.ErrorList{field.Invalid(field.NewPath("spec"), nil, "exactly one of `nodeName`, `nodeSelector`, or `allNodes` is required")},
276+
wantFailures: field.ErrorList{field.Invalid(field.NewPath("spec"), "{`nodeName`, `nodeSelector`}", "exactly one of `nodeName`, `nodeSelector`, or `allNodes` is required, but multiple fields are set")},
277277
slice: func() *resourceapi.ResourceSlice {
278278
slice := testResourceSlice(goodName, goodName, driverName, 1)
279279
slice.Spec.NodeName = "worker"
@@ -284,7 +284,7 @@ func TestValidateResourceSlice(t *testing.T) {
284284
}(),
285285
},
286286
"bad-node-selection-all-nodes": {
287-
wantFailures: field.ErrorList{field.Invalid(field.NewPath("spec"), nil, "exactly one of `nodeName`, `nodeSelector`, or `allNodes` is required")},
287+
wantFailures: field.ErrorList{field.Invalid(field.NewPath("spec"), "{`nodeName`, `allNodes`}", "exactly one of `nodeName`, `nodeSelector`, or `allNodes` is required, but multiple fields are set")},
288288
slice: func() *resourceapi.ResourceSlice {
289289
slice := testResourceSlice(goodName, goodName, driverName, 1)
290290
slice.Spec.NodeName = "worker"

0 commit comments

Comments
 (0)