From 251832a33c28af8ae69117bed1c6b99ffb756ab2 Mon Sep 17 00:00:00 2001 From: helayoty Date: Thu, 27 Nov 2025 01:48:52 +0000 Subject: [PATCH] Add union validation tags --- .../v1alpha1/zz_generated.validations.go | 14 ++++++++++++++ .../k8s.io/api/scheduling/v1alpha1/generated.proto | 2 ++ .../src/k8s.io/api/scheduling/v1alpha1/types.go | 10 ++++++++++ 3 files changed, 26 insertions(+) diff --git a/pkg/apis/scheduling/v1alpha1/zz_generated.validations.go b/pkg/apis/scheduling/v1alpha1/zz_generated.validations.go index a6728ff21c8..74ea669090d 100644 --- a/pkg/apis/scheduling/v1alpha1/zz_generated.validations.go +++ b/pkg/apis/scheduling/v1alpha1/zz_generated.validations.go @@ -122,9 +122,23 @@ func Validate_PodGroup(ctx context.Context, op operation.Operation, fldPath *fie return errs } +var unionMembershipFor_k8s_io_api_scheduling_v1alpha1_PodGroupPolicy_ = validate.NewUnionMembership(validate.NewUnionMember("basic"), validate.NewUnionMember("gang")) + // Validate_PodGroupPolicy validates an instance of PodGroupPolicy according // to declarative validation rules in the API schema. func Validate_PodGroupPolicy(ctx context.Context, op operation.Operation, fldPath *field.Path, obj, oldObj *schedulingv1alpha1.PodGroupPolicy) (errs field.ErrorList) { + errs = append(errs, validate.Union(ctx, op, fldPath, obj, oldObj, unionMembershipFor_k8s_io_api_scheduling_v1alpha1_PodGroupPolicy_, func(obj *schedulingv1alpha1.PodGroupPolicy) bool { + if obj == nil { + return false + } + return obj.Basic != nil + }, func(obj *schedulingv1alpha1.PodGroupPolicy) bool { + if obj == nil { + return false + } + return obj.Gang != nil + })...) + // field schedulingv1alpha1.PodGroupPolicy.Basic errs = append(errs, func(fldPath *field.Path, obj, oldObj *schedulingv1alpha1.BasicSchedulingPolicy, oldValueCorrelated bool) (errs field.ErrorList) { diff --git a/staging/src/k8s.io/api/scheduling/v1alpha1/generated.proto b/staging/src/k8s.io/api/scheduling/v1alpha1/generated.proto index 7f0e37d27e3..094622179ca 100644 --- a/staging/src/k8s.io/api/scheduling/v1alpha1/generated.proto +++ b/staging/src/k8s.io/api/scheduling/v1alpha1/generated.proto @@ -70,6 +70,7 @@ message PodGroupPolicy { // +optional // +k8s:optional // +oneOf=PolicySelection + // +k8s:unionMember(memberName: "PolicySelectionBasic") optional BasicSchedulingPolicy basic = 2; // Gang specifies that the pods in this group should be scheduled using @@ -78,6 +79,7 @@ message PodGroupPolicy { // +optional // +k8s:optional // +oneOf=PolicySelection + // +k8s:unionMember(memberName: "PolicySelectionGang") optional GangSchedulingPolicy gang = 3; } diff --git a/staging/src/k8s.io/api/scheduling/v1alpha1/types.go b/staging/src/k8s.io/api/scheduling/v1alpha1/types.go index 890542320af..44950a17de9 100644 --- a/staging/src/k8s.io/api/scheduling/v1alpha1/types.go +++ b/staging/src/k8s.io/api/scheduling/v1alpha1/types.go @@ -177,6 +177,14 @@ type PodGroup struct { Policy PodGroupPolicy `json:"policy" protobuf:"bytes,3,opt,name=policy"` } +// +k8s:unionDiscriminator +type PolicySelection string + +const ( + PolicySelectionBasic PolicySelection = "basic" + PolicySelectionGang PolicySelection = "gang" +) + // PodGroupPolicy defines the scheduling configuration for a PodGroup. type PodGroupPolicy struct { // Basic specifies that the pods in this group should be scheduled using @@ -185,6 +193,7 @@ type PodGroupPolicy struct { // +optional // +k8s:optional // +oneOf=PolicySelection + // +k8s:unionMember(memberName: "PolicySelectionBasic") Basic *BasicSchedulingPolicy `json:"basic,omitempty" protobuf:"bytes,2,opt,name=basic"` // Gang specifies that the pods in this group should be scheduled using @@ -193,6 +202,7 @@ type PodGroupPolicy struct { // +optional // +k8s:optional // +oneOf=PolicySelection + // +k8s:unionMember(memberName: "PolicySelectionGang") Gang *GangSchedulingPolicy `json:"gang,omitempty" protobuf:"bytes,3,opt,name=gang"` }