Skip to content

Commit a18b4a8

Browse files
authored
Merge pull request kubernetes#129158 from LionelJouin/fix-128831
Fix ResourceClaim status API inconsistency
2 parents e8ed011 + 5f4d646 commit a18b4a8

23 files changed

+438
-345
lines changed

api/openapi-spec/swagger.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/openapi-spec/v3/apis__resource.k8s.io__v1alpha3_openapi.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/openapi-spec/v3/apis__resource.k8s.io__v1beta1_openapi.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/apis/resource/fuzzer/fuzzer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ var Funcs = func(codecs runtimeserializer.CodecFactory) []interface{} {
6262
//
6363
// This is necessary because randomly generated content
6464
// might be valid JSON which changes during re-encoding.
65-
r.Data = runtime.RawExtension{Raw: []byte(`{"apiVersion":"unknown.group/unknown","kind":"Something","someKey":"someValue"}`)}
65+
r.Data = &runtime.RawExtension{Raw: []byte(`{"apiVersion":"unknown.group/unknown","kind":"Something","someKey":"someValue"}`)}
6666
},
6767
}
6868
}

pkg/apis/resource/types.go

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -993,6 +993,24 @@ type ResourceClaimTemplateList struct {
993993
Items []ResourceClaimTemplate
994994
}
995995

996+
const (
997+
// AllocatedDeviceStatusMaxConditions represents the maximum number of
998+
// conditions in a device status.
999+
AllocatedDeviceStatusMaxConditions int = 8
1000+
// AllocatedDeviceStatusDataMaxLength represents the maximum length of the
1001+
// raw data in the Data field in a device status.
1002+
AllocatedDeviceStatusDataMaxLength int = 10 * 1024
1003+
// NetworkDeviceDataMaxIPs represents the maximum number of IPs in the networkData
1004+
// field in a device status.
1005+
NetworkDeviceDataMaxIPs int = 16
1006+
// NetworkDeviceDataInterfaceNameMaxLength represents the maximum number of characters
1007+
// for the networkData.interfaceName field in a device status.
1008+
NetworkDeviceDataInterfaceNameMaxLength int = 256
1009+
// NetworkDeviceDataHardwareAddressMaxLength represents the maximum number of characters
1010+
// for the networkData.hardwareAddress field in a device status.
1011+
NetworkDeviceDataHardwareAddressMaxLength int = 128
1012+
)
1013+
9961014
// AllocatedDeviceStatus contains the status of an allocated device, if the
9971015
// driver chooses to report it. This may include driver-specific information.
9981016
type AllocatedDeviceStatus struct {
@@ -1037,7 +1055,7 @@ type AllocatedDeviceStatus struct {
10371055
// The length of the raw data must be smaller or equal to 10 Ki.
10381056
//
10391057
// +optional
1040-
Data runtime.RawExtension
1058+
Data *runtime.RawExtension
10411059

10421060
// NetworkData contains network-related information specific to the device.
10431061
//

pkg/apis/resource/v1alpha3/zz_generated.conversion.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/apis/resource/v1beta1/zz_generated.conversion.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/apis/resource/validation/validation.go

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ func validateDeviceConfiguration(config resource.DeviceConfiguration, fldPath *f
256256
func validateOpaqueConfiguration(config resource.OpaqueDeviceConfiguration, fldPath *field.Path, stored bool) field.ErrorList {
257257
var allErrs field.ErrorList
258258
allErrs = append(allErrs, validateDriverName(config.Driver, fldPath.Child("driver"))...)
259-
allErrs = append(allErrs, validateRawExtension(config.Parameters, fldPath.Child("parameters"), stored)...)
259+
allErrs = append(allErrs, validateRawExtension(config.Parameters, fldPath.Child("parameters"), stored, resource.OpaqueParametersMaxLength)...)
260260
return allErrs
261261
}
262262

@@ -748,29 +748,29 @@ func validateDeviceStatus(device resource.AllocatedDeviceStatus, fldPath *field.
748748
if !allocatedDevices.Has(deviceID) {
749749
allErrs = append(allErrs, field.Invalid(fldPath, deviceID, "must be an allocated device in the claim"))
750750
}
751-
if len(device.Conditions) > maxConditions {
752-
allErrs = append(allErrs, field.TooMany(fldPath.Child("conditions"), len(device.Conditions), maxConditions))
751+
if len(device.Conditions) > resource.AllocatedDeviceStatusMaxConditions {
752+
allErrs = append(allErrs, field.TooMany(fldPath.Child("conditions"), len(device.Conditions), resource.AllocatedDeviceStatusMaxConditions))
753753
}
754754
allErrs = append(allErrs, metav1validation.ValidateConditions(device.Conditions, fldPath.Child("conditions"))...)
755-
if len(device.Data.Raw) > 0 { // Data is an optional field.
756-
allErrs = append(allErrs, validateRawExtension(device.Data, fldPath.Child("data"), false)...)
755+
if device.Data != nil && len(device.Data.Raw) > 0 { // Data is an optional field.
756+
allErrs = append(allErrs, validateRawExtension(*device.Data, fldPath.Child("data"), false, resource.AllocatedDeviceStatusDataMaxLength)...)
757757
}
758758
allErrs = append(allErrs, validateNetworkDeviceData(device.NetworkData, fldPath.Child("networkData"))...)
759759
return allErrs
760760
}
761761

762762
// validateRawExtension validates RawExtension as in https://github.com/kubernetes/kubernetes/pull/125549/
763-
func validateRawExtension(rawExtension runtime.RawExtension, fldPath *field.Path, stored bool) field.ErrorList {
763+
func validateRawExtension(rawExtension runtime.RawExtension, fldPath *field.Path, stored bool, rawExtensionMaxLength int) field.ErrorList {
764764
var allErrs field.ErrorList
765765
var v any
766766
if len(rawExtension.Raw) == 0 {
767767
allErrs = append(allErrs, field.Required(fldPath, ""))
768-
} else if !stored && len(rawExtension.Raw) > resource.OpaqueParametersMaxLength {
768+
} else if !stored && len(rawExtension.Raw) > rawExtensionMaxLength {
769769
// Don't even bother with parsing when too large.
770770
// Only applies on create. Existing parameters are grand-fathered in
771771
// because the limit was introduced in 1.32. This also means that it
772772
// can be changed in the future.
773-
allErrs = append(allErrs, field.TooLong(fldPath, "" /* unused */, resource.OpaqueParametersMaxLength))
773+
allErrs = append(allErrs, field.TooLong(fldPath, "" /* unused */, rawExtensionMaxLength))
774774
} else if err := json.Unmarshal(rawExtension.Raw, &v); err != nil {
775775
allErrs = append(allErrs, field.Invalid(fldPath, "<value omitted>", fmt.Sprintf("error parsing data as JSON: %v", err.Error())))
776776
} else if v == nil {
@@ -781,26 +781,21 @@ func validateRawExtension(rawExtension runtime.RawExtension, fldPath *field.Path
781781
return allErrs
782782
}
783783

784-
const maxConditions int = 8
785-
const maxIPs int = 16
786-
const interfaceNameMaxLength int = 256
787-
const hardwareAddressMaxLength int = 128
788-
789784
func validateNetworkDeviceData(networkDeviceData *resource.NetworkDeviceData, fldPath *field.Path) field.ErrorList {
790785
var allErrs field.ErrorList
791786
if networkDeviceData == nil {
792787
return allErrs
793788
}
794789

795-
if len(networkDeviceData.InterfaceName) > interfaceNameMaxLength {
796-
allErrs = append(allErrs, field.TooLong(fldPath.Child("interfaceName"), "" /* unused */, interfaceNameMaxLength))
790+
if len(networkDeviceData.InterfaceName) > resource.NetworkDeviceDataInterfaceNameMaxLength {
791+
allErrs = append(allErrs, field.TooLong(fldPath.Child("interfaceName"), "" /* unused */, resource.NetworkDeviceDataInterfaceNameMaxLength))
797792
}
798793

799-
if len(networkDeviceData.HardwareAddress) > hardwareAddressMaxLength {
800-
allErrs = append(allErrs, field.TooLong(fldPath.Child("hardwareAddress"), "" /* unused */, hardwareAddressMaxLength))
794+
if len(networkDeviceData.HardwareAddress) > resource.NetworkDeviceDataHardwareAddressMaxLength {
795+
allErrs = append(allErrs, field.TooLong(fldPath.Child("hardwareAddress"), "" /* unused */, resource.NetworkDeviceDataHardwareAddressMaxLength))
801796
}
802797

803-
allErrs = append(allErrs, validateSet(networkDeviceData.IPs, maxIPs,
798+
allErrs = append(allErrs, validateSet(networkDeviceData.IPs, resource.NetworkDeviceDataMaxIPs,
804799
func(address string, fldPath *field.Path) field.ErrorList {
805800
// reformat CIDR to handle different ways IPs can be written
806801
// (e.g. 2001:db8::1/64 == 2001:0db8::1/64)

0 commit comments

Comments
 (0)