From ed932547cf5f6e85ba9582ee36bf52a4dc5d4d3d Mon Sep 17 00:00:00 2001 From: yongruilin Date: Thu, 9 Oct 2025 07:36:04 +0000 Subject: [PATCH] feat: migrate DeviceClaimConfiguration.Requests to declarative validation --- pkg/apis/resource/v1/zz_generated.validations.go | 2 ++ pkg/apis/resource/v1beta1/zz_generated.validations.go | 2 ++ pkg/apis/resource/v1beta2/zz_generated.validations.go | 2 ++ pkg/apis/resource/validation/validation.go | 2 +- staging/src/k8s.io/api/resource/v1/generated.proto | 2 ++ staging/src/k8s.io/api/resource/v1/types.go | 2 ++ staging/src/k8s.io/api/resource/v1beta1/generated.proto | 2 ++ staging/src/k8s.io/api/resource/v1beta1/types.go | 2 ++ staging/src/k8s.io/api/resource/v1beta2/generated.proto | 2 ++ staging/src/k8s.io/api/resource/v1beta2/types.go | 2 ++ 10 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pkg/apis/resource/v1/zz_generated.validations.go b/pkg/apis/resource/v1/zz_generated.validations.go index d0436ebd817..22bedc1a7a3 100644 --- a/pkg/apis/resource/v1/zz_generated.validations.go +++ b/pkg/apis/resource/v1/zz_generated.validations.go @@ -290,6 +290,8 @@ func Validate_DeviceClaimConfiguration(ctx context.Context, op operation.Operati if earlyReturn { return // do not proceed } + // lists with set semantics require unique values + errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) return }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1.DeviceClaimConfiguration) []string { return oldObj.Requests }))...) diff --git a/pkg/apis/resource/v1beta1/zz_generated.validations.go b/pkg/apis/resource/v1beta1/zz_generated.validations.go index 5db60ba7e2e..ba6b0839b2f 100644 --- a/pkg/apis/resource/v1beta1/zz_generated.validations.go +++ b/pkg/apis/resource/v1beta1/zz_generated.validations.go @@ -296,6 +296,8 @@ func Validate_DeviceClaimConfiguration(ctx context.Context, op operation.Operati if earlyReturn { return // do not proceed } + // lists with set semantics require unique values + errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) return }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1beta1.DeviceClaimConfiguration) []string { return oldObj.Requests }))...) diff --git a/pkg/apis/resource/v1beta2/zz_generated.validations.go b/pkg/apis/resource/v1beta2/zz_generated.validations.go index b966ae0251e..e8a98e8e77c 100644 --- a/pkg/apis/resource/v1beta2/zz_generated.validations.go +++ b/pkg/apis/resource/v1beta2/zz_generated.validations.go @@ -296,6 +296,8 @@ func Validate_DeviceClaimConfiguration(ctx context.Context, op operation.Operati if earlyReturn { return // do not proceed } + // lists with set semantics require unique values + errs = append(errs, validate.Unique(ctx, op, fldPath, obj, oldObj, validate.DirectEqual)...) return }(fldPath.Child("requests"), obj.Requests, safe.Field(oldObj, func(oldObj *resourcev1beta2.DeviceClaimConfiguration) []string { return oldObj.Requests }))...) diff --git a/pkg/apis/resource/validation/validation.go b/pkg/apis/resource/validation/validation.go index 2021ecc9270..ecdeee04299 100644 --- a/pkg/apis/resource/validation/validation.go +++ b/pkg/apis/resource/validation/validation.go @@ -353,7 +353,7 @@ func validateDeviceClaimConfiguration(config resource.DeviceClaimConfiguration, allErrs = append(allErrs, validateSet(config.Requests, resource.DeviceRequestsMaxSize, func(name string, fldPath *field.Path) field.ErrorList { return validateRequestNameRef(name, fldPath, requestNames) - }, stringKey, fldPath.Child("requests"), sizeCovered)...) + }, stringKey, fldPath.Child("requests"), sizeCovered, uniquenessCovered)...) allErrs = append(allErrs, validateDeviceConfiguration(config.DeviceConfiguration, fldPath, stored)...) return allErrs } diff --git a/staging/src/k8s.io/api/resource/v1/generated.proto b/staging/src/k8s.io/api/resource/v1/generated.proto index 303ee53372e..5273a1e069a 100644 --- a/staging/src/k8s.io/api/resource/v1/generated.proto +++ b/staging/src/k8s.io/api/resource/v1/generated.proto @@ -597,6 +597,8 @@ message DeviceClaimConfiguration { // // +optional // +listType=atomic + // +k8s:listType=atomic + // +k8s:unique=set // +k8s:maxItems=32 repeated string requests = 1; diff --git a/staging/src/k8s.io/api/resource/v1/types.go b/staging/src/k8s.io/api/resource/v1/types.go index d6fe0bd9834..7018f9e8468 100644 --- a/staging/src/k8s.io/api/resource/v1/types.go +++ b/staging/src/k8s.io/api/resource/v1/types.go @@ -1261,6 +1261,8 @@ type DeviceClaimConfiguration struct { // // +optional // +listType=atomic + // +k8s:listType=atomic + // +k8s:unique=set // +k8s:maxItems=32 Requests []string `json:"requests,omitempty" protobuf:"bytes,1,opt,name=requests"` diff --git a/staging/src/k8s.io/api/resource/v1beta1/generated.proto b/staging/src/k8s.io/api/resource/v1beta1/generated.proto index 81bf235dba7..8e746003d92 100644 --- a/staging/src/k8s.io/api/resource/v1beta1/generated.proto +++ b/staging/src/k8s.io/api/resource/v1beta1/generated.proto @@ -605,6 +605,8 @@ message DeviceClaimConfiguration { // // +optional // +listType=atomic + // +k8s:listType=atomic + // +k8s:unique=set // +k8s:maxItems=32 repeated string requests = 1; diff --git a/staging/src/k8s.io/api/resource/v1beta1/types.go b/staging/src/k8s.io/api/resource/v1beta1/types.go index 0764202a1a5..760c2ed41e0 100644 --- a/staging/src/k8s.io/api/resource/v1beta1/types.go +++ b/staging/src/k8s.io/api/resource/v1beta1/types.go @@ -1268,6 +1268,8 @@ type DeviceClaimConfiguration struct { // // +optional // +listType=atomic + // +k8s:listType=atomic + // +k8s:unique=set // +k8s:maxItems=32 Requests []string `json:"requests,omitempty" protobuf:"bytes,1,opt,name=requests"` diff --git a/staging/src/k8s.io/api/resource/v1beta2/generated.proto b/staging/src/k8s.io/api/resource/v1beta2/generated.proto index 8e395e441a4..255e663258d 100644 --- a/staging/src/k8s.io/api/resource/v1beta2/generated.proto +++ b/staging/src/k8s.io/api/resource/v1beta2/generated.proto @@ -597,6 +597,8 @@ message DeviceClaimConfiguration { // // +optional // +listType=atomic + // +k8s:listType=atomic + // +k8s:unique=set // +k8s:maxItems=32 repeated string requests = 1; diff --git a/staging/src/k8s.io/api/resource/v1beta2/types.go b/staging/src/k8s.io/api/resource/v1beta2/types.go index a9395f5e0e6..49707e476fb 100644 --- a/staging/src/k8s.io/api/resource/v1beta2/types.go +++ b/staging/src/k8s.io/api/resource/v1beta2/types.go @@ -1261,6 +1261,8 @@ type DeviceClaimConfiguration struct { // // +optional // +listType=atomic + // +k8s:listType=atomic + // +k8s:unique=set // +k8s:maxItems=32 Requests []string `json:"requests,omitempty" protobuf:"bytes,1,opt,name=requests"`