@@ -256,7 +256,7 @@ func validateDeviceConfiguration(config resource.DeviceConfiguration, fldPath *f
256
256
func validateOpaqueConfiguration (config resource.OpaqueDeviceConfiguration , fldPath * field.Path , stored bool ) field.ErrorList {
257
257
var allErrs field.ErrorList
258
258
allErrs = append (allErrs , validateDriverName (config .Driver , fldPath .Child ("driver" ))... )
259
- allErrs = append (allErrs , validateRawExtension (config .Parameters , fldPath .Child ("parameters" ))... )
259
+ allErrs = append (allErrs , validateRawExtension (config .Parameters , fldPath .Child ("parameters" ), stored )... )
260
260
return allErrs
261
261
}
262
262
@@ -750,18 +750,24 @@ func validateDeviceStatus(device resource.AllocatedDeviceStatus, fldPath *field.
750
750
}
751
751
allErrs = append (allErrs , metav1validation .ValidateConditions (device .Conditions , fldPath .Child ("conditions" ))... )
752
752
if len (device .Data .Raw ) > 0 { // Data is an optional field.
753
- allErrs = append (allErrs , validateRawExtension (device .Data , fldPath .Child ("data" ))... )
753
+ allErrs = append (allErrs , validateRawExtension (device .Data , fldPath .Child ("data" ), false )... )
754
754
}
755
755
allErrs = append (allErrs , validateNetworkDeviceData (device .NetworkData , fldPath .Child ("networkData" ))... )
756
756
return allErrs
757
757
}
758
758
759
759
// validateRawExtension validates RawExtension as in https://github.com/kubernetes/kubernetes/pull/125549/
760
- func validateRawExtension (rawExtension runtime.RawExtension , fldPath * field.Path ) field.ErrorList {
760
+ func validateRawExtension (rawExtension runtime.RawExtension , fldPath * field.Path , stored bool ) field.ErrorList {
761
761
var allErrs field.ErrorList
762
762
var v any
763
763
if len (rawExtension .Raw ) == 0 {
764
764
allErrs = append (allErrs , field .Required (fldPath , "" ))
765
+ } else if ! stored && len (rawExtension .Raw ) > resource .OpaqueParametersMaxLength {
766
+ // Don't even bother with parsing when too large.
767
+ // Only applies on create. Existing parameters are grand-fathered in
768
+ // because the limit was introduced in 1.32. This also means that it
769
+ // can be changed in the future.
770
+ allErrs = append (allErrs , field .TooLong (fldPath , "" /* unused */ , resource .OpaqueParametersMaxLength ))
765
771
} else if err := json .Unmarshal (rawExtension .Raw , & v ); err != nil {
766
772
allErrs = append (allErrs , field .Invalid (fldPath , "<value omitted>" , fmt .Sprintf ("error parsing data as JSON: %v" , err .Error ())))
767
773
} else if v == nil {
0 commit comments