From 4419568259590c35f1dab69aabec3d740944a51d Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Tue, 29 Oct 2024 09:42:08 +0100 Subject: [PATCH] DRA: treat AdminAccess as a new feature gated field Using the "normal" logic for a feature gated field simplifies the implementation of the feature gate. There is one (entirely theoretic!) problem with updating from 1.31: if a claim was allocated in 1.31 with admin access, the status field was not set because it didn't exist yet. If a driver now follows the current definition of "unset = off", then it will not grant admin access even though it should. This is theoretic because drivers are starting to support admin access with 1.32, so there shouldn't be any claim where this problem could occur. --- api/openapi-spec/swagger.json | 7 +- ...is__resource.k8s.io__v1alpha3_openapi.json | 8 +- pkg/apis/resource/types.go | 22 +- .../v1alpha3/zz_generated.conversion.go | 4 +- pkg/apis/resource/validation/validation.go | 5 - .../validation_resourceclaim_test.go | 21 -- pkg/apis/resource/zz_generated.deepcopy.go | 5 + pkg/controller/resourceclaim/controller.go | 2 +- pkg/generated/openapi/zz_generated.openapi.go | 7 +- .../v1/evaluator/core/resource_claims_test.go | 3 +- .../resource/resourceclaim/strategy.go | 25 +- .../resource/resourceclaim/strategy_test.go | 8 +- .../resourceclaimtemplate/strategy.go | 18 +- .../resourceclaimtemplate/strategy_test.go | 3 +- .../dynamicresources/dynamicresources_test.go | 11 +- .../api/resource/v1alpha3/generated.pb.go | 257 +++++++++--------- .../api/resource/v1alpha3/generated.proto | 20 +- .../src/k8s.io/api/resource/v1alpha3/types.go | 22 +- .../v1alpha3/types_swagger_doc_generated.go | 4 +- .../v1alpha3/zz_generated.deepcopy.go | 5 + .../applyconfigurations/internal/internal.go | 1 - .../structured/allocator.go | 18 +- .../structured/allocator_test.go | 8 +- test/e2e/dra/dra.go | 8 +- 24 files changed, 247 insertions(+), 245 deletions(-) diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 04b472fd717..5f47fe88d65 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -15524,7 +15524,7 @@ "description": "DeviceRequest is a request for devices required for a claim. This is typically a request for a single resource like a device, but can also ask for several identical devices.\n\nA DeviceClassName is currently required. Clients must check that it is indeed set. It's absence indicates that something changed in a way that is not supported by the client yet, in which case it must refuse to handle the request.", "properties": { "adminAccess": { - "description": "AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate.", + "description": "AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.", "type": "boolean" }, "allocationMode": { @@ -15563,7 +15563,7 @@ "description": "DeviceRequestAllocationResult contains the allocation result for one request.", "properties": { "adminAccess": { - "description": "AdminAccess is a copy of the AdminAccess value in the request which caused this device to be allocated.\n\nNew allocations are required to have this set when the DRAAdminAccess feature gate is enabled. Old allocations made by Kubernetes 1.31 do not have it yet. Clients which want to support Kubernetes 1.31 need to look up the request and retrieve the value from there if this field is not set.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate.", + "description": "AdminAccess indicates that this device was allocated for administrative access. See the corresponding request field for a definition of mode.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.", "type": "boolean" }, "device": { @@ -15587,8 +15587,7 @@ "request", "driver", "pool", - "device", - "adminAccess" + "device" ], "type": "object" }, diff --git a/api/openapi-spec/v3/apis__resource.k8s.io__v1alpha3_openapi.json b/api/openapi-spec/v3/apis__resource.k8s.io__v1alpha3_openapi.json index 4db2ca0845d..fec9b5a7e80 100644 --- a/api/openapi-spec/v3/apis__resource.k8s.io__v1alpha3_openapi.json +++ b/api/openapi-spec/v3/apis__resource.k8s.io__v1alpha3_openapi.json @@ -480,8 +480,7 @@ "description": "DeviceRequest is a request for devices required for a claim. This is typically a request for a single resource like a device, but can also ask for several identical devices.\n\nA DeviceClassName is currently required. Clients must check that it is indeed set. It's absence indicates that something changed in a way that is not supported by the client yet, in which case it must refuse to handle the request.", "properties": { "adminAccess": { - "default": false, - "description": "AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate.", + "description": "AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.", "type": "boolean" }, "allocationMode": { @@ -527,7 +526,7 @@ "description": "DeviceRequestAllocationResult contains the allocation result for one request.", "properties": { "adminAccess": { - "description": "AdminAccess is a copy of the AdminAccess value in the request which caused this device to be allocated.\n\nNew allocations are required to have this set when the DRAAdminAccess feature gate is enabled. Old allocations made by Kubernetes 1.31 do not have it yet. Clients which want to support Kubernetes 1.31 need to look up the request and retrieve the value from there if this field is not set.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate.", + "description": "AdminAccess indicates that this device was allocated for administrative access. See the corresponding request field for a definition of mode.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.", "type": "boolean" }, "device": { @@ -555,8 +554,7 @@ "request", "driver", "pool", - "device", - "adminAccess" + "device" ], "type": "object" }, diff --git a/pkg/apis/resource/types.go b/pkg/apis/resource/types.go index f95fe318b81..279aebac721 100644 --- a/pkg/apis/resource/types.go +++ b/pkg/apis/resource/types.go @@ -443,12 +443,12 @@ type DeviceRequest struct { // any resource allocations. // // This is an alpha field and requires enabling the DRAAdminAccess - // feature gate. + // feature gate. Admin access is disabled if this field is unset or + // set to false, otherwise it is enabled. // // +optional - // +default=false // +featureGate=DRAAdminAccess - AdminAccess bool + AdminAccess *bool } const ( @@ -787,19 +787,15 @@ type DeviceRequestAllocationResult struct { // +required Device string - // AdminAccess is a copy of the AdminAccess value in the - // request which caused this device to be allocated. - // - // New allocations are required to have this set when the DRAAdminAccess - // feature gate is enabled. Old allocations made - // by Kubernetes 1.31 do not have it yet. Clients which want to - // support Kubernetes 1.31 need to look up the request and retrieve - // the value from there if this field is not set. + // AdminAccess indicates that this device was allocated for + // administrative access. See the corresponding request field + // for a definition of mode. // // This is an alpha field and requires enabling the DRAAdminAccess - // feature gate. + // feature gate. Admin access is disabled if this field is unset or + // set to false, otherwise it is enabled. // - // +required + // +optional // +featureGate=DRAAdminAccess AdminAccess *bool } diff --git a/pkg/apis/resource/v1alpha3/zz_generated.conversion.go b/pkg/apis/resource/v1alpha3/zz_generated.conversion.go index cd43bd14793..0c54c8e00bb 100644 --- a/pkg/apis/resource/v1alpha3/zz_generated.conversion.go +++ b/pkg/apis/resource/v1alpha3/zz_generated.conversion.go @@ -712,7 +712,7 @@ func autoConvert_v1alpha3_DeviceRequest_To_resource_DeviceRequest(in *resourcev1 out.Selectors = *(*[]resource.DeviceSelector)(unsafe.Pointer(&in.Selectors)) out.AllocationMode = resource.DeviceAllocationMode(in.AllocationMode) out.Count = in.Count - out.AdminAccess = in.AdminAccess + out.AdminAccess = (*bool)(unsafe.Pointer(in.AdminAccess)) return nil } @@ -727,7 +727,7 @@ func autoConvert_resource_DeviceRequest_To_v1alpha3_DeviceRequest(in *resource.D out.Selectors = *(*[]resourcev1alpha3.DeviceSelector)(unsafe.Pointer(&in.Selectors)) out.AllocationMode = resourcev1alpha3.DeviceAllocationMode(in.AllocationMode) out.Count = in.Count - out.AdminAccess = in.AdminAccess + out.AdminAccess = (*bool)(unsafe.Pointer(in.AdminAccess)) return nil } diff --git a/pkg/apis/resource/validation/validation.go b/pkg/apis/resource/validation/validation.go index 4384697e592..d451f3912c8 100644 --- a/pkg/apis/resource/validation/validation.go +++ b/pkg/apis/resource/validation/validation.go @@ -32,11 +32,9 @@ import ( "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apiserver/pkg/cel" "k8s.io/apiserver/pkg/cel/environment" - utilfeature "k8s.io/apiserver/pkg/util/feature" dracel "k8s.io/dynamic-resource-allocation/cel" corevalidation "k8s.io/kubernetes/pkg/apis/core/validation" "k8s.io/kubernetes/pkg/apis/resource" - "k8s.io/kubernetes/pkg/features" ) var ( @@ -345,9 +343,6 @@ func validateDeviceRequestAllocationResult(result resource.DeviceRequestAllocati allErrs = append(allErrs, validateDriverName(result.Driver, fldPath.Child("driver"))...) allErrs = append(allErrs, validatePoolName(result.Pool, fldPath.Child("pool"))...) allErrs = append(allErrs, validateDeviceName(result.Device, fldPath.Child("device"))...) - if result.AdminAccess == nil && utilfeature.DefaultFeatureGate.Enabled(features.DRAAdminAccess) { - allErrs = append(allErrs, field.Required(fldPath.Child("adminAccess"), "")) - } return allErrs } diff --git a/pkg/apis/resource/validation/validation_resourceclaim_test.go b/pkg/apis/resource/validation/validation_resourceclaim_test.go index 3a2d6c9a943..516fa6f9dfc 100644 --- a/pkg/apis/resource/validation/validation_resourceclaim_test.go +++ b/pkg/apis/resource/validation/validation_resourceclaim_test.go @@ -478,27 +478,6 @@ func TestValidateClaimStatusUpdate(t *testing.T) { return claim }, }, - "invalid-add-allocation-missing-admin-access": { - adminAccess: true, - wantFailures: field.ErrorList{ - field.Required(field.NewPath("status", "allocation", "devices", "results").Index(0).Child("adminAccess"), ""), - }, - oldClaim: validClaim, - update: func(claim *resource.ResourceClaim) *resource.ResourceClaim { - claim.Status.Allocation = &resource.AllocationResult{ - Devices: resource.DeviceAllocationResult{ - Results: []resource.DeviceRequestAllocationResult{{ - Request: goodName, - Driver: goodName, - Pool: goodName, - Device: goodName, - AdminAccess: nil, // Intentionally not set. - }}, - }, - } - return claim - }, - }, "okay-add-allocation-missing-admin-access": { adminAccess: false, oldClaim: validClaim, diff --git a/pkg/apis/resource/zz_generated.deepcopy.go b/pkg/apis/resource/zz_generated.deepcopy.go index 0e3ec71422d..5eb864e4227 100644 --- a/pkg/apis/resource/zz_generated.deepcopy.go +++ b/pkg/apis/resource/zz_generated.deepcopy.go @@ -427,6 +427,11 @@ func (in *DeviceRequest) DeepCopyInto(out *DeviceRequest) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.AdminAccess != nil { + in, out := &in.AdminAccess, &out.AdminAccess + *out = new(bool) + **out = **in + } return } diff --git a/pkg/controller/resourceclaim/controller.go b/pkg/controller/resourceclaim/controller.go index 68021ff592f..acfdbc679b0 100644 --- a/pkg/controller/resourceclaim/controller.go +++ b/pkg/controller/resourceclaim/controller.go @@ -681,7 +681,7 @@ func (ec *Controller) handleClaim(ctx context.Context, pod *v1.Pod, podClaim v1. func needsAdminAccess(claimTemplate *resourceapi.ResourceClaimTemplate) bool { for _, request := range claimTemplate.Spec.Spec.Devices.Requests { - if request.AdminAccess { + if ptr.Deref(request.AdminAccess, false) { return true } } diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index 7e354083425..41e0b0fa592 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -46504,8 +46504,7 @@ func schema_k8sio_api_resource_v1alpha3_DeviceRequest(ref common.ReferenceCallba }, "adminAccess": { SchemaProps: spec.SchemaProps{ - Description: "AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate.", - Default: false, + Description: "AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.", Type: []string{"boolean"}, Format: "", }, @@ -46560,13 +46559,13 @@ func schema_k8sio_api_resource_v1alpha3_DeviceRequestAllocationResult(ref common }, "adminAccess": { SchemaProps: spec.SchemaProps{ - Description: "AdminAccess is a copy of the AdminAccess value in the request which caused this device to be allocated.\n\nNew allocations are required to have this set when the DRAAdminAccess feature gate is enabled. Old allocations made by Kubernetes 1.31 do not have it yet. Clients which want to support Kubernetes 1.31 need to look up the request and retrieve the value from there if this field is not set.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate.", + Description: "AdminAccess indicates that this device was allocated for administrative access. See the corresponding request field for a definition of mode.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.", Type: []string{"boolean"}, Format: "", }, }, }, - Required: []string{"request", "driver", "pool", "device", "adminAccess"}, + Required: []string{"request", "driver", "pool", "device"}, }, }, } diff --git a/pkg/quota/v1/evaluator/core/resource_claims_test.go b/pkg/quota/v1/evaluator/core/resource_claims_test.go index 2f1b59c913e..244dbb2c28e 100644 --- a/pkg/quota/v1/evaluator/core/resource_claims_test.go +++ b/pkg/quota/v1/evaluator/core/resource_claims_test.go @@ -25,6 +25,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" api "k8s.io/kubernetes/pkg/apis/resource" + "k8s.io/utils/ptr" ) func testResourceClaim(name string, namespace string, spec api.ResourceClaimSpec) *api.ResourceClaim { @@ -101,7 +102,7 @@ func TestResourceClaimEvaluatorUsage(t *testing.T) { claim: func() *api.ResourceClaim { claim := validClaim.DeepCopy() // Admins are *not* exempt from quota. - claim.Spec.Devices.Requests[0].AdminAccess = true + claim.Spec.Devices.Requests[0].AdminAccess = ptr.To(true) return claim }(), usage: corev1.ResourceList{ diff --git a/pkg/registry/resource/resourceclaim/strategy.go b/pkg/registry/resource/resourceclaim/strategy.go index bf735987021..1aa2f47e918 100644 --- a/pkg/registry/resource/resourceclaim/strategy.go +++ b/pkg/registry/resource/resourceclaim/strategy.go @@ -184,8 +184,8 @@ func dropDisabledDRAAdminAccessFields(newClaim, oldClaim *resource.ResourceClaim } for i := range newClaim.Spec.Devices.Requests { - if oldClaim == nil || i >= len(oldClaim.Spec.Devices.Requests) || !oldClaim.Spec.Devices.Requests[i].AdminAccess { - newClaim.Spec.Devices.Requests[i].AdminAccess = false + if newClaim.Spec.Devices.Requests[i].AdminAccess != nil && !draAdminAccessFeatureInUse(oldClaim) { + newClaim.Spec.Devices.Requests[i].AdminAccess = nil } } @@ -193,19 +193,30 @@ func dropDisabledDRAAdminAccessFields(newClaim, oldClaim *resource.ResourceClaim return } for i := range newClaim.Status.Allocation.Devices.Results { - if newClaim.Status.Allocation.Devices.Results[i].AdminAccess != nil && - (oldClaim == nil || oldClaim.Status.Allocation == nil || i >= len(oldClaim.Status.Allocation.Devices.Results) || oldClaim.Status.Allocation.Devices.Results[i].AdminAccess == nil) && - !requestHasAdminAccess(newClaim, newClaim.Status.Allocation.Devices.Results[i].Request) { + if newClaim.Status.Allocation.Devices.Results[i].AdminAccess != nil && !draAdminAccessFeatureInUse(oldClaim) { newClaim.Status.Allocation.Devices.Results[i].AdminAccess = nil } } } -func requestHasAdminAccess(claim *resource.ResourceClaim, requestName string) bool { +func draAdminAccessFeatureInUse(claim *resource.ResourceClaim) bool { + if claim == nil { + return false + } + for _, request := range claim.Spec.Devices.Requests { - if request.Name == requestName && request.AdminAccess { + if request.AdminAccess != nil { return true } } + + if allocation := claim.Status.Allocation; allocation != nil { + for _, result := range allocation.Devices.Results { + if result.AdminAccess != nil { + return true + } + } + } + return false } diff --git a/pkg/registry/resource/resourceclaim/strategy_test.go b/pkg/registry/resource/resourceclaim/strategy_test.go index 437b6ab2060..3c43558d18f 100644 --- a/pkg/registry/resource/resourceclaim/strategy_test.go +++ b/pkg/registry/resource/resourceclaim/strategy_test.go @@ -92,7 +92,7 @@ var objWithAdminAccess = &resource.ResourceClaim{ Name: "req-0", DeviceClassName: "class", AllocationMode: resource.DeviceAllocationModeAll, - AdminAccess: true, + AdminAccess: ptr.To(true), }, }, }, @@ -111,7 +111,7 @@ var objWithAdminAccessStatus = &resource.ResourceClaim{ Name: "req-0", DeviceClassName: "class", AllocationMode: resource.DeviceAllocationModeAll, - AdminAccess: true, + AdminAccess: ptr.To(true), }, }, }, @@ -336,14 +336,14 @@ func TestStatusStrategyUpdate(t *testing.T) { "keep-fields-admin-access-because-of-status": { oldObj: func() *resource.ResourceClaim { oldObj := objWithAdminAccessStatus.DeepCopy() - oldObj.Spec.Devices.Requests[0].AdminAccess = false + oldObj.Spec.Devices.Requests[0].AdminAccess = ptr.To(false) return oldObj }(), newObj: objWithAdminAccessStatus, adminAccess: false, expectObj: func() *resource.ResourceClaim { oldObj := objWithAdminAccessStatus.DeepCopy() - oldObj.Spec.Devices.Requests[0].AdminAccess = false + oldObj.Spec.Devices.Requests[0].AdminAccess = ptr.To(false) return oldObj }(), }, diff --git a/pkg/registry/resource/resourceclaimtemplate/strategy.go b/pkg/registry/resource/resourceclaimtemplate/strategy.go index 0f32c15bfad..7f43c79919e 100644 --- a/pkg/registry/resource/resourceclaimtemplate/strategy.go +++ b/pkg/registry/resource/resourceclaimtemplate/strategy.go @@ -110,8 +110,22 @@ func dropDisabledDRAAdminAccessFields(newClaimTemplate, oldClaimTemplate *resour } for i := range newClaimTemplate.Spec.Spec.Devices.Requests { - if oldClaimTemplate == nil || i >= len(oldClaimTemplate.Spec.Spec.Devices.Requests) || !oldClaimTemplate.Spec.Spec.Devices.Requests[i].AdminAccess { - newClaimTemplate.Spec.Spec.Devices.Requests[i].AdminAccess = false + if newClaimTemplate.Spec.Spec.Devices.Requests[i].AdminAccess != nil && !draAdminAccessFeatureInUse(oldClaimTemplate) { + newClaimTemplate.Spec.Spec.Devices.Requests[i].AdminAccess = nil } } } + +func draAdminAccessFeatureInUse(claimTemplate *resource.ResourceClaimTemplate) bool { + if claimTemplate == nil { + return false + } + + for _, request := range claimTemplate.Spec.Spec.Devices.Requests { + if request.AdminAccess != nil { + return true + } + } + + return false +} diff --git a/pkg/registry/resource/resourceclaimtemplate/strategy_test.go b/pkg/registry/resource/resourceclaimtemplate/strategy_test.go index b07ec648669..b48f78d7bee 100644 --- a/pkg/registry/resource/resourceclaimtemplate/strategy_test.go +++ b/pkg/registry/resource/resourceclaimtemplate/strategy_test.go @@ -27,6 +27,7 @@ import ( featuregatetesting "k8s.io/component-base/featuregate/testing" "k8s.io/kubernetes/pkg/apis/resource" "k8s.io/kubernetes/pkg/features" + "k8s.io/utils/ptr" ) var obj = &resource.ResourceClaimTemplate{ @@ -62,7 +63,7 @@ var objWithAdminAccess = &resource.ResourceClaimTemplate{ Name: "req-0", DeviceClassName: "class", AllocationMode: resource.DeviceAllocationModeAll, - AdminAccess: true, + AdminAccess: ptr.To(true), }, }, }, diff --git a/pkg/scheduler/framework/plugins/dynamicresources/dynamicresources_test.go b/pkg/scheduler/framework/plugins/dynamicresources/dynamicresources_test.go index e03a93877c4..2b5e73a5fc8 100644 --- a/pkg/scheduler/framework/plugins/dynamicresources/dynamicresources_test.go +++ b/pkg/scheduler/framework/plugins/dynamicresources/dynamicresources_test.go @@ -135,11 +135,10 @@ var ( allocationResult = &resourceapi.AllocationResult{ Devices: resourceapi.DeviceAllocationResult{ Results: []resourceapi.DeviceRequestAllocationResult{{ - Driver: driver, - Pool: nodeName, - Device: "instance-1", - Request: "req-1", - AdminAccess: ptr.To(false), + Driver: driver, + Pool: nodeName, + Device: "instance-1", + Request: "req-1", }}, }, NodeSelector: func() *v1.NodeSelector { @@ -182,7 +181,7 @@ func reserve(claim *resourceapi.ResourceClaim, pod *v1.Pod) *resourceapi.Resourc func adminAccess(claim *resourceapi.ResourceClaim) *resourceapi.ResourceClaim { claim = claim.DeepCopy() for i := range claim.Spec.Devices.Requests { - claim.Spec.Devices.Requests[i].AdminAccess = true + claim.Spec.Devices.Requests[i].AdminAccess = ptr.To(true) } if claim.Status.Allocation != nil { for i := range claim.Status.Allocation.Devices.Results { diff --git a/staging/src/k8s.io/api/resource/v1alpha3/generated.pb.go b/staging/src/k8s.io/api/resource/v1alpha3/generated.pb.go index 2b2c654c90e..c9d4bae7976 100644 --- a/staging/src/k8s.io/api/resource/v1alpha3/generated.pb.go +++ b/staging/src/k8s.io/api/resource/v1alpha3/generated.pb.go @@ -957,122 +957,122 @@ func init() { } var fileDescriptor_66649ee9bbcd89d2 = []byte{ - // 1840 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x19, 0xcd, 0x6f, 0xe4, 0x56, - 0x3d, 0x8e, 0x33, 0x93, 0xe4, 0x37, 0xf9, 0xda, 0xb7, 0x50, 0xb2, 0xa1, 0xcc, 0xec, 0xba, 0x08, - 0xb2, 0xed, 0xd6, 0xd3, 0xdd, 0x96, 0xb6, 0x50, 0x0e, 0xc4, 0x49, 0xba, 0xca, 0x6a, 0x3f, 0xb2, - 0x2f, 0xed, 0x8a, 0x85, 0x52, 0x78, 0xf1, 0xbc, 0x4c, 0x4c, 0x3c, 0xb6, 0xeb, 0xf7, 0x3c, 0x34, - 0x17, 0x54, 0x71, 0xe1, 0xb6, 0xe2, 0x1f, 0x40, 0xdc, 0x90, 0x38, 0xc1, 0x7f, 0x00, 0x12, 0x48, - 0xac, 0xc4, 0x65, 0x25, 0x38, 0xf4, 0x34, 0x74, 0x07, 0x71, 0xe1, 0xc2, 0x3d, 0x27, 0xe4, 0xe7, - 0xe7, 0xcf, 0x19, 0xcf, 0x7a, 0xaa, 0x12, 0xb5, 0xb7, 0xf1, 0xef, 0xfb, 0xfb, 0xf7, 0xb3, 0x07, - 0xae, 0x9d, 0xbc, 0xc9, 0x74, 0xcb, 0x6d, 0x13, 0xcf, 0x6a, 0xfb, 0x94, 0xb9, 0x81, 0x6f, 0xd2, - 0x76, 0xff, 0x3a, 0xb1, 0xbd, 0x63, 0xf2, 0x6a, 0xbb, 0x4b, 0x1d, 0xea, 0x13, 0x4e, 0x3b, 0xba, - 0xe7, 0xbb, 0xdc, 0x45, 0xcf, 0x47, 0xd4, 0x3a, 0xf1, 0x2c, 0x3d, 0xa6, 0xd6, 0x63, 0xea, 0x8d, - 0x97, 0xbb, 0x16, 0x3f, 0x0e, 0x0e, 0x75, 0xd3, 0xed, 0xb5, 0xbb, 0x6e, 0xd7, 0x6d, 0x0b, 0xa6, - 0xc3, 0xe0, 0x48, 0x3c, 0x89, 0x07, 0xf1, 0x2b, 0x12, 0xb6, 0xa1, 0x65, 0x54, 0x9b, 0xae, 0x1f, - 0xaa, 0x2d, 0x2a, 0xdc, 0x78, 0x2d, 0xa5, 0xe9, 0x11, 0xf3, 0xd8, 0x72, 0xa8, 0x7f, 0xda, 0xf6, - 0x4e, 0xba, 0x79, 0x7b, 0xa7, 0xe1, 0x62, 0xed, 0x1e, 0xe5, 0x64, 0x9c, 0xae, 0x76, 0x19, 0x97, - 0x1f, 0x38, 0xdc, 0xea, 0x8d, 0xaa, 0x79, 0xfd, 0x59, 0x0c, 0xcc, 0x3c, 0xa6, 0x3d, 0x52, 0xe4, - 0xd3, 0xfe, 0xa6, 0xc0, 0xda, 0x96, 0x6d, 0xbb, 0x26, 0xe1, 0x96, 0xeb, 0x60, 0xca, 0x02, 0x9b, - 0xa3, 0x1f, 0xc3, 0x7c, 0x87, 0xf6, 0x2d, 0x93, 0xb2, 0x75, 0xe5, 0xb2, 0xb2, 0xd9, 0xb8, 0xf1, - 0x9a, 0x3e, 0x29, 0xd8, 0xfa, 0x8e, 0x20, 0x2e, 0x8a, 0x31, 0x56, 0x1f, 0x0f, 0x5a, 0x33, 0xc3, - 0x41, 0x6b, 0x3e, 0xc2, 0x33, 0x1c, 0x4b, 0x45, 0x0f, 0x60, 0xc9, 0x71, 0x3b, 0xf4, 0x80, 0xda, - 0xd4, 0xe4, 0xae, 0xbf, 0xae, 0x0a, 0x2d, 0x97, 0xb3, 0x5a, 0xc2, 0x2c, 0xe8, 0xfd, 0xeb, 0xfa, - 0xdd, 0x0c, 0x9d, 0xb1, 0x36, 0x1c, 0xb4, 0x96, 0xb2, 0x10, 0x9c, 0x93, 0xa3, 0x7d, 0xa2, 0x42, - 0xc3, 0x20, 0xcc, 0x32, 0x23, 0x8d, 0xe8, 0xe7, 0x00, 0x84, 0x73, 0xdf, 0x3a, 0x0c, 0xb8, 0xf0, - 0x45, 0xdd, 0x6c, 0xdc, 0xf8, 0xf6, 0x64, 0x5f, 0x32, 0xec, 0xfa, 0x56, 0xc2, 0xbb, 0xeb, 0x70, - 0xff, 0xd4, 0x78, 0x41, 0x3a, 0x04, 0x29, 0xe2, 0x17, 0xff, 0x6c, 0x2d, 0xdf, 0x0f, 0x88, 0x6d, - 0x1d, 0x59, 0xb4, 0x73, 0x97, 0xf4, 0x28, 0xce, 0x68, 0x44, 0x7d, 0x58, 0x30, 0x89, 0x47, 0x4c, - 0x8b, 0x9f, 0xae, 0xcf, 0x0a, 0xed, 0x6f, 0x54, 0xd7, 0xbe, 0x2d, 0x39, 0x23, 0xdd, 0x57, 0xa4, - 0xee, 0x85, 0x18, 0x3c, 0xaa, 0x39, 0xd1, 0xb5, 0x61, 0xc3, 0x6a, 0xc1, 0x76, 0xb4, 0x06, 0xea, - 0x09, 0x3d, 0x15, 0xf9, 0x5c, 0xc4, 0xe1, 0x4f, 0xb4, 0x0d, 0xb5, 0x3e, 0xb1, 0x03, 0xba, 0x3e, - 0x2b, 0xa2, 0xff, 0x72, 0xa5, 0x1c, 0xc7, 0x52, 0x71, 0xc4, 0xfb, 0x9d, 0xd9, 0x37, 0x95, 0x8d, - 0x13, 0x58, 0xce, 0xd9, 0x3a, 0x46, 0xd7, 0x4e, 0x5e, 0x97, 0x9e, 0xd1, 0x95, 0x94, 0xab, 0xee, - 0x9d, 0x74, 0xf3, 0xca, 0xef, 0x07, 0xc4, 0xe1, 0x16, 0x3f, 0xcd, 0x28, 0xd3, 0x6e, 0xc2, 0x85, - 0xed, 0xdd, 0xdb, 0x91, 0x35, 0x71, 0xde, 0xd1, 0x0d, 0x00, 0xfa, 0xa1, 0xe7, 0x53, 0xc6, 0x2c, - 0xd7, 0x89, 0xf4, 0x1a, 0x28, 0x4e, 0xd6, 0x6e, 0x82, 0xc1, 0x19, 0x2a, 0xad, 0x0f, 0x75, 0x59, - 0x25, 0x97, 0x61, 0xce, 0x21, 0x3d, 0x2a, 0xf9, 0x96, 0x24, 0xdf, 0x9c, 0x88, 0xa9, 0xc0, 0xa0, - 0x5b, 0x50, 0x3b, 0x0c, 0x33, 0x23, 0xcd, 0xbf, 0x5a, 0x39, 0x89, 0xc6, 0xe2, 0x70, 0xd0, 0xaa, - 0x09, 0x00, 0x8e, 0x44, 0x68, 0x8f, 0x66, 0xe1, 0x6b, 0xc5, 0x86, 0xd9, 0x76, 0x9d, 0x23, 0xab, - 0x1b, 0xf8, 0xe2, 0x01, 0x7d, 0x0f, 0xea, 0x91, 0x48, 0x69, 0xd1, 0xa6, 0xb4, 0xa8, 0x7e, 0x20, - 0xa0, 0x67, 0x83, 0xd6, 0x73, 0x45, 0xd6, 0x08, 0x83, 0x25, 0x1f, 0xda, 0x84, 0x05, 0x9f, 0x7e, - 0x10, 0x50, 0xc6, 0x99, 0xa8, 0xbb, 0x45, 0x63, 0x29, 0x2c, 0x1d, 0x2c, 0x61, 0x38, 0xc1, 0xa2, - 0x8f, 0x14, 0xb8, 0x18, 0x75, 0x65, 0xce, 0x06, 0xd9, 0x91, 0xd7, 0xab, 0xd4, 0x44, 0x8e, 0xd1, - 0xf8, 0xaa, 0x34, 0xf6, 0xe2, 0x18, 0x24, 0x1e, 0xa7, 0x4a, 0xfb, 0xb7, 0x02, 0xcf, 0x8d, 0x9f, - 0x20, 0xe8, 0x08, 0xe6, 0x7d, 0xf1, 0x2b, 0x6e, 0xde, 0xb7, 0xaa, 0x18, 0x24, 0xdd, 0x2c, 0x9f, - 0x47, 0xd1, 0x33, 0xc3, 0xb1, 0x70, 0x64, 0x42, 0xdd, 0x14, 0x36, 0xc9, 0x2e, 0x7d, 0x6b, 0xba, - 0x79, 0x97, 0x8f, 0xc0, 0x4a, 0x9c, 0xae, 0x08, 0x8c, 0xa5, 0x68, 0xed, 0x77, 0x0a, 0xac, 0x16, - 0xba, 0x08, 0x35, 0x41, 0xb5, 0x1c, 0x2e, 0xca, 0x4a, 0x8d, 0x72, 0xb4, 0xe7, 0xf0, 0x07, 0x61, - 0xb1, 0xe3, 0x10, 0x81, 0xae, 0xc0, 0xdc, 0xa1, 0xeb, 0xda, 0x22, 0x1d, 0x0b, 0xc6, 0xf2, 0x70, - 0xd0, 0x5a, 0x34, 0x5c, 0xd7, 0x8e, 0x28, 0x04, 0x0a, 0x7d, 0x13, 0xea, 0x8c, 0xfb, 0x96, 0xd3, - 0x5d, 0x9f, 0x13, 0xd5, 0xb2, 0x3a, 0x1c, 0xb4, 0x1a, 0x07, 0x02, 0x12, 0x91, 0x49, 0x34, 0x7a, - 0x11, 0xe6, 0xfb, 0xd4, 0x17, 0x1d, 0x52, 0x13, 0x94, 0x62, 0x9a, 0x3e, 0x88, 0x40, 0x11, 0x69, - 0x4c, 0xa0, 0xfd, 0x7e, 0x16, 0x1a, 0x32, 0x81, 0x36, 0xb1, 0x7a, 0xe8, 0x61, 0xa6, 0xa0, 0xa2, - 0x4c, 0xbc, 0x34, 0x45, 0x26, 0x8c, 0xb5, 0x78, 0x78, 0x8d, 0xa9, 0x40, 0x0a, 0x0d, 0xd3, 0x75, - 0x18, 0xf7, 0x89, 0xe5, 0xc8, 0x72, 0xcd, 0x0f, 0x88, 0x49, 0x85, 0x27, 0xd9, 0x8c, 0x8b, 0x52, - 0x41, 0x23, 0x85, 0x31, 0x9c, 0x95, 0x8b, 0xde, 0x4f, 0x52, 0xac, 0x0a, 0x0d, 0xaf, 0x57, 0xd2, - 0x10, 0x3a, 0x5f, 0x2d, 0xbb, 0x7f, 0x55, 0x60, 0xbd, 0x8c, 0x29, 0xd7, 0x8f, 0xca, 0xa7, 0xea, - 0xc7, 0xd9, 0xf3, 0xeb, 0xc7, 0x3f, 0x29, 0x99, 0xdc, 0x33, 0x86, 0x7e, 0x02, 0x0b, 0xe1, 0x99, - 0xd2, 0x21, 0x9c, 0xc8, 0x73, 0xe0, 0x95, 0x49, 0xe3, 0x9b, 0xe9, 0x21, 0x75, 0xb8, 0xba, 0xef, - 0x1d, 0xfe, 0x94, 0x9a, 0xfc, 0x0e, 0xe5, 0x24, 0x1d, 0xc6, 0x29, 0x0c, 0x27, 0x52, 0xd1, 0x3d, - 0x98, 0x63, 0x1e, 0x35, 0xa7, 0x59, 0x44, 0xc2, 0xb4, 0x03, 0x8f, 0x9a, 0xe9, 0xbc, 0x0e, 0x9f, - 0xb0, 0x10, 0xa4, 0xfd, 0x3a, 0x9b, 0x0c, 0xc6, 0xf2, 0xc9, 0x28, 0x0b, 0xb1, 0x72, 0x7e, 0x21, - 0xfe, 0x63, 0x32, 0x0a, 0x84, 0x7d, 0xb7, 0x2d, 0xc6, 0xd1, 0x7b, 0x23, 0x61, 0xd6, 0xab, 0x85, - 0x39, 0xe4, 0x16, 0x41, 0x4e, 0xba, 0x2c, 0x86, 0x64, 0x42, 0x7c, 0x17, 0x6a, 0x16, 0xa7, 0xbd, - 0xb8, 0xbf, 0xae, 0x56, 0x8e, 0xb1, 0xb1, 0x2c, 0xa5, 0xd6, 0xf6, 0x42, 0x7e, 0x1c, 0x89, 0xd1, - 0x9e, 0xe4, 0x3d, 0x08, 0x63, 0x8f, 0x7e, 0x04, 0x8b, 0x4c, 0x6e, 0xe4, 0x78, 0x4a, 0x5c, 0xab, - 0xa2, 0x27, 0x39, 0xef, 0x2e, 0x48, 0x55, 0x8b, 0x31, 0x84, 0xe1, 0x54, 0x62, 0xa6, 0x83, 0x67, - 0xa7, 0xea, 0xe0, 0x42, 0xfe, 0x4b, 0x3b, 0xd8, 0x87, 0x71, 0x09, 0x44, 0x3f, 0x84, 0xba, 0xeb, - 0x91, 0x0f, 0x02, 0x2a, 0xb3, 0xf2, 0x8c, 0x0b, 0xee, 0x9e, 0xa0, 0x1d, 0x57, 0x26, 0x10, 0xea, - 0x8c, 0xd0, 0x58, 0x8a, 0xd4, 0x1e, 0x29, 0xb0, 0x56, 0x1c, 0x66, 0x53, 0x4c, 0x8b, 0x7d, 0x58, - 0xe9, 0x11, 0x6e, 0x1e, 0x27, 0x0b, 0x45, 0xb4, 0xd0, 0xa2, 0xb1, 0x39, 0x1c, 0xb4, 0x56, 0xee, - 0xe4, 0x30, 0x67, 0x83, 0x16, 0x7a, 0x3b, 0xb0, 0xed, 0xd3, 0xfc, 0xcd, 0x58, 0xe0, 0xd7, 0x7e, - 0xa9, 0xc2, 0x72, 0x6e, 0x76, 0x57, 0xb8, 0x8e, 0xb6, 0x60, 0xb5, 0x93, 0x06, 0x3b, 0x44, 0x48, - 0x33, 0xbe, 0x22, 0x89, 0xb3, 0x95, 0x22, 0xf8, 0x8a, 0xf4, 0xf9, 0xd2, 0x51, 0x3f, 0xf3, 0xd2, - 0x79, 0x00, 0x2b, 0x24, 0xd9, 0xd6, 0x77, 0xdc, 0x0e, 0x95, 0xbb, 0x52, 0x97, 0x5c, 0x2b, 0x5b, - 0x39, 0xec, 0xd9, 0xa0, 0xf5, 0xa5, 0xe2, 0x8e, 0x0f, 0xe1, 0xb8, 0x20, 0x05, 0xbd, 0x00, 0x35, - 0xd3, 0x0d, 0x1c, 0x2e, 0x16, 0xaa, 0x9a, 0xb6, 0xca, 0x76, 0x08, 0xc4, 0x11, 0x0e, 0x7d, 0x0b, - 0x1a, 0xa4, 0xd3, 0xb3, 0x9c, 0x2d, 0xd3, 0xa4, 0x8c, 0xad, 0xd7, 0xc5, 0x2a, 0x4f, 0x16, 0xd6, - 0x56, 0x8a, 0xc2, 0x59, 0x3a, 0xed, 0xbf, 0x4a, 0x7c, 0x27, 0x96, 0xdc, 0x33, 0xe8, 0x6a, 0x78, - 0x1d, 0x09, 0x94, 0x4c, 0x4e, 0xe6, 0xc0, 0x11, 0x60, 0x1c, 0xe3, 0xd1, 0x37, 0xa0, 0xde, 0xf1, - 0xad, 0x3e, 0xf5, 0x65, 0x66, 0x92, 0x1e, 0xd8, 0x11, 0x50, 0x2c, 0xb1, 0x61, 0xb2, 0xbd, 0xf8, - 0xde, 0xc8, 0x24, 0x7b, 0xdf, 0x75, 0x6d, 0x2c, 0x30, 0x42, 0x92, 0xb0, 0x4a, 0x86, 0x30, 0x95, - 0x14, 0xd9, 0x2a, 0xb1, 0xe8, 0x7a, 0xde, 0xeb, 0x9a, 0xf0, 0x7a, 0x75, 0xa2, 0xc7, 0xef, 0xc1, - 0x4a, 0xe1, 0xae, 0xbf, 0x05, 0xaa, 0x49, 0x6d, 0xd9, 0x78, 0xed, 0xc9, 0x05, 0x31, 0xf2, 0x56, - 0x60, 0xcc, 0x0f, 0x07, 0x2d, 0x75, 0x7b, 0xf7, 0x36, 0x0e, 0x85, 0x68, 0xbf, 0x55, 0xe0, 0x52, - 0x69, 0x73, 0x66, 0x02, 0xa4, 0x4c, 0x0c, 0x10, 0x01, 0xf0, 0x88, 0x4f, 0x7a, 0x94, 0x53, 0x9f, - 0x8d, 0x59, 0x58, 0xf9, 0x39, 0x2d, 0x5f, 0xbe, 0x75, 0x4c, 0x7e, 0xb6, 0xfb, 0x21, 0xa7, 0x4e, - 0x78, 0x5b, 0xa5, 0xbb, 0x70, 0x3f, 0x11, 0x84, 0x33, 0x42, 0xb5, 0xdf, 0xcc, 0xc2, 0x32, 0x96, - 0xee, 0x45, 0xd7, 0xd7, 0xff, 0x7f, 0x03, 0xdf, 0xcf, 0x6d, 0xe0, 0x67, 0x44, 0x3a, 0x67, 0x5c, - 0xd9, 0x0e, 0x46, 0x0f, 0xc3, 0xbb, 0x94, 0xf0, 0x80, 0x55, 0x7b, 0x97, 0xc8, 0x0b, 0x15, 0x8c, - 0x69, 0x12, 0xa2, 0x67, 0x2c, 0x05, 0x6a, 0x43, 0x05, 0x9a, 0x39, 0xfa, 0x70, 0x78, 0x06, 0x3d, - 0xea, 0x63, 0x7a, 0x44, 0x7d, 0xea, 0x98, 0x14, 0x5d, 0x83, 0x05, 0xe2, 0x59, 0x37, 0x7d, 0x37, - 0xf0, 0x64, 0x46, 0x93, 0xed, 0xb8, 0xb5, 0xbf, 0x27, 0xe0, 0x38, 0xa1, 0x08, 0xa9, 0x63, 0x8b, - 0x64, 0xe9, 0x67, 0x2e, 0xd6, 0x08, 0x8e, 0x13, 0x8a, 0x64, 0x22, 0xce, 0x95, 0x4e, 0x44, 0x03, - 0xd4, 0xc0, 0xea, 0xc8, 0x33, 0xfb, 0x15, 0x49, 0xa0, 0xbe, 0xbb, 0xb7, 0x73, 0x36, 0x68, 0x5d, - 0x29, 0xfb, 0x52, 0xc3, 0x4f, 0x3d, 0xca, 0xf4, 0x77, 0xf7, 0x76, 0x70, 0xc8, 0xac, 0xfd, 0x59, - 0x81, 0x0b, 0x39, 0x27, 0xcf, 0xe1, 0x4a, 0xd8, 0xcf, 0x5f, 0x09, 0x2f, 0x4d, 0x91, 0xb2, 0x92, - 0x3b, 0xc1, 0x2a, 0x38, 0x21, 0x0e, 0x85, 0x77, 0x8a, 0xdf, 0x97, 0xae, 0x56, 0x3e, 0xc6, 0xcb, - 0x3f, 0x2a, 0x69, 0xff, 0x51, 0xe0, 0xe2, 0x98, 0x2a, 0x42, 0xef, 0x03, 0xa4, 0x63, 0x7b, 0x4c, - 0xd0, 0xc6, 0x28, 0x1c, 0x79, 0x75, 0x5c, 0x11, 0x5f, 0x7d, 0x52, 0x68, 0x46, 0x22, 0x62, 0xd0, - 0xf0, 0x29, 0xa3, 0x7e, 0x9f, 0x76, 0xde, 0x76, 0x7d, 0x19, 0xba, 0xef, 0x4e, 0x11, 0xba, 0x91, - 0xea, 0x4d, 0xb7, 0x03, 0x4e, 0x05, 0xe3, 0xac, 0x16, 0xed, 0x1f, 0x0a, 0x7c, 0x39, 0x27, 0xe4, - 0x1d, 0xda, 0xf3, 0x6c, 0xc2, 0xe9, 0x39, 0x0c, 0x8b, 0x87, 0xb9, 0x61, 0xf1, 0xc6, 0x14, 0x9e, - 0xc6, 0x46, 0x96, 0x1e, 0xee, 0x7f, 0x57, 0xe0, 0xd2, 0x58, 0x8e, 0x73, 0x28, 0xfe, 0xef, 0xe7, - 0x8b, 0xff, 0xd5, 0x4f, 0xe1, 0x57, 0xf9, 0xb1, 0x7c, 0xa9, 0x34, 0x0e, 0x5f, 0xc8, 0xe9, 0xae, - 0xfd, 0x41, 0x81, 0xa5, 0x98, 0x32, 0xbc, 0x0e, 0x2a, 0x9c, 0x89, 0x37, 0x00, 0xe4, 0xd7, 0xe7, - 0xf8, 0x85, 0x56, 0x4d, 0xed, 0xbe, 0x99, 0x60, 0x70, 0x86, 0x0a, 0xdd, 0x02, 0x14, 0x5b, 0x78, - 0x60, 0x8b, 0xa5, 0x1d, 0x5e, 0x5b, 0xaa, 0xe0, 0xdd, 0x90, 0xbc, 0x08, 0x8f, 0x50, 0xe0, 0x31, - 0x5c, 0xda, 0x5f, 0x94, 0x74, 0xaf, 0x0a, 0xf0, 0xe7, 0x35, 0xf2, 0xc2, 0xb8, 0xd2, 0xc8, 0x67, - 0xf7, 0x82, 0xa0, 0xfc, 0xdc, 0xee, 0x05, 0x61, 0x5d, 0x49, 0x4b, 0x3c, 0x52, 0x0b, 0x5e, 0x88, - 0x56, 0xa8, 0x7a, 0x85, 0xdd, 0x96, 0x67, 0x6a, 0x14, 0xd6, 0x17, 0xab, 0x99, 0x13, 0x96, 0xe9, - 0xd8, 0x93, 0xf6, 0x1a, 0x2c, 0x38, 0x6e, 0x87, 0x8a, 0x17, 0x97, 0xc2, 0xf6, 0xbf, 0x2b, 0xe1, - 0x38, 0xa1, 0x18, 0xf9, 0xef, 0x62, 0xee, 0xb3, 0xf9, 0xef, 0x42, 0x5c, 0x2c, 0xb6, 0x1d, 0x12, - 0xc4, 0xd7, 0x72, 0x7a, 0xb1, 0x48, 0x38, 0x4e, 0x28, 0xd0, 0xbd, 0x74, 0x85, 0xd6, 0x45, 0x4e, - 0xbe, 0x5e, 0x65, 0x85, 0x96, 0x6f, 0x4f, 0xc3, 0x78, 0xfc, 0xb4, 0x39, 0xf3, 0xe4, 0x69, 0x73, - 0xe6, 0xe3, 0xa7, 0xcd, 0x99, 0x8f, 0x86, 0x4d, 0xe5, 0xf1, 0xb0, 0xa9, 0x3c, 0x19, 0x36, 0x95, - 0x8f, 0x87, 0x4d, 0xe5, 0x93, 0x61, 0x53, 0xf9, 0xd5, 0xbf, 0x9a, 0x33, 0x3f, 0x78, 0x7e, 0xd2, - 0x5f, 0x74, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x1a, 0xa5, 0x7d, 0xad, 0xc1, 0x1b, 0x00, 0x00, + // 1835 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x19, 0xcd, 0x6f, 0x1c, 0x57, + 0xdd, 0xb3, 0xe3, 0x5d, 0xdb, 0xbf, 0xf5, 0x57, 0x5e, 0xa0, 0x38, 0xa6, 0xec, 0x26, 0x53, 0x04, + 0x4e, 0x9b, 0xce, 0x36, 0x69, 0xd5, 0x16, 0xca, 0x01, 0x8f, 0xed, 0x46, 0x8e, 0xf2, 0xe1, 0x3c, + 0xb7, 0x11, 0x81, 0x52, 0x78, 0x9e, 0x7d, 0x5e, 0x0f, 0x9e, 0x9d, 0x99, 0xce, 0x7b, 0xb3, 0xd4, + 0x17, 0x54, 0xc1, 0x3d, 0xe2, 0x1f, 0x40, 0xdc, 0x90, 0x38, 0xc1, 0x7f, 0x00, 0x12, 0x48, 0x44, + 0xe2, 0x12, 0x09, 0x0e, 0x3d, 0x2d, 0xcd, 0x22, 0x2e, 0x5c, 0xb8, 0xfb, 0x84, 0xe6, 0xcd, 0x9b, + 0xcf, 0xdd, 0x71, 0x66, 0xab, 0x62, 0x85, 0xdb, 0xce, 0xef, 0xfb, 0xfb, 0xf7, 0x9b, 0x59, 0xb8, + 0x76, 0xfc, 0x36, 0xd3, 0x2d, 0xb7, 0x43, 0x3c, 0xab, 0xe3, 0x53, 0xe6, 0x06, 0xbe, 0x49, 0x3b, + 0x83, 0xeb, 0xc4, 0xf6, 0x8e, 0xc8, 0xeb, 0x9d, 0x1e, 0x75, 0xa8, 0x4f, 0x38, 0xed, 0xea, 0x9e, + 0xef, 0x72, 0x17, 0xbd, 0x18, 0x51, 0xeb, 0xc4, 0xb3, 0xf4, 0x98, 0x5a, 0x8f, 0xa9, 0xd7, 0x5f, + 0xed, 0x59, 0xfc, 0x28, 0x38, 0xd0, 0x4d, 0xb7, 0xdf, 0xe9, 0xb9, 0x3d, 0xb7, 0x23, 0x98, 0x0e, + 0x82, 0x43, 0xf1, 0x24, 0x1e, 0xc4, 0xaf, 0x48, 0xd8, 0xba, 0x96, 0x51, 0x6d, 0xba, 0x7e, 0xa8, + 0xb6, 0xa8, 0x70, 0xfd, 0x8d, 0x94, 0xa6, 0x4f, 0xcc, 0x23, 0xcb, 0xa1, 0xfe, 0x49, 0xc7, 0x3b, + 0xee, 0xe5, 0xed, 0x9d, 0x86, 0x8b, 0x75, 0xfa, 0x94, 0x93, 0x49, 0xba, 0x3a, 0x65, 0x5c, 0x7e, + 0xe0, 0x70, 0xab, 0x3f, 0xae, 0xe6, 0xcd, 0x67, 0x31, 0x30, 0xf3, 0x88, 0xf6, 0x49, 0x91, 0x4f, + 0xfb, 0xab, 0x02, 0xab, 0x9b, 0xb6, 0xed, 0x9a, 0x84, 0x5b, 0xae, 0x83, 0x29, 0x0b, 0x6c, 0x8e, + 0x7e, 0x04, 0x73, 0x5d, 0x3a, 0xb0, 0x4c, 0xca, 0xd6, 0x94, 0xcb, 0xca, 0x46, 0xf3, 0xc6, 0x1b, + 0xfa, 0x59, 0xc1, 0xd6, 0xb7, 0x05, 0x71, 0x51, 0x8c, 0xb1, 0xf2, 0x78, 0xd8, 0x9e, 0x19, 0x0d, + 0xdb, 0x73, 0x11, 0x9e, 0xe1, 0x58, 0x2a, 0x7a, 0x00, 0x8b, 0x8e, 0xdb, 0xa5, 0xfb, 0xd4, 0xa6, + 0x26, 0x77, 0xfd, 0x35, 0x55, 0x68, 0xb9, 0x9c, 0xd5, 0x12, 0x66, 0x41, 0x1f, 0x5c, 0xd7, 0xef, + 0x66, 0xe8, 0x8c, 0xd5, 0xd1, 0xb0, 0xbd, 0x98, 0x85, 0xe0, 0x9c, 0x1c, 0xed, 0x33, 0x15, 0x9a, + 0x06, 0x61, 0x96, 0x19, 0x69, 0x44, 0x3f, 0x03, 0x20, 0x9c, 0xfb, 0xd6, 0x41, 0xc0, 0x85, 0x2f, + 0xea, 0x46, 0xf3, 0xc6, 0xb7, 0xce, 0xf6, 0x25, 0xc3, 0xae, 0x6f, 0x26, 0xbc, 0x3b, 0x0e, 0xf7, + 0x4f, 0x8c, 0x97, 0xa4, 0x43, 0x90, 0x22, 0x7e, 0xfe, 0x8f, 0xf6, 0xd2, 0xfd, 0x80, 0xd8, 0xd6, + 0xa1, 0x45, 0xbb, 0x77, 0x49, 0x9f, 0xe2, 0x8c, 0x46, 0x34, 0x80, 0x79, 0x93, 0x78, 0xc4, 0xb4, + 0xf8, 0xc9, 0x5a, 0x4d, 0x68, 0x7f, 0xab, 0xba, 0xf6, 0x2d, 0xc9, 0x19, 0xe9, 0xbe, 0x22, 0x75, + 0xcf, 0xc7, 0xe0, 0x71, 0xcd, 0x89, 0xae, 0x75, 0x1b, 0x56, 0x0a, 0xb6, 0xa3, 0x55, 0x50, 0x8f, + 0xe9, 0x89, 0xc8, 0xe7, 0x02, 0x0e, 0x7f, 0xa2, 0x2d, 0xa8, 0x0f, 0x88, 0x1d, 0xd0, 0xb5, 0x9a, + 0x88, 0xfe, 0xab, 0x95, 0x72, 0x1c, 0x4b, 0xc5, 0x11, 0xef, 0xb7, 0x6b, 0x6f, 0x2b, 0xeb, 0xc7, + 0xb0, 0x94, 0xb3, 0x75, 0x82, 0xae, 0xed, 0xbc, 0x2e, 0x3d, 0xa3, 0x2b, 0x29, 0x57, 0xdd, 0x3b, + 0xee, 0xe5, 0x95, 0xdf, 0x0f, 0x88, 0xc3, 0x2d, 0x7e, 0x92, 0x51, 0xa6, 0xdd, 0x84, 0x0b, 0x5b, + 0x3b, 0xb7, 0x23, 0x6b, 0xe2, 0xbc, 0xa3, 0x1b, 0x00, 0xf4, 0x63, 0xcf, 0xa7, 0x8c, 0x59, 0xae, + 0x13, 0xe9, 0x35, 0x50, 0x9c, 0xac, 0x9d, 0x04, 0x83, 0x33, 0x54, 0xda, 0x00, 0x1a, 0xb2, 0x4a, + 0x2e, 0xc3, 0xac, 0x43, 0xfa, 0x54, 0xf2, 0x2d, 0x4a, 0xbe, 0x59, 0x11, 0x53, 0x81, 0x41, 0xb7, + 0xa0, 0x7e, 0x10, 0x66, 0x46, 0x9a, 0x7f, 0xb5, 0x72, 0x12, 0x8d, 0x85, 0xd1, 0xb0, 0x5d, 0x17, + 0x00, 0x1c, 0x89, 0xd0, 0x1e, 0xd5, 0xe0, 0x6b, 0xc5, 0x86, 0xd9, 0x72, 0x9d, 0x43, 0xab, 0x17, + 0xf8, 0xe2, 0x01, 0x7d, 0x17, 0x1a, 0x91, 0x48, 0x69, 0xd1, 0x86, 0xb4, 0xa8, 0xb1, 0x2f, 0xa0, + 0xa7, 0xc3, 0xf6, 0x0b, 0x45, 0xd6, 0x08, 0x83, 0x25, 0x1f, 0xda, 0x80, 0x79, 0x9f, 0x7e, 0x14, + 0x50, 0xc6, 0x99, 0xa8, 0xbb, 0x05, 0x63, 0x31, 0x2c, 0x1d, 0x2c, 0x61, 0x38, 0xc1, 0xa2, 0x4f, + 0x14, 0xb8, 0x18, 0x75, 0x65, 0xce, 0x06, 0xd9, 0x91, 0xd7, 0xab, 0xd4, 0x44, 0x8e, 0xd1, 0xf8, + 0xaa, 0x34, 0xf6, 0xe2, 0x04, 0x24, 0x9e, 0xa4, 0x4a, 0xfb, 0x97, 0x02, 0x2f, 0x4c, 0x9e, 0x20, + 0xe8, 0x10, 0xe6, 0x7c, 0xf1, 0x2b, 0x6e, 0xde, 0x77, 0xaa, 0x18, 0x24, 0xdd, 0x2c, 0x9f, 0x47, + 0xd1, 0x33, 0xc3, 0xb1, 0x70, 0x64, 0x42, 0xc3, 0x14, 0x36, 0xc9, 0x2e, 0x7d, 0x67, 0xba, 0x79, + 0x97, 0x8f, 0xc0, 0x72, 0x9c, 0xae, 0x08, 0x8c, 0xa5, 0x68, 0xed, 0xb7, 0x0a, 0xac, 0x14, 0xba, + 0x08, 0xb5, 0x40, 0xb5, 0x1c, 0x2e, 0xca, 0x4a, 0x8d, 0x72, 0xb4, 0xeb, 0xf0, 0x07, 0x61, 0xb1, + 0xe3, 0x10, 0x81, 0xae, 0xc0, 0xec, 0x81, 0xeb, 0xda, 0x22, 0x1d, 0xf3, 0xc6, 0xd2, 0x68, 0xd8, + 0x5e, 0x30, 0x5c, 0xd7, 0x8e, 0x28, 0x04, 0x0a, 0x7d, 0x13, 0x1a, 0x8c, 0xfb, 0x96, 0xd3, 0x5b, + 0x9b, 0x15, 0xd5, 0xb2, 0x32, 0x1a, 0xb6, 0x9b, 0xfb, 0x02, 0x12, 0x91, 0x49, 0x34, 0x7a, 0x19, + 0xe6, 0x06, 0xd4, 0x17, 0x1d, 0x52, 0x17, 0x94, 0x62, 0x9a, 0x3e, 0x88, 0x40, 0x11, 0x69, 0x4c, + 0xa0, 0xfd, 0xae, 0x06, 0x4d, 0x99, 0x40, 0x9b, 0x58, 0x7d, 0xf4, 0x30, 0x53, 0x50, 0x51, 0x26, + 0x5e, 0x99, 0x22, 0x13, 0xc6, 0x6a, 0x3c, 0xbc, 0x26, 0x54, 0x20, 0x85, 0xa6, 0xe9, 0x3a, 0x8c, + 0xfb, 0xc4, 0x72, 0x64, 0xb9, 0xe6, 0x07, 0xc4, 0x59, 0x85, 0x27, 0xd9, 0x8c, 0x8b, 0x52, 0x41, + 0x33, 0x85, 0x31, 0x9c, 0x95, 0x8b, 0x3e, 0x4c, 0x52, 0xac, 0x0a, 0x0d, 0x6f, 0x56, 0xd2, 0x10, + 0x3a, 0x5f, 0x2d, 0xbb, 0x7f, 0x51, 0x60, 0xad, 0x8c, 0x29, 0xd7, 0x8f, 0xca, 0xe7, 0xea, 0xc7, + 0xda, 0xf9, 0xf5, 0xe3, 0x1f, 0x95, 0x4c, 0xee, 0x19, 0x43, 0x3f, 0x86, 0xf9, 0xf0, 0x4c, 0xe9, + 0x12, 0x4e, 0xe4, 0x39, 0xf0, 0xda, 0x59, 0xe3, 0x9b, 0xe9, 0x21, 0x75, 0xb8, 0xba, 0xef, 0x1d, + 0xfc, 0x84, 0x9a, 0xfc, 0x0e, 0xe5, 0x24, 0x1d, 0xc6, 0x29, 0x0c, 0x27, 0x52, 0xd1, 0x3d, 0x98, + 0x65, 0x1e, 0x35, 0xa7, 0x59, 0x44, 0xc2, 0xb4, 0x7d, 0x8f, 0x9a, 0xe9, 0xbc, 0x0e, 0x9f, 0xb0, + 0x10, 0xa4, 0xfd, 0x2a, 0x9b, 0x0c, 0xc6, 0xf2, 0xc9, 0x28, 0x0b, 0xb1, 0x72, 0x7e, 0x21, 0xfe, + 0x43, 0x32, 0x0a, 0x84, 0x7d, 0xb7, 0x2d, 0xc6, 0xd1, 0x07, 0x63, 0x61, 0xd6, 0xab, 0x85, 0x39, + 0xe4, 0x16, 0x41, 0x4e, 0xba, 0x2c, 0x86, 0x64, 0x42, 0x7c, 0x17, 0xea, 0x16, 0xa7, 0xfd, 0xb8, + 0xbf, 0xae, 0x56, 0x8e, 0xb1, 0xb1, 0x24, 0xa5, 0xd6, 0x77, 0x43, 0x7e, 0x1c, 0x89, 0xd1, 0x9e, + 0xe4, 0x3d, 0x08, 0x63, 0x8f, 0x7e, 0x08, 0x0b, 0x4c, 0x6e, 0xe4, 0x78, 0x4a, 0x5c, 0xab, 0xa2, + 0x27, 0x39, 0xef, 0x2e, 0x48, 0x55, 0x0b, 0x31, 0x84, 0xe1, 0x54, 0x62, 0xa6, 0x83, 0x6b, 0x53, + 0x75, 0x70, 0x21, 0xff, 0xa5, 0x1d, 0xec, 0xc3, 0xa4, 0x04, 0xa2, 0x1f, 0x40, 0xc3, 0xf5, 0xc8, + 0x47, 0x01, 0x95, 0x59, 0x79, 0xc6, 0x05, 0x77, 0x4f, 0xd0, 0x4e, 0x2a, 0x13, 0x08, 0x75, 0x46, + 0x68, 0x2c, 0x45, 0x6a, 0x8f, 0x14, 0x58, 0x2d, 0x0e, 0xb3, 0x29, 0xa6, 0xc5, 0x1e, 0x2c, 0xf7, + 0x09, 0x37, 0x8f, 0x92, 0x85, 0x22, 0x5a, 0x68, 0xc1, 0xd8, 0x18, 0x0d, 0xdb, 0xcb, 0x77, 0x72, + 0x98, 0xd3, 0x61, 0x1b, 0xbd, 0x1b, 0xd8, 0xf6, 0x49, 0xfe, 0x66, 0x2c, 0xf0, 0x6b, 0xbf, 0x50, + 0x61, 0x29, 0x37, 0xbb, 0x2b, 0x5c, 0x47, 0x9b, 0xb0, 0xd2, 0x4d, 0x83, 0x1d, 0x22, 0xa4, 0x19, + 0x5f, 0x91, 0xc4, 0xd9, 0x4a, 0x11, 0x7c, 0x45, 0xfa, 0x7c, 0xe9, 0xa8, 0x5f, 0x78, 0xe9, 0x3c, + 0x80, 0x65, 0x92, 0x6c, 0xeb, 0x3b, 0x6e, 0x97, 0xca, 0x5d, 0xa9, 0x4b, 0xae, 0xe5, 0xcd, 0x1c, + 0xf6, 0x74, 0xd8, 0xfe, 0x52, 0x71, 0xc7, 0x87, 0x70, 0x5c, 0x90, 0x82, 0x5e, 0x82, 0xba, 0xe9, + 0x06, 0x0e, 0x17, 0x0b, 0x55, 0x4d, 0x5b, 0x65, 0x2b, 0x04, 0xe2, 0x08, 0x87, 0xae, 0x43, 0x93, + 0x74, 0xfb, 0x96, 0xb3, 0x69, 0x9a, 0x94, 0xb1, 0xb5, 0x86, 0x58, 0xe5, 0x62, 0x4b, 0x6f, 0xa6, + 0x60, 0x9c, 0xa5, 0xd1, 0xfe, 0xa3, 0xc4, 0x37, 0x62, 0xc9, 0x2d, 0x83, 0xae, 0x86, 0x97, 0x91, + 0x40, 0xc9, 0xc4, 0x64, 0x8e, 0x1b, 0x01, 0xc6, 0x31, 0x1e, 0x7d, 0x03, 0x1a, 0x5d, 0xdf, 0x1a, + 0x50, 0x5f, 0x66, 0x25, 0xa9, 0xff, 0x6d, 0x01, 0xc5, 0x12, 0x1b, 0x26, 0xda, 0x8b, 0x6f, 0x8d, + 0x4c, 0xa2, 0xf7, 0x5c, 0xd7, 0xc6, 0x02, 0x23, 0x24, 0x09, 0xab, 0x64, 0xf8, 0x52, 0x49, 0x91, + 0xad, 0x12, 0x5b, 0xf4, 0xb8, 0x5e, 0xc1, 0xe3, 0x0f, 0x60, 0xb9, 0x70, 0xd3, 0xdf, 0x02, 0xd5, + 0xa4, 0xb6, 0x6c, 0xba, 0xce, 0xd9, 0xc5, 0x30, 0xf6, 0x46, 0x60, 0xcc, 0x8d, 0x86, 0x6d, 0x75, + 0x6b, 0xe7, 0x36, 0x0e, 0x85, 0x68, 0xbf, 0x51, 0xe0, 0x52, 0x69, 0x63, 0x66, 0x02, 0xa4, 0x9c, + 0x19, 0x20, 0x02, 0xe0, 0x11, 0x9f, 0xf4, 0x29, 0xa7, 0x3e, 0x9b, 0xb0, 0xac, 0xf2, 0x33, 0x5a, + 0xbe, 0x78, 0xeb, 0x98, 0xfc, 0x74, 0xe7, 0x63, 0x4e, 0x9d, 0xf0, 0xae, 0x4a, 0xf7, 0xe0, 0x5e, + 0x22, 0x08, 0x67, 0x84, 0x6a, 0xbf, 0xae, 0xc1, 0x12, 0x96, 0xee, 0x45, 0x97, 0xd7, 0xff, 0x7e, + 0xfb, 0xde, 0xcf, 0x6d, 0xdf, 0x67, 0x44, 0x3a, 0x67, 0x5c, 0xd9, 0xfe, 0x45, 0x0f, 0xc3, 0x9b, + 0x94, 0xf0, 0x80, 0x55, 0x7b, 0x8f, 0xc8, 0x0b, 0x15, 0x8c, 0x69, 0x12, 0xa2, 0x67, 0x2c, 0x05, + 0x6a, 0x23, 0x05, 0x5a, 0x39, 0xfa, 0x70, 0x70, 0x06, 0x7d, 0xea, 0x63, 0x7a, 0x48, 0x7d, 0xea, + 0x98, 0x14, 0x5d, 0x83, 0x79, 0xe2, 0x59, 0x37, 0x7d, 0x37, 0xf0, 0x64, 0x46, 0x93, 0xcd, 0xb8, + 0xb9, 0xb7, 0x2b, 0xe0, 0x38, 0xa1, 0x08, 0xa9, 0x63, 0x8b, 0x64, 0xe9, 0x67, 0xae, 0xd5, 0x08, + 0x8e, 0x13, 0x8a, 0x64, 0x1a, 0xce, 0x96, 0x4e, 0x43, 0x03, 0xd4, 0xc0, 0xea, 0xca, 0x13, 0xfb, + 0x35, 0x49, 0xa0, 0xbe, 0xbf, 0xbb, 0x7d, 0x3a, 0x6c, 0x5f, 0x29, 0xfb, 0x4a, 0xc3, 0x4f, 0x3c, + 0xca, 0xf4, 0xf7, 0x77, 0xb7, 0x71, 0xc8, 0xac, 0xfd, 0x49, 0x81, 0x0b, 0x39, 0x27, 0xcf, 0xe1, + 0x42, 0xd8, 0xcb, 0x5f, 0x08, 0xaf, 0x4c, 0x91, 0xb2, 0x92, 0x1b, 0xc1, 0x2a, 0x38, 0x21, 0x8e, + 0x84, 0xf7, 0x8a, 0xdf, 0x96, 0xae, 0x56, 0x3e, 0xc4, 0xcb, 0x3f, 0x28, 0x69, 0xff, 0x56, 0xe0, + 0xe2, 0x84, 0x2a, 0x42, 0x1f, 0x02, 0xa4, 0x23, 0x7b, 0x42, 0xd0, 0x26, 0x28, 0x1c, 0x7b, 0x6d, + 0x5c, 0x16, 0x5f, 0x7c, 0x52, 0x68, 0x46, 0x22, 0x62, 0xd0, 0xf4, 0x29, 0xa3, 0xfe, 0x80, 0x76, + 0xdf, 0x75, 0x7d, 0x19, 0xba, 0xef, 0x4c, 0x11, 0xba, 0xb1, 0xea, 0x4d, 0x5f, 0x65, 0x70, 0x2a, + 0x18, 0x67, 0xb5, 0x68, 0x7f, 0x57, 0xe0, 0xcb, 0x39, 0x21, 0xef, 0xd1, 0xbe, 0x67, 0x13, 0x4e, + 0xcf, 0x61, 0x58, 0x3c, 0xcc, 0x0d, 0x8b, 0xb7, 0xa6, 0xf0, 0x34, 0x36, 0xb2, 0xf4, 0x68, 0xff, + 0x9b, 0x02, 0x97, 0x26, 0x72, 0x9c, 0x43, 0xf1, 0x7f, 0x2f, 0x5f, 0xfc, 0xaf, 0x7f, 0x0e, 0xbf, + 0xca, 0x0f, 0xe5, 0x4b, 0xa5, 0x71, 0xf8, 0xbf, 0x9c, 0xee, 0xda, 0xef, 0x15, 0x58, 0x8c, 0x29, + 0xc3, 0xeb, 0xa0, 0xc2, 0x89, 0x78, 0x03, 0x40, 0x7e, 0x79, 0x8e, 0x5f, 0x66, 0xd5, 0xd4, 0xee, + 0x9b, 0x09, 0x06, 0x67, 0xa8, 0xd0, 0x2d, 0x40, 0xb1, 0x85, 0xfb, 0xb6, 0x58, 0xda, 0xe1, 0xa5, + 0xa5, 0x0a, 0xde, 0x75, 0xc9, 0x8b, 0xf0, 0x18, 0x05, 0x9e, 0xc0, 0xa5, 0xfd, 0x59, 0x49, 0xf7, + 0xaa, 0x00, 0x3f, 0xaf, 0x91, 0x17, 0xc6, 0x95, 0x46, 0x3e, 0xbb, 0x17, 0x04, 0xe5, 0x73, 0xbb, + 0x17, 0x84, 0x75, 0x25, 0x2d, 0xf1, 0x48, 0x2d, 0x78, 0x21, 0x5a, 0xa1, 0xea, 0x15, 0x76, 0x5b, + 0x9e, 0xa9, 0x51, 0x58, 0x5f, 0xae, 0x66, 0x4e, 0x58, 0xa6, 0x13, 0x4f, 0xda, 0x6b, 0x30, 0xef, + 0xb8, 0x5d, 0x2a, 0x5e, 0x5a, 0x0a, 0xdb, 0xff, 0xae, 0x84, 0xe3, 0x84, 0x62, 0xec, 0x7f, 0x8b, + 0xd9, 0x2f, 0xe6, 0x7f, 0x0b, 0x71, 0xb1, 0xd8, 0x76, 0x48, 0x10, 0x5f, 0xcb, 0xe9, 0xc5, 0x22, + 0xe1, 0x38, 0xa1, 0x40, 0xf7, 0xd2, 0x15, 0xda, 0x10, 0x39, 0xf9, 0x7a, 0x95, 0x15, 0x5a, 0xbe, + 0x3d, 0x0d, 0xe3, 0xf1, 0xd3, 0xd6, 0xcc, 0x93, 0xa7, 0xad, 0x99, 0x4f, 0x9f, 0xb6, 0x66, 0x3e, + 0x19, 0xb5, 0x94, 0xc7, 0xa3, 0x96, 0xf2, 0x64, 0xd4, 0x52, 0x3e, 0x1d, 0xb5, 0x94, 0xcf, 0x46, + 0x2d, 0xe5, 0x97, 0xff, 0x6c, 0xcd, 0x7c, 0xff, 0xc5, 0xb3, 0xfe, 0x9e, 0xfb, 0x6f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x3c, 0xd4, 0x2c, 0x15, 0xbd, 0x1b, 0x00, 0x00, } func (m *AllocationResult) Marshal() (dAtA []byte, err error) { @@ -1794,14 +1794,16 @@ func (m *DeviceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - i-- - if m.AdminAccess { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if m.AdminAccess != nil { + i-- + if *m.AdminAccess { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x30 } - i-- - dAtA[i] = 0x30 i = encodeVarintGenerated(dAtA, i, uint64(m.Count)) i-- dAtA[i] = 0x28 @@ -2821,7 +2823,9 @@ func (m *DeviceRequest) Size() (n int) { l = len(m.AllocationMode) n += 1 + l + sovGenerated(uint64(l)) n += 1 + sovGenerated(uint64(m.Count)) - n += 2 + if m.AdminAccess != nil { + n += 2 + } return n } @@ -3309,7 +3313,7 @@ func (this *DeviceRequest) String() string { `Selectors:` + repeatedStringForSelectors + `,`, `AllocationMode:` + fmt.Sprintf("%v", this.AllocationMode) + `,`, `Count:` + fmt.Sprintf("%v", this.Count) + `,`, - `AdminAccess:` + fmt.Sprintf("%v", this.AdminAccess) + `,`, + `AdminAccess:` + valueToStringGenerated(this.AdminAccess) + `,`, `}`, }, "") return s @@ -5669,7 +5673,8 @@ func (m *DeviceRequest) Unmarshal(dAtA []byte) error { break } } - m.AdminAccess = bool(v != 0) + b := bool(v != 0) + m.AdminAccess = &b default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/staging/src/k8s.io/api/resource/v1alpha3/generated.proto b/staging/src/k8s.io/api/resource/v1alpha3/generated.proto index 660bc89dc93..2315bde82c2 100644 --- a/staging/src/k8s.io/api/resource/v1alpha3/generated.proto +++ b/staging/src/k8s.io/api/resource/v1alpha3/generated.proto @@ -416,10 +416,10 @@ message DeviceRequest { // any resource allocations. // // This is an alpha field and requires enabling the DRAAdminAccess - // feature gate. + // feature gate. Admin access is disabled if this field is unset or + // set to false, otherwise it is enabled. // // +optional - // +default=false // +featureGate=DRAAdminAccess optional bool adminAccess = 6; } @@ -458,19 +458,15 @@ message DeviceRequestAllocationResult { // +required optional string device = 4; - // AdminAccess is a copy of the AdminAccess value in the - // request which caused this device to be allocated. - // - // New allocations are required to have this set when the DRAAdminAccess - // feature gate is enabled. Old allocations made - // by Kubernetes 1.31 do not have it yet. Clients which want to - // support Kubernetes 1.31 need to look up the request and retrieve - // the value from there if this field is not set. + // AdminAccess indicates that this device was allocated for + // administrative access. See the corresponding request field + // for a definition of mode. // // This is an alpha field and requires enabling the DRAAdminAccess - // feature gate. + // feature gate. Admin access is disabled if this field is unset or + // set to false, otherwise it is enabled. // - // +required + // +optional // +featureGate=DRAAdminAccess optional bool adminAccess = 5; } diff --git a/staging/src/k8s.io/api/resource/v1alpha3/types.go b/staging/src/k8s.io/api/resource/v1alpha3/types.go index be82b835223..67d41749122 100644 --- a/staging/src/k8s.io/api/resource/v1alpha3/types.go +++ b/staging/src/k8s.io/api/resource/v1alpha3/types.go @@ -449,12 +449,12 @@ type DeviceRequest struct { // any resource allocations. // // This is an alpha field and requires enabling the DRAAdminAccess - // feature gate. + // feature gate. Admin access is disabled if this field is unset or + // set to false, otherwise it is enabled. // // +optional - // +default=false // +featureGate=DRAAdminAccess - AdminAccess bool `json:"adminAccess,omitempty" protobuf:"bytes,6,opt,name=adminAccess"` + AdminAccess *bool `json:"adminAccess,omitempty" protobuf:"bytes,6,opt,name=adminAccess"` } const ( @@ -793,19 +793,15 @@ type DeviceRequestAllocationResult struct { // +required Device string `json:"device" protobuf:"bytes,4,name=device"` - // AdminAccess is a copy of the AdminAccess value in the - // request which caused this device to be allocated. - // - // New allocations are required to have this set when the DRAAdminAccess - // feature gate is enabled. Old allocations made - // by Kubernetes 1.31 do not have it yet. Clients which want to - // support Kubernetes 1.31 need to look up the request and retrieve - // the value from there if this field is not set. + // AdminAccess indicates that this device was allocated for + // administrative access. See the corresponding request field + // for a definition of mode. // // This is an alpha field and requires enabling the DRAAdminAccess - // feature gate. + // feature gate. Admin access is disabled if this field is unset or + // set to false, otherwise it is enabled. // - // +required + // +optional // +featureGate=DRAAdminAccess AdminAccess *bool `json:"adminAccess" protobuf:"bytes,5,name=adminAccess"` } diff --git a/staging/src/k8s.io/api/resource/v1alpha3/types_swagger_doc_generated.go b/staging/src/k8s.io/api/resource/v1alpha3/types_swagger_doc_generated.go index a6cc44d147e..9e549189c7d 100644 --- a/staging/src/k8s.io/api/resource/v1alpha3/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/resource/v1alpha3/types_swagger_doc_generated.go @@ -182,7 +182,7 @@ var map_DeviceRequest = map[string]string{ "selectors": "Selectors define criteria which must be satisfied by a specific device in order for that device to be considered for this request. All selectors must be satisfied for a device to be considered.", "allocationMode": "AllocationMode and its related fields define how devices are allocated to satisfy this request. Supported values are:\n\n- ExactCount: This request is for a specific number of devices.\n This is the default. The exact number is provided in the\n count field.\n\n- All: This request is for all of the matching devices in a pool.\n Allocation will fail if some devices are already allocated,\n unless adminAccess is requested.\n\nIf AlloctionMode is not specified, the default mode is ExactCount. If the mode is ExactCount and count is not specified, the default count is one. Any other requests must specify this field.\n\nMore modes may get added in the future. Clients must refuse to handle requests with unknown modes.", "count": "Count is used only when the count mode is \"ExactCount\". Must be greater than zero. If AllocationMode is ExactCount and this field is not specified, the default is one.", - "adminAccess": "AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate.", + "adminAccess": "AdminAccess indicates that this is a claim for administrative access to the device(s). Claims with AdminAccess are expected to be used for monitoring or other management services for a device. They ignore all ordinary claims to the device with respect to access modes and any resource allocations.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.", } func (DeviceRequest) SwaggerDoc() map[string]string { @@ -195,7 +195,7 @@ var map_DeviceRequestAllocationResult = map[string]string{ "driver": "Driver specifies the name of the DRA driver whose kubelet plugin should be invoked to process the allocation once the claim is needed on a node.\n\nMust be a DNS subdomain and should end with a DNS domain owned by the vendor of the driver.", "pool": "This name together with the driver name and the device name field identify which device was allocated (`//`).\n\nMust not be longer than 253 characters and may contain one or more DNS sub-domains separated by slashes.", "device": "Device references one device instance via its name in the driver's resource pool. It must be a DNS label.", - "adminAccess": "AdminAccess is a copy of the AdminAccess value in the request which caused this device to be allocated.\n\nNew allocations are required to have this set when the DRAAdminAccess feature gate is enabled. Old allocations made by Kubernetes 1.31 do not have it yet. Clients which want to support Kubernetes 1.31 need to look up the request and retrieve the value from there if this field is not set.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate.", + "adminAccess": "AdminAccess indicates that this device was allocated for administrative access. See the corresponding request field for a definition of mode.\n\nThis is an alpha field and requires enabling the DRAAdminAccess feature gate. Admin access is disabled if this field is unset or set to false, otherwise it is enabled.", } func (DeviceRequestAllocationResult) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/api/resource/v1alpha3/zz_generated.deepcopy.go b/staging/src/k8s.io/api/resource/v1alpha3/zz_generated.deepcopy.go index a88bb5dec27..68d24f53c3b 100644 --- a/staging/src/k8s.io/api/resource/v1alpha3/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/resource/v1alpha3/zz_generated.deepcopy.go @@ -427,6 +427,11 @@ func (in *DeviceRequest) DeepCopyInto(out *DeviceRequest) { (*in)[i].DeepCopyInto(&(*out)[i]) } } + if in.AdminAccess != nil { + in, out := &in.AdminAccess, &out.AdminAccess + *out = new(bool) + **out = **in + } return } diff --git a/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go b/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go index 397b45e092f..ec581483b35 100644 --- a/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go +++ b/staging/src/k8s.io/client-go/applyconfigurations/internal/internal.go @@ -12419,7 +12419,6 @@ var schemaYAML = typed.YAMLObject(`types: - name: adminAccess type: scalar: boolean - default: false - name: allocationMode type: scalar: string diff --git a/staging/src/k8s.io/dynamic-resource-allocation/structured/allocator.go b/staging/src/k8s.io/dynamic-resource-allocation/structured/allocator.go index 2eaa9f485a0..7ab3fece1d6 100644 --- a/staging/src/k8s.io/dynamic-resource-allocation/structured/allocator.go +++ b/staging/src/k8s.io/dynamic-resource-allocation/structured/allocator.go @@ -163,7 +163,7 @@ func (a *Allocator) Allocate(ctx context.Context, node *v1.Node) (finalResult [] } } - if !a.adminAccessEnabled && request.AdminAccess { + if !a.adminAccessEnabled && request.AdminAccess != nil { return nil, fmt.Errorf("claim %s, request %s: admin access is requested, but the feature is disabled", klog.KObj(claim), request.Name) } @@ -584,7 +584,7 @@ func (alloc *allocator) allocateOne(r deviceIndices) (bool, error) { deviceID := DeviceID{Driver: pool.Driver, Pool: pool.Pool, Device: slice.Spec.Devices[deviceIndex].Name} // Checking for "in use" is cheap and thus gets done first. - if !request.AdminAccess && alloc.allocated[deviceID] { + if !ptr.Deref(request.AdminAccess, false) && alloc.allocated[deviceID] { alloc.logger.V(7).Info("Device in use", "device", deviceID) continue } @@ -720,7 +720,7 @@ func (alloc *allocator) selectorsMatch(r requestIndices, device *resourceapi.Bas func (alloc *allocator) allocateDevice(r deviceIndices, device *resourceapi.BasicDevice, deviceID DeviceID, must bool) (bool, func(), error) { claim := alloc.claimsToAllocate[r.claimIndex] request := &claim.Spec.Devices.Requests[r.requestIndex] - adminAccess := request.AdminAccess + adminAccess := ptr.Deref(request.AdminAccess, false) if !adminAccess && alloc.allocated[deviceID] { alloc.logger.V(7).Info("Device in use", "device", deviceID) return false, nil, nil @@ -751,11 +751,13 @@ func (alloc *allocator) allocateDevice(r deviceIndices, device *resourceapi.Basi alloc.allocated[deviceID] = true } result := resourceapi.DeviceRequestAllocationResult{ - Request: request.Name, - Driver: deviceID.Driver, - Pool: deviceID.Pool, - Device: deviceID.Device, - AdminAccess: &request.AdminAccess, + Request: request.Name, + Driver: deviceID.Driver, + Pool: deviceID.Pool, + Device: deviceID.Device, + } + if adminAccess { + result.AdminAccess = &adminAccess } previousNumResults := len(alloc.result[r.claimIndex].Devices.Results) alloc.result[r.claimIndex].Devices.Results = append(alloc.result[r.claimIndex].Devices.Results, result) diff --git a/staging/src/k8s.io/dynamic-resource-allocation/structured/allocator_test.go b/staging/src/k8s.io/dynamic-resource-allocation/structured/allocator_test.go index 51a76d66cd6..40a6b7561db 100644 --- a/staging/src/k8s.io/dynamic-resource-allocation/structured/allocator_test.go +++ b/staging/src/k8s.io/dynamic-resource-allocation/structured/allocator_test.go @@ -248,7 +248,9 @@ func deviceAllocationResult(request, driver, pool, device string, adminAccess bo Pool: pool, Device: device, } - r.AdminAccess = &adminAccess + if adminAccess { + r.AdminAccess = &adminAccess + } return r } @@ -935,7 +937,7 @@ func TestAllocator(t *testing.T) { adminAccess: false, claimsToAllocate: func() []*resourceapi.ResourceClaim { c := claim(claim0, req0, classA) - c.Spec.Devices.Requests[0].AdminAccess = true + c.Spec.Devices.Requests[0].AdminAccess = ptr.To(true) return []*resourceapi.ResourceClaim{c} }(), classes: objects(class(classA, driverA)), @@ -949,7 +951,7 @@ func TestAllocator(t *testing.T) { adminAccess: true, claimsToAllocate: func() []*resourceapi.ResourceClaim { c := claim(claim0, req0, classA) - c.Spec.Devices.Requests[0].AdminAccess = true + c.Spec.Devices.Requests[0].AdminAccess = ptr.To(true) return []*resourceapi.ResourceClaim{c} }(), allocatedClaims: objects( diff --git a/test/e2e/dra/dra.go b/test/e2e/dra/dra.go index ed928220d16..5b2fa693354 100644 --- a/test/e2e/dra/dra.go +++ b/test/e2e/dra/dra.go @@ -754,9 +754,9 @@ var _ = framework.SIGDescribe("node")("DRA", feature.DynamicResourceAllocation, // Attempt to create claim and claim template with admin access. Must fail eventually. claim := b.externalClaim() - claim.Spec.Devices.Requests[0].AdminAccess = true + claim.Spec.Devices.Requests[0].AdminAccess = ptr.To(true) _, claimTemplate := b.podInline() - claimTemplate.Spec.Spec.Devices.Requests[0].AdminAccess = true + claimTemplate.Spec.Spec.Devices.Requests[0].AdminAccess = ptr.To(true) matchVAPError := gomega.MatchError(gomega.ContainSubstring("admin access to devices not enabled" /* in namespace " + b.f.Namespace.Name */)) gomega.Eventually(ctx, func(ctx context.Context) error { // First delete, in case that it succeeded earlier. @@ -849,7 +849,7 @@ var _ = framework.SIGDescribe("node")("DRA", feature.DynamicResourceAllocation, f.It("DaemonSet with admin access", feature.DRAAdminAccess, func(ctx context.Context) { pod, template := b.podInline() - template.Spec.Spec.Devices.Requests[0].AdminAccess = true + template.Spec.Spec.Devices.Requests[0].AdminAccess = ptr.To(true) // Limit the daemon set to the one node where we have the driver. nodeName := nodes.NodeNames[0] pod.Spec.NodeSelector = map[string]string{"kubernetes.io/hostname": nodeName} @@ -872,7 +872,7 @@ var _ = framework.SIGDescribe("node")("DRA", feature.DynamicResourceAllocation, } created := b.create(ctx, template, daemonSet) - if !created[0].(*resourceapi.ResourceClaimTemplate).Spec.Spec.Devices.Requests[0].AdminAccess { + if !ptr.Deref(created[0].(*resourceapi.ResourceClaimTemplate).Spec.Spec.Devices.Requests[0].AdminAccess, false) { framework.Fail("AdminAccess field was cleared. This test depends on the DRAAdminAccess feature.") } ds := created[1].(*appsv1.DaemonSet)