diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 849048a483c..0139bf12d72 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -21229,22 +21229,6 @@ ], "description": "read the specified ConfigMap", "operationId": "readCoreV1NamespacedConfigMap", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -21832,22 +21816,6 @@ ], "description": "read the specified Endpoints", "operationId": "readCoreV1NamespacedEndpoints", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -22435,22 +22403,6 @@ ], "description": "read the specified Event", "operationId": "readCoreV1NamespacedEvent", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -23038,22 +22990,6 @@ ], "description": "read the specified LimitRange", "operationId": "readCoreV1NamespacedLimitRange", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -23641,22 +23577,6 @@ ], "description": "read the specified PersistentVolumeClaim", "operationId": "readCoreV1NamespacedPersistentVolumeClaim", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -24440,22 +24360,6 @@ ], "description": "read the specified Pod", "operationId": "readCoreV1NamespacedPod", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -26616,22 +26520,6 @@ ], "description": "read the specified PodTemplate", "operationId": "readCoreV1NamespacedPodTemplate", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -27219,22 +27107,6 @@ ], "description": "read the specified ReplicationController", "operationId": "readCoreV1NamespacedReplicationController", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -28214,22 +28086,6 @@ ], "description": "read the specified ResourceQuota", "operationId": "readCoreV1NamespacedResourceQuota", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -29013,22 +28869,6 @@ ], "description": "read the specified Secret", "operationId": "readCoreV1NamespacedSecret", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -29616,22 +29456,6 @@ ], "description": "read the specified ServiceAccount", "operationId": "readCoreV1NamespacedServiceAccount", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -30196,22 +30020,6 @@ ], "description": "read the specified Service", "operationId": "readCoreV1NamespacedService", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -31206,22 +31014,6 @@ ], "description": "read the specified Namespace", "operationId": "readCoreV1Namespace", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -32065,22 +31857,6 @@ ], "description": "read the specified Node", "operationId": "readCoreV1Node", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -33459,22 +33235,6 @@ ], "description": "read the specified PersistentVolume", "operationId": "readCoreV1PersistentVolume", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -40084,22 +39844,6 @@ ], "description": "read the specified MutatingWebhookConfiguration", "operationId": "readAdmissionregistrationV1MutatingWebhookConfiguration", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -40671,22 +40415,6 @@ ], "description": "read the specified ValidatingWebhookConfiguration", "operationId": "readAdmissionregistrationV1ValidatingWebhookConfiguration", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -41751,22 +41479,6 @@ ], "description": "read the specified MutatingWebhookConfiguration", "operationId": "readAdmissionregistrationV1beta1MutatingWebhookConfiguration", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -42338,22 +42050,6 @@ ], "description": "read the specified ValidatingWebhookConfiguration", "operationId": "readAdmissionregistrationV1beta1ValidatingWebhookConfiguration", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -43451,22 +43147,6 @@ ], "description": "read the specified CustomResourceDefinition", "operationId": "readApiextensionsV1CustomResourceDefinition", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -44489,22 +44169,6 @@ ], "description": "read the specified CustomResourceDefinition", "operationId": "readApiextensionsV1beta1CustomResourceDefinition", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -45560,22 +45224,6 @@ ], "description": "read the specified APIService", "operationId": "readApiregistrationV1APIService", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -46598,22 +46246,6 @@ ], "description": "read the specified APIService", "operationId": "readApiregistrationV1beta1APIService", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -48010,22 +47642,6 @@ ], "description": "read the specified ControllerRevision", "operationId": "readAppsV1NamespacedControllerRevision", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -48613,22 +48229,6 @@ ], "description": "read the specified DaemonSet", "operationId": "readAppsV1NamespacedDaemonSet", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -49412,22 +49012,6 @@ ], "description": "read the specified Deployment", "operationId": "readAppsV1NamespacedDeployment", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -50407,22 +49991,6 @@ ], "description": "read the specified ReplicaSet", "operationId": "readAppsV1NamespacedReplicaSet", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -51402,22 +50970,6 @@ ], "description": "read the specified StatefulSet", "operationId": "readAppsV1NamespacedStatefulSet", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -55615,22 +55167,6 @@ ], "description": "read the specified HorizontalPodAutoscaler", "operationId": "readAutoscalingV1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -56915,22 +56451,6 @@ ], "description": "read the specified HorizontalPodAutoscaler", "operationId": "readAutoscalingV2beta1NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -58215,22 +57735,6 @@ ], "description": "read the specified HorizontalPodAutoscaler", "operationId": "readAutoscalingV2beta2NamespacedHorizontalPodAutoscaler", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -59548,22 +59052,6 @@ ], "description": "read the specified Job", "operationId": "readBatchV1NamespacedJob", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -60848,22 +60336,6 @@ ], "description": "read the specified CronJob", "operationId": "readBatchV1beta1NamespacedCronJob", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -62148,22 +61620,6 @@ ], "description": "read the specified CronJob", "operationId": "readBatchV2alpha1NamespacedCronJob", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -63362,22 +62818,6 @@ ], "description": "read the specified CertificateSigningRequest", "operationId": "readCertificatesV1CertificateSigningRequest", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -64588,22 +64028,6 @@ ], "description": "read the specified CertificateSigningRequest", "operationId": "readCertificatesV1beta1CertificateSigningRequest", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -65966,22 +65390,6 @@ ], "description": "read the specified Lease", "operationId": "readCoordinationV1NamespacedLease", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -67070,22 +66478,6 @@ ], "description": "read the specified Lease", "operationId": "readCoordinationV1beta1NamespacedLease", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -68207,22 +67599,6 @@ ], "description": "read the specified EndpointSlice", "operationId": "readDiscoveryV1beta1NamespacedEndpointSlice", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -69344,22 +68720,6 @@ ], "description": "read the specified Event", "operationId": "readEventsV1NamespacedEvent", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -70448,22 +69808,6 @@ ], "description": "read the specified Event", "operationId": "readEventsV1beta1NamespacedEvent", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -71585,22 +70929,6 @@ ], "description": "read the specified Ingress", "operationId": "readExtensionsV1beta1NamespacedIngress", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -72799,22 +72127,6 @@ ], "description": "read the specified FlowSchema", "operationId": "readFlowcontrolApiserverV1alpha1FlowSchema", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -73574,22 +72886,6 @@ ], "description": "read the specified PriorityLevelConfiguration", "operationId": "readFlowcontrolApiserverV1alpha1PriorityLevelConfiguration", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -74842,22 +74138,6 @@ ], "description": "read the specified FlowSchema", "operationId": "readFlowcontrolApiserverV1beta1FlowSchema", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -75617,22 +74897,6 @@ ], "description": "read the specified PriorityLevelConfiguration", "operationId": "readFlowcontrolApiserverV1beta1PriorityLevelConfiguration", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -76918,22 +76182,6 @@ ], "description": "read the specified StorageVersion", "operationId": "readInternalApiserverV1alpha1StorageVersion", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -77989,22 +77237,6 @@ ], "description": "read the specified IngressClass", "operationId": "readNetworkingV1IngressClass", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -78695,22 +77927,6 @@ ], "description": "read the specified Ingress", "operationId": "readNetworkingV1NamespacedIngress", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -79494,22 +78710,6 @@ ], "description": "read the specified NetworkPolicy", "operationId": "readNetworkingV1NamespacedNetworkPolicy", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -81177,22 +80377,6 @@ ], "description": "read the specified IngressClass", "operationId": "readNetworkingV1beta1IngressClass", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -81883,22 +81067,6 @@ ], "description": "read the specified Ingress", "operationId": "readNetworkingV1beta1NamespacedIngress", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -83327,22 +82495,6 @@ ], "description": "read the specified RuntimeClass", "operationId": "readNodeV1RuntimeClass", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -84177,22 +83329,6 @@ ], "description": "read the specified RuntimeClass", "operationId": "readNodeV1alpha1RuntimeClass", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -85027,22 +84163,6 @@ ], "description": "read the specified RuntimeClass", "operationId": "readNodeV1beta1RuntimeClass", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -85918,22 +85038,6 @@ ], "description": "read the specified PodDisruptionBudget", "operationId": "readPolicyV1beta1NamespacedPodDisruptionBudget", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -86820,22 +85924,6 @@ ], "description": "read the specified PodSecurityPolicy", "operationId": "readPolicyV1beta1PodSecurityPolicy", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -99328,22 +98416,6 @@ ], "description": "read the specified PriorityClass", "operationId": "readSchedulingV1PriorityClass", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -100178,22 +99250,6 @@ ], "description": "read the specified PriorityClass", "operationId": "readSchedulingV1alpha1PriorityClass", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -101028,22 +100084,6 @@ ], "description": "read the specified PriorityClass", "operationId": "readSchedulingV1beta1PriorityClass", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -101911,22 +100951,6 @@ ], "description": "read the specified CSIDriver", "operationId": "readStorageV1CSIDriver", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -102498,22 +101522,6 @@ ], "description": "read the specified CSINode", "operationId": "readStorageV1CSINode", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -103085,22 +102093,6 @@ ], "description": "read the specified StorageClass", "operationId": "readStorageV1StorageClass", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -103672,22 +102664,6 @@ ], "description": "read the specified VolumeAttachment", "operationId": "readStorageV1VolumeAttachment", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -105519,22 +104495,6 @@ ], "description": "read the specified CSIStorageCapacity", "operationId": "readStorageV1alpha1NamespacedCSIStorageCapacity", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -106114,22 +105074,6 @@ ], "description": "read the specified VolumeAttachment", "operationId": "readStorageV1alpha1VolumeAttachment", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -107321,22 +106265,6 @@ ], "description": "read the specified CSIDriver", "operationId": "readStorageV1beta1CSIDriver", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -107908,22 +106836,6 @@ ], "description": "read the specified CSINode", "operationId": "readStorageV1beta1CSINode", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -108495,22 +107407,6 @@ ], "description": "read the specified StorageClass", "operationId": "readStorageV1beta1StorageClass", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", @@ -109082,22 +107978,6 @@ ], "description": "read the specified VolumeAttachment", "operationId": "readStorageV1beta1VolumeAttachment", - "parameters": [ - { - "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "exact", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "in": "query", - "name": "export", - "type": "boolean", - "uniqueItems": true - } - ], "produces": [ "application/json", "application/yaml", diff --git a/pkg/api/testing/serialization_test.go b/pkg/api/testing/serialization_test.go index 6c95e78708e..77a50c7d052 100644 --- a/pkg/api/testing/serialization_test.go +++ b/pkg/api/testing/serialization_test.go @@ -167,7 +167,7 @@ var nonRoundTrippableTypes = sets.NewString( "PatchOptions", ) -var commonKinds = []string{"Status", "ListOptions", "DeleteOptions", "ExportOptions", "GetOptions", "CreateOptions", "UpdateOptions", "PatchOptions"} +var commonKinds = []string{"Status", "ListOptions", "DeleteOptions", "GetOptions", "CreateOptions", "UpdateOptions", "PatchOptions"} // TestCommonKindsRegistered verifies that all group/versions registered with // the legacyscheme package have the common kinds. diff --git a/pkg/controlplane/import_known_versions_test.go b/pkg/controlplane/import_known_versions_test.go index 64a373d0b8b..3bb74e49940 100644 --- a/pkg/controlplane/import_known_versions_test.go +++ b/pkg/controlplane/import_known_versions_test.go @@ -64,7 +64,6 @@ var typesAllowedTags = map[reflect.Type]bool{ reflect.TypeOf(metav1.OwnerReference{}): true, reflect.TypeOf(metav1.LabelSelector{}): true, reflect.TypeOf(metav1.GetOptions{}): true, - reflect.TypeOf(metav1.ExportOptions{}): true, reflect.TypeOf(metav1.ListOptions{}): true, reflect.TypeOf(metav1.DeleteOptions{}): true, reflect.TypeOf(metav1.GroupVersionKind{}): true, diff --git a/pkg/controlplane/instance_test.go b/pkg/controlplane/instance_test.go index 80789ac34f5..f1839edd889 100644 --- a/pkg/controlplane/instance_test.go +++ b/pkg/controlplane/instance_test.go @@ -160,18 +160,7 @@ func TestLegacyRestStorageStrategies(t *testing.T) { t.Errorf("failed to create legacy REST storage: %v", err) } - // Any new stores with export logic will need to be added here: - exceptions := registrytest.StrategyExceptions{ - // Only these stores should have an export strategy defined: - HasExportStrategy: []string{ - "secrets", - "limitRanges", - "nodes", - "podTemplates", - }, - } - - strategyErrors := registrytest.ValidateStorageStrategies(apiGroupInfo.VersionedResourcesStorageMap["v1"], exceptions) + strategyErrors := registrytest.ValidateStorageStrategies(apiGroupInfo.VersionedResourcesStorageMap["v1"]) for _, err := range strategyErrors { t.Error(err) } @@ -187,14 +176,8 @@ func TestCertificatesRestStorageStrategies(t *testing.T) { t.Fatalf("unexpected error from REST storage: %v", err) } - exceptions := registrytest.StrategyExceptions{ - HasExportStrategy: []string{ - "certificatesigningrequests", - }, - } - strategyErrors := registrytest.ValidateStorageStrategies( - apiGroupInfo.VersionedResourcesStorageMap[certificatesapiv1beta1.SchemeGroupVersion.Version], exceptions) + apiGroupInfo.VersionedResourcesStorageMap[certificatesapiv1beta1.SchemeGroupVersion.Version]) for _, err := range strategyErrors { t.Error(err) } diff --git a/pkg/registry/certificates/certificates/storage/storage.go b/pkg/registry/certificates/certificates/storage/storage.go index 8de9d57a58e..6e24dfd02fc 100644 --- a/pkg/registry/certificates/certificates/storage/storage.go +++ b/pkg/registry/certificates/certificates/storage/storage.go @@ -46,7 +46,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, *Approva CreateStrategy: csrregistry.Strategy, UpdateStrategy: csrregistry.Strategy, DeleteStrategy: csrregistry.Strategy, - ExportStrategy: csrregistry.Strategy, TableConvertor: printerstorage.TableConvertor{TableGenerator: printers.NewTableGenerator().With(printersinternal.AddHandlers)}, } diff --git a/pkg/registry/certificates/certificates/strategy.go b/pkg/registry/certificates/certificates/strategy.go index 13d61c10d95..67bd853ceae 100644 --- a/pkg/registry/certificates/certificates/strategy.go +++ b/pkg/registry/certificates/certificates/strategy.go @@ -118,21 +118,6 @@ func (csrStrategy) AllowUnconditionalUpdate() bool { return true } -func (s csrStrategy) Export(ctx context.Context, obj runtime.Object, exact bool) error { - csr, ok := obj.(*certificates.CertificateSigningRequest) - if !ok { - // unexpected programmer error - return fmt.Errorf("unexpected object: %v", obj) - } - s.PrepareForCreate(ctx, obj) - if exact { - return nil - } - // CSRs allow direct subresource edits, we clear them without exact so the CSR value can be reused. - csr.Status = certificates.CertificateSigningRequestStatus{} - return nil -} - // Storage strategy for the Status subresource type csrStatusStrategy struct { csrStrategy diff --git a/pkg/registry/core/limitrange/storage/storage.go b/pkg/registry/core/limitrange/storage/storage.go index 95af1d4fd1d..b3fd401f701 100644 --- a/pkg/registry/core/limitrange/storage/storage.go +++ b/pkg/registry/core/limitrange/storage/storage.go @@ -40,7 +40,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, error) { CreateStrategy: limitrange.Strategy, UpdateStrategy: limitrange.Strategy, DeleteStrategy: limitrange.Strategy, - ExportStrategy: limitrange.Strategy, // TODO: define table converter that exposes more than name/creation timestamp TableConvertor: rest.NewDefaultTableConvertor(api.Resource("limitranges")), diff --git a/pkg/registry/core/limitrange/strategy.go b/pkg/registry/core/limitrange/strategy.go index 17e506e46d3..d9af7051a37 100644 --- a/pkg/registry/core/limitrange/strategy.go +++ b/pkg/registry/core/limitrange/strategy.go @@ -72,10 +72,3 @@ func (limitrangeStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.O func (limitrangeStrategy) AllowUnconditionalUpdate() bool { return true } - -func (limitrangeStrategy) Export(context.Context, runtime.Object, bool) error { - // Copied from OpenShift exporter - // TODO: this needs to be fixed - // limitrange.Strategy.PrepareForCreate(ctx, obj) - return nil -} diff --git a/pkg/registry/core/namespace/storage/storage.go b/pkg/registry/core/namespace/storage/storage.go index 91c923533a3..1d66a23203e 100644 --- a/pkg/registry/core/namespace/storage/storage.go +++ b/pkg/registry/core/namespace/storage/storage.go @@ -119,10 +119,6 @@ func (r *REST) Watch(ctx context.Context, options *metainternalversion.ListOptio return r.store.Watch(ctx, options) } -func (r *REST) Export(ctx context.Context, name string, opts metav1.ExportOptions) (runtime.Object, error) { - return r.store.Export(ctx, name, opts) -} - // Delete enforces life-cycle rules for namespace termination func (r *REST) Delete(ctx context.Context, name string, deleteValidation rest.ValidateObjectFunc, options *metav1.DeleteOptions) (runtime.Object, bool, error) { nsObj, err := r.Get(ctx, name, &metav1.GetOptions{}) diff --git a/pkg/registry/core/node/storage/storage.go b/pkg/registry/core/node/storage/storage.go index 2716190f2b0..8357a450ba4 100644 --- a/pkg/registry/core/node/storage/storage.go +++ b/pkg/registry/core/node/storage/storage.go @@ -88,7 +88,6 @@ func NewStorage(optsGetter generic.RESTOptionsGetter, kubeletClientConfig client CreateStrategy: node.Strategy, UpdateStrategy: node.Strategy, DeleteStrategy: node.Strategy, - ExportStrategy: node.Strategy, TableConvertor: printerstorage.TableConvertor{TableGenerator: printers.NewTableGenerator().With(printersinternal.AddHandlers)}, } diff --git a/pkg/registry/core/node/strategy.go b/pkg/registry/core/node/strategy.go index aaddb69e72a..e415b176bf5 100644 --- a/pkg/registry/core/node/strategy.go +++ b/pkg/registry/core/node/strategy.go @@ -141,22 +141,6 @@ func (nodeStrategy) AllowUnconditionalUpdate() bool { return true } -func (ns nodeStrategy) Export(ctx context.Context, obj runtime.Object, exact bool) error { - n, ok := obj.(*api.Node) - if !ok { - // unexpected programmer error - return fmt.Errorf("unexpected object: %v", obj) - } - ns.PrepareForCreate(ctx, obj) - if exact { - return nil - } - // Nodes are the only resources that allow direct status edits, therefore - // we clear that without exact so that the node value can be reused. - n.Status = api.NodeStatus{} - return nil -} - type nodeStatusStrategy struct { nodeStrategy } diff --git a/pkg/registry/core/podtemplate/storage/storage.go b/pkg/registry/core/podtemplate/storage/storage.go index 624290c067b..d7dca23868a 100644 --- a/pkg/registry/core/podtemplate/storage/storage.go +++ b/pkg/registry/core/podtemplate/storage/storage.go @@ -42,7 +42,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, error) { CreateStrategy: podtemplate.Strategy, UpdateStrategy: podtemplate.Strategy, DeleteStrategy: podtemplate.Strategy, - ExportStrategy: podtemplate.Strategy, ReturnDeletedObject: true, diff --git a/pkg/registry/core/podtemplate/strategy.go b/pkg/registry/core/podtemplate/strategy.go index 65055785a06..1b26dfab351 100644 --- a/pkg/registry/core/podtemplate/strategy.go +++ b/pkg/registry/core/podtemplate/strategy.go @@ -87,8 +87,3 @@ func (podTemplateStrategy) ValidateUpdate(ctx context.Context, obj, old runtime. func (podTemplateStrategy) AllowUnconditionalUpdate() bool { return true } - -func (podTemplateStrategy) Export(ctx context.Context, obj runtime.Object, exact bool) error { - // Do nothing - return nil -} diff --git a/pkg/registry/core/secret/BUILD b/pkg/registry/core/secret/BUILD index 4c88ba54abd..61412731397 100644 --- a/pkg/registry/core/secret/BUILD +++ b/pkg/registry/core/secret/BUILD @@ -17,7 +17,6 @@ go_library( "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/validation:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", @@ -37,9 +36,6 @@ go_test( "//pkg/api/testing:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/apis/core/install:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", ], ) diff --git a/pkg/registry/core/secret/storage/storage.go b/pkg/registry/core/secret/storage/storage.go index 8faf5f9a3b5..81e2892df57 100644 --- a/pkg/registry/core/secret/storage/storage.go +++ b/pkg/registry/core/secret/storage/storage.go @@ -44,7 +44,6 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, error) { CreateStrategy: secret.Strategy, UpdateStrategy: secret.Strategy, DeleteStrategy: secret.Strategy, - ExportStrategy: secret.Strategy, TableConvertor: printerstorage.TableConvertor{TableGenerator: printers.NewTableGenerator().With(printersinternal.AddHandlers)}, } diff --git a/pkg/registry/core/secret/strategy.go b/pkg/registry/core/secret/strategy.go index ce2ea2b4d77..9d86faf1282 100644 --- a/pkg/registry/core/secret/strategy.go +++ b/pkg/registry/core/secret/strategy.go @@ -20,7 +20,6 @@ import ( "context" "fmt" - "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" @@ -85,26 +84,6 @@ func (strategy) AllowUnconditionalUpdate() bool { return true } -func (s strategy) Export(ctx context.Context, obj runtime.Object, exact bool) error { - t, ok := obj.(*api.Secret) - if !ok { - // unexpected programmer error - return fmt.Errorf("unexpected object: %v", obj) - } - s.PrepareForCreate(ctx, obj) - if exact { - return nil - } - // secrets that are tied to the UID of a service account cannot be exported anyway - if t.Type == api.SecretTypeServiceAccountToken || len(t.Annotations[api.ServiceAccountUIDKey]) > 0 { - errs := []*field.Error{ - field.Invalid(field.NewPath("type"), t, "can not export service account secrets"), - } - return errors.NewInvalid(api.Kind("Secret"), t.Name, errs) - } - return nil -} - // GetAttrs returns labels and fields of a given object for filtering purposes. func GetAttrs(obj runtime.Object) (labels.Set, fields.Set, error) { secret, ok := obj.(*api.Secret) diff --git a/pkg/registry/core/secret/strategy_test.go b/pkg/registry/core/secret/strategy_test.go index d942e26f130..252f3ad8a4a 100644 --- a/pkg/registry/core/secret/strategy_test.go +++ b/pkg/registry/core/secret/strategy_test.go @@ -17,12 +17,8 @@ limitations under the License. package secret import ( - "reflect" "testing" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - genericapirequest "k8s.io/apiserver/pkg/endpoints/request" apitesting "k8s.io/kubernetes/pkg/api/testing" api "k8s.io/kubernetes/pkg/apis/core" @@ -30,80 +26,6 @@ import ( _ "k8s.io/kubernetes/pkg/apis/core/install" ) -func TestExportSecret(t *testing.T) { - tests := []struct { - objIn runtime.Object - objOut runtime.Object - exact bool - expectErr bool - }{ - { - objIn: &api.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "bar", - }, - Data: map[string][]byte{ - "foo": []byte("bar"), - }, - }, - objOut: &api.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "bar", - }, - Data: map[string][]byte{ - "foo": []byte("bar"), - }, - }, - exact: true, - }, - { - objIn: &api.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "bar", - }, - Type: api.SecretTypeServiceAccountToken, - }, - expectErr: true, - }, - { - objIn: &api.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "bar", - Annotations: map[string]string{ - api.ServiceAccountUIDKey: "true", - }, - }, - }, - expectErr: true, - }, - { - objIn: &api.Pod{}, - expectErr: true, - }, - } - - for _, test := range tests { - err := Strategy.Export(genericapirequest.NewContext(), test.objIn, test.exact) - if err != nil { - if !test.expectErr { - t.Errorf("unexpected error: %v", err) - } - continue - } - if test.expectErr { - t.Error("unexpected non-error") - continue - } - if !reflect.DeepEqual(test.objIn, test.objOut) { - t.Errorf("expected:\n%v\nsaw:\n%v\n", test.objOut, test.objIn) - } - } -} - func TestSelectableFieldLabelConversions(t *testing.T) { apitesting.TestSelectableFieldLabelConversionsOfKind(t, "v1", diff --git a/pkg/registry/core/service/storage/rest.go b/pkg/registry/core/service/storage/rest.go index 694120a2302..06663d947ff 100644 --- a/pkg/registry/core/service/storage/rest.go +++ b/pkg/registry/core/service/storage/rest.go @@ -79,7 +79,6 @@ type ServiceStorage interface { rest.CreaterUpdater rest.GracefulDeleter rest.Watcher - rest.Exporter rest.StorageVersionProvider } @@ -189,10 +188,6 @@ func (rs *REST) Watch(ctx context.Context, options *metainternalversion.ListOpti return rs.services.Watch(ctx, options) } -func (rs *REST) Export(ctx context.Context, name string, opts metav1.ExportOptions) (runtime.Object, error) { - return rs.services.Export(ctx, name, opts) -} - func (rs *REST) Create(ctx context.Context, obj runtime.Object, createValidation rest.ValidateObjectFunc, options *metav1.CreateOptions) (runtime.Object, error) { service := obj.(*api.Service) diff --git a/pkg/registry/core/service/storage/rest_test.go b/pkg/registry/core/service/storage/rest_test.go index c54b4efa777..4721988b9b7 100644 --- a/pkg/registry/core/service/storage/rest_test.go +++ b/pkg/registry/core/service/storage/rest_test.go @@ -163,10 +163,6 @@ func (s *serviceStorage) ConvertToTable(ctx context.Context, object runtime.Obje panic("not implemented") } -func (s *serviceStorage) Export(ctx context.Context, name string, opts metav1.ExportOptions) (runtime.Object, error) { - panic("not implemented") -} - func (s *serviceStorage) StorageVersion() runtime.GroupVersioner { panic("not implemented") } diff --git a/pkg/registry/core/service/storage/storage.go b/pkg/registry/core/service/storage/storage.go index 6aabaec0f2b..a704239fe23 100644 --- a/pkg/registry/core/service/storage/storage.go +++ b/pkg/registry/core/service/storage/storage.go @@ -57,7 +57,6 @@ func NewGenericREST(optsGetter generic.RESTOptionsGetter, serviceCIDR net.IPNet, CreateStrategy: strategy, UpdateStrategy: strategy, DeleteStrategy: strategy, - ExportStrategy: strategy, TableConvertor: printerstorage.TableConvertor{TableGenerator: printers.NewTableGenerator().With(printersinternal.AddHandlers)}, } diff --git a/pkg/registry/core/service/strategy.go b/pkg/registry/core/service/strategy.go index 79c8b7c7d8b..bf6882e75d5 100644 --- a/pkg/registry/core/service/strategy.go +++ b/pkg/registry/core/service/strategy.go @@ -18,7 +18,6 @@ package service import ( "context" - "fmt" "net" "reflect" @@ -37,7 +36,6 @@ import ( type Strategy interface { rest.RESTCreateUpdateStrategy - rest.RESTExportStrategy } // svcStrategy implements behavior for Services @@ -139,30 +137,6 @@ func (svcStrategy) AllowUnconditionalUpdate() bool { return true } -func (svcStrategy) Export(ctx context.Context, obj runtime.Object, exact bool) error { - t, ok := obj.(*api.Service) - if !ok { - // unexpected programmer error - return fmt.Errorf("unexpected object: %v", obj) - } - // TODO: service does not yet have a prepare create strategy (see above) - t.Status = api.ServiceStatus{} - if exact { - return nil - } - //set ClusterIPs as nil - if ClusterIPs[0] != None - if len(t.Spec.ClusterIPs) > 0 && t.Spec.ClusterIPs[0] != api.ClusterIPNone { - t.Spec.ClusterIP = "" - t.Spec.ClusterIPs = nil - } - if t.Spec.Type == api.ServiceTypeNodePort { - for i := range t.Spec.Ports { - t.Spec.Ports[i].NodePort = 0 - } - } - return nil -} - // dropServiceDisabledFields drops fields that are not used if their associated feature gates // are not enabled. The typical pattern is: // if !utilfeature.DefaultFeatureGate.Enabled(features.MyFeature) && !myFeatureInUse(oldSvc) { diff --git a/pkg/registry/core/service/strategy_test.go b/pkg/registry/core/service/strategy_test.go index 5f130afdd82..7ee2cbabbc7 100644 --- a/pkg/registry/core/service/strategy_test.go +++ b/pkg/registry/core/service/strategy_test.go @@ -47,115 +47,6 @@ func newStrategy(cidr string, hasSecondary bool) (testStrategy Strategy, testSta return } -func TestExportService(t *testing.T) { - testStrategy, _ := newStrategy("10.0.0.0/16", false) - tests := []struct { - objIn runtime.Object - objOut runtime.Object - exact bool - expectErr bool - }{ - { - objIn: &api.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "bar", - }, - Status: api.ServiceStatus{ - LoadBalancer: api.LoadBalancerStatus{ - Ingress: []api.LoadBalancerIngress{ - {IP: "1.2.3.4"}, - }, - }, - }, - }, - objOut: &api.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "bar", - }, - }, - exact: true, - }, - { - objIn: &api.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "bar", - }, - Spec: api.ServiceSpec{ - ClusterIPs: []string{"10.0.0.1"}, - }, - Status: api.ServiceStatus{ - LoadBalancer: api.LoadBalancerStatus{ - Ingress: []api.LoadBalancerIngress{ - {IP: "1.2.3.4"}, - }, - }, - }, - }, - objOut: &api.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "bar", - }, - Spec: api.ServiceSpec{ - ClusterIPs: nil, - }, - }, - }, - { - objIn: &api.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "bar", - }, - Spec: api.ServiceSpec{ - ClusterIPs: []string{"10.0.0.1", "2001::1"}, - }, - Status: api.ServiceStatus{ - LoadBalancer: api.LoadBalancerStatus{ - Ingress: []api.LoadBalancerIngress{ - {IP: "1.2.3.4"}, - }, - }, - }, - }, - objOut: &api.Service{ - ObjectMeta: metav1.ObjectMeta{ - Name: "foo", - Namespace: "bar", - }, - Spec: api.ServiceSpec{ - ClusterIPs: nil, - }, - }, - }, - - { - objIn: &api.Pod{}, - expectErr: true, - }, - } - - for _, test := range tests { - err := testStrategy.Export(genericapirequest.NewContext(), test.objIn, test.exact) - if err != nil { - if !test.expectErr { - t.Errorf("unexpected error: %v", err) - } - continue - } - if test.expectErr { - t.Error("unexpected non-error") - continue - } - if !reflect.DeepEqual(test.objIn, test.objOut) { - t.Errorf("expected:\n%v\nsaw:\n%v\n", test.objOut, test.objIn) - } - } -} - func TestCheckGeneratedNameError(t *testing.T) { testStrategy, _ := newStrategy("10.0.0.0/16", false) expect := errors.NewNotFound(api.Resource("foos"), "bar") diff --git a/pkg/registry/registrytest/BUILD b/pkg/registry/registrytest/BUILD index 2c2e1a75073..d5031ec3694 100644 --- a/pkg/registry/registrytest/BUILD +++ b/pkg/registry/registrytest/BUILD @@ -21,7 +21,6 @@ go_library( deps = [ "//pkg/apis/core:go_default_library", "//pkg/kubeapiserver:go_default_library", - "//pkg/util/slice:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/internalversion:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/registry/registrytest/service.go b/pkg/registry/registrytest/service.go index 490bc0e37e5..72a4a1fde6f 100644 --- a/pkg/registry/registrytest/service.go +++ b/pkg/registry/registrytest/service.go @@ -117,10 +117,3 @@ func (r *ServiceRegistry) WatchServices(ctx context.Context, options *metaintern return nil, r.Err } - -func (r *ServiceRegistry) ExportService(ctx context.Context, name string, options metav1.ExportOptions) (*api.Service, error) { - r.mu.Lock() - defer r.mu.Unlock() - - return r.Service, r.Err -} diff --git a/pkg/registry/registrytest/validate.go b/pkg/registry/registrytest/validate.go index 9016d57e5a1..63612d0c546 100644 --- a/pkg/registry/registrytest/validate.go +++ b/pkg/registry/registrytest/validate.go @@ -21,17 +21,13 @@ import ( "k8s.io/apiserver/pkg/registry/generic/registry" "k8s.io/apiserver/pkg/registry/rest" - "k8s.io/kubernetes/pkg/util/slice" ) // ValidateStorageStrategies ensures any instances of the generic registry.Store in the given storage map // have expected strategies defined. -func ValidateStorageStrategies(storageMap map[string]rest.Storage, exceptions StrategyExceptions) []error { +func ValidateStorageStrategies(storageMap map[string]rest.Storage) []error { errs := []error{} - // Used to ensure we saw all the expected exceptions: - hasExportExceptionsSeen := []string{} - for k, storage := range storageMap { switch t := storage.(type) { case registry.GenericStore: @@ -46,27 +42,6 @@ func ValidateStorageStrategies(storageMap map[string]rest.Storage, exceptions St if t.GetDeleteStrategy() == nil { errs = append(errs, fmt.Errorf("store for type [%v] does not have a DeleteStrategy", k)) } - - // Check that ExportStrategy is set if applicable: - if slice.ContainsString(exceptions.HasExportStrategy, k, nil) { - hasExportExceptionsSeen = append(hasExportExceptionsSeen, k) - if t.GetExportStrategy() == nil { - errs = append(errs, fmt.Errorf("store for type [%v] does not have an ExportStrategy", k)) - } - } else { - // By default we expect Stores to not have additional export logic: - if t.GetExportStrategy() != nil { - errs = append(errs, fmt.Errorf("store for type [%v] has an unexpected ExportStrategy", k)) - } - } - - } - } - - // Ensure that we saw all our expected exceptions: - for _, expKey := range exceptions.HasExportStrategy { - if !slice.ContainsString(hasExportExceptionsSeen, expKey, nil) { - errs = append(errs, fmt.Errorf("no generic store seen for expected ExportStrategy: %v", expKey)) } } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go index 99a9481cad7..b317e30ebd2 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go @@ -388,7 +388,7 @@ func (r *crdHandler) serveResource(w http.ResponseWriter, req *http.Request, req switch requestInfo.Verb { case "get": - return handlers.GetResource(storage, storage, requestScope) + return handlers.GetResource(storage, requestScope) case "list": forceWatch := false return handlers.ListResource(storage, storage, requestScope, forceWatch, r.minRequestTimeout) @@ -428,7 +428,7 @@ func (r *crdHandler) serveStatus(w http.ResponseWriter, req *http.Request, reque switch requestInfo.Verb { case "get": - return handlers.GetResource(storage, nil, requestScope) + return handlers.GetResource(storage, requestScope) case "update": return handlers.UpdateResource(storage, requestScope, r.admission) case "patch": @@ -448,7 +448,7 @@ func (r *crdHandler) serveScale(w http.ResponseWriter, req *http.Request, reques switch requestInfo.Verb { case "get": - return handlers.GetResource(storage, nil, requestScope) + return handlers.GetResource(storage, requestScope) case "update": return handlers.UpdateResource(storage, requestScope, r.admission) case "patch": @@ -698,7 +698,6 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd parameterScheme := runtime.NewScheme() parameterScheme.AddUnversionedTypes(schema.GroupVersion{Group: crd.Spec.Group, Version: v.Name}, &metav1.ListOptions{}, - &metav1.ExportOptions{}, &metav1.GetOptions{}, &metav1.DeleteOptions{}, ) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go index 4a1d1abd447..6d5911d9643 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go @@ -60,7 +60,6 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/apimachinery/pkg/apis/meta/v1.CreateOptions": schema_pkg_apis_meta_v1_CreateOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.DeleteOptions": schema_pkg_apis_meta_v1_DeleteOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.Duration": schema_pkg_apis_meta_v1_Duration(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.ExportOptions": schema_pkg_apis_meta_v1_ExportOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.FieldsV1": schema_pkg_apis_meta_v1_FieldsV1(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.GetOptions": schema_pkg_apis_meta_v1_GetOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.GroupKind": schema_pkg_apis_meta_v1_GroupKind(ref), @@ -1560,50 +1559,6 @@ func schema_pkg_apis_meta_v1_Duration(ref common.ReferenceCallback) common.OpenA } } -func schema_pkg_apis_meta_v1_ExportOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExportOptions is the query options to the standard REST get call. Deprecated. Planned for removal in 1.18.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "export": { - SchemaProps: spec.SchemaProps{ - Description: "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - Default: false, - Type: []string{"boolean"}, - Format: "", - }, - }, - "exact": { - SchemaProps: spec.SchemaProps{ - Description: "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - Default: false, - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"export", "exact"}, - }, - }, - } -} - func schema_pkg_apis_meta_v1_FieldsV1(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go index 1bd740d7fff..8612eeeb31f 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/registry/customresource/etcd_test.go @@ -55,7 +55,6 @@ func newStorage(t *testing.T) (customresource.CustomResourceStorage, *etcd3testi parameterScheme := runtime.NewScheme() parameterScheme.AddUnversionedTypes(schema.GroupVersion{Group: "mygroup.example.com", Version: "v1beta1"}, &metav1.ListOptions{}, - &metav1.ExportOptions{}, &metav1.GetOptions{}, &metav1.DeleteOptions{}, ) diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go index ae39b74eb24..a59ac71268b 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go @@ -52,7 +52,6 @@ func addToGroupVersion(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &ListOptions{}, &metav1.GetOptions{}, - &metav1.ExportOptions{}, &metav1.DeleteOptions{}, &metav1.CreateOptions{}, &metav1.UpdateOptions{}, diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go index e74a51099d2..9ed3360da52 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go @@ -301,38 +301,10 @@ func (m *Duration) XXX_DiscardUnknown() { var xxx_messageInfo_Duration proto.InternalMessageInfo -func (m *ExportOptions) Reset() { *m = ExportOptions{} } -func (*ExportOptions) ProtoMessage() {} -func (*ExportOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{9} -} -func (m *ExportOptions) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ExportOptions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *ExportOptions) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExportOptions.Merge(m, src) -} -func (m *ExportOptions) XXX_Size() int { - return m.Size() -} -func (m *ExportOptions) XXX_DiscardUnknown() { - xxx_messageInfo_ExportOptions.DiscardUnknown(m) -} - -var xxx_messageInfo_ExportOptions proto.InternalMessageInfo - func (m *FieldsV1) Reset() { *m = FieldsV1{} } func (*FieldsV1) ProtoMessage() {} func (*FieldsV1) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{10} + return fileDescriptor_cf52fa777ced5367, []int{9} } func (m *FieldsV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -360,7 +332,7 @@ var xxx_messageInfo_FieldsV1 proto.InternalMessageInfo func (m *GetOptions) Reset() { *m = GetOptions{} } func (*GetOptions) ProtoMessage() {} func (*GetOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{11} + return fileDescriptor_cf52fa777ced5367, []int{10} } func (m *GetOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -388,7 +360,7 @@ var xxx_messageInfo_GetOptions proto.InternalMessageInfo func (m *GroupKind) Reset() { *m = GroupKind{} } func (*GroupKind) ProtoMessage() {} func (*GroupKind) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{12} + return fileDescriptor_cf52fa777ced5367, []int{11} } func (m *GroupKind) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -416,7 +388,7 @@ var xxx_messageInfo_GroupKind proto.InternalMessageInfo func (m *GroupResource) Reset() { *m = GroupResource{} } func (*GroupResource) ProtoMessage() {} func (*GroupResource) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{13} + return fileDescriptor_cf52fa777ced5367, []int{12} } func (m *GroupResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -444,7 +416,7 @@ var xxx_messageInfo_GroupResource proto.InternalMessageInfo func (m *GroupVersion) Reset() { *m = GroupVersion{} } func (*GroupVersion) ProtoMessage() {} func (*GroupVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{14} + return fileDescriptor_cf52fa777ced5367, []int{13} } func (m *GroupVersion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -472,7 +444,7 @@ var xxx_messageInfo_GroupVersion proto.InternalMessageInfo func (m *GroupVersionForDiscovery) Reset() { *m = GroupVersionForDiscovery{} } func (*GroupVersionForDiscovery) ProtoMessage() {} func (*GroupVersionForDiscovery) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{15} + return fileDescriptor_cf52fa777ced5367, []int{14} } func (m *GroupVersionForDiscovery) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -500,7 +472,7 @@ var xxx_messageInfo_GroupVersionForDiscovery proto.InternalMessageInfo func (m *GroupVersionKind) Reset() { *m = GroupVersionKind{} } func (*GroupVersionKind) ProtoMessage() {} func (*GroupVersionKind) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{16} + return fileDescriptor_cf52fa777ced5367, []int{15} } func (m *GroupVersionKind) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -528,7 +500,7 @@ var xxx_messageInfo_GroupVersionKind proto.InternalMessageInfo func (m *GroupVersionResource) Reset() { *m = GroupVersionResource{} } func (*GroupVersionResource) ProtoMessage() {} func (*GroupVersionResource) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{17} + return fileDescriptor_cf52fa777ced5367, []int{16} } func (m *GroupVersionResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -556,7 +528,7 @@ var xxx_messageInfo_GroupVersionResource proto.InternalMessageInfo func (m *LabelSelector) Reset() { *m = LabelSelector{} } func (*LabelSelector) ProtoMessage() {} func (*LabelSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{18} + return fileDescriptor_cf52fa777ced5367, []int{17} } func (m *LabelSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -584,7 +556,7 @@ var xxx_messageInfo_LabelSelector proto.InternalMessageInfo func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequirement{} } func (*LabelSelectorRequirement) ProtoMessage() {} func (*LabelSelectorRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{19} + return fileDescriptor_cf52fa777ced5367, []int{18} } func (m *LabelSelectorRequirement) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -612,7 +584,7 @@ var xxx_messageInfo_LabelSelectorRequirement proto.InternalMessageInfo func (m *List) Reset() { *m = List{} } func (*List) ProtoMessage() {} func (*List) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{20} + return fileDescriptor_cf52fa777ced5367, []int{19} } func (m *List) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -640,7 +612,7 @@ var xxx_messageInfo_List proto.InternalMessageInfo func (m *ListMeta) Reset() { *m = ListMeta{} } func (*ListMeta) ProtoMessage() {} func (*ListMeta) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{21} + return fileDescriptor_cf52fa777ced5367, []int{20} } func (m *ListMeta) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -668,7 +640,7 @@ var xxx_messageInfo_ListMeta proto.InternalMessageInfo func (m *ListOptions) Reset() { *m = ListOptions{} } func (*ListOptions) ProtoMessage() {} func (*ListOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{22} + return fileDescriptor_cf52fa777ced5367, []int{21} } func (m *ListOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -696,7 +668,7 @@ var xxx_messageInfo_ListOptions proto.InternalMessageInfo func (m *ManagedFieldsEntry) Reset() { *m = ManagedFieldsEntry{} } func (*ManagedFieldsEntry) ProtoMessage() {} func (*ManagedFieldsEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{23} + return fileDescriptor_cf52fa777ced5367, []int{22} } func (m *ManagedFieldsEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -724,7 +696,7 @@ var xxx_messageInfo_ManagedFieldsEntry proto.InternalMessageInfo func (m *MicroTime) Reset() { *m = MicroTime{} } func (*MicroTime) ProtoMessage() {} func (*MicroTime) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{24} + return fileDescriptor_cf52fa777ced5367, []int{23} } func (m *MicroTime) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MicroTime.Unmarshal(m, b) @@ -747,7 +719,7 @@ var xxx_messageInfo_MicroTime proto.InternalMessageInfo func (m *ObjectMeta) Reset() { *m = ObjectMeta{} } func (*ObjectMeta) ProtoMessage() {} func (*ObjectMeta) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{25} + return fileDescriptor_cf52fa777ced5367, []int{24} } func (m *ObjectMeta) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -775,7 +747,7 @@ var xxx_messageInfo_ObjectMeta proto.InternalMessageInfo func (m *OwnerReference) Reset() { *m = OwnerReference{} } func (*OwnerReference) ProtoMessage() {} func (*OwnerReference) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{26} + return fileDescriptor_cf52fa777ced5367, []int{25} } func (m *OwnerReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -803,7 +775,7 @@ var xxx_messageInfo_OwnerReference proto.InternalMessageInfo func (m *PartialObjectMetadata) Reset() { *m = PartialObjectMetadata{} } func (*PartialObjectMetadata) ProtoMessage() {} func (*PartialObjectMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{27} + return fileDescriptor_cf52fa777ced5367, []int{26} } func (m *PartialObjectMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -831,7 +803,7 @@ var xxx_messageInfo_PartialObjectMetadata proto.InternalMessageInfo func (m *PartialObjectMetadataList) Reset() { *m = PartialObjectMetadataList{} } func (*PartialObjectMetadataList) ProtoMessage() {} func (*PartialObjectMetadataList) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{28} + return fileDescriptor_cf52fa777ced5367, []int{27} } func (m *PartialObjectMetadataList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -859,7 +831,7 @@ var xxx_messageInfo_PartialObjectMetadataList proto.InternalMessageInfo func (m *Patch) Reset() { *m = Patch{} } func (*Patch) ProtoMessage() {} func (*Patch) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{29} + return fileDescriptor_cf52fa777ced5367, []int{28} } func (m *Patch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -887,7 +859,7 @@ var xxx_messageInfo_Patch proto.InternalMessageInfo func (m *PatchOptions) Reset() { *m = PatchOptions{} } func (*PatchOptions) ProtoMessage() {} func (*PatchOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{30} + return fileDescriptor_cf52fa777ced5367, []int{29} } func (m *PatchOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -915,7 +887,7 @@ var xxx_messageInfo_PatchOptions proto.InternalMessageInfo func (m *Preconditions) Reset() { *m = Preconditions{} } func (*Preconditions) ProtoMessage() {} func (*Preconditions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{31} + return fileDescriptor_cf52fa777ced5367, []int{30} } func (m *Preconditions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -943,7 +915,7 @@ var xxx_messageInfo_Preconditions proto.InternalMessageInfo func (m *RootPaths) Reset() { *m = RootPaths{} } func (*RootPaths) ProtoMessage() {} func (*RootPaths) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{32} + return fileDescriptor_cf52fa777ced5367, []int{31} } func (m *RootPaths) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -971,7 +943,7 @@ var xxx_messageInfo_RootPaths proto.InternalMessageInfo func (m *ServerAddressByClientCIDR) Reset() { *m = ServerAddressByClientCIDR{} } func (*ServerAddressByClientCIDR) ProtoMessage() {} func (*ServerAddressByClientCIDR) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{33} + return fileDescriptor_cf52fa777ced5367, []int{32} } func (m *ServerAddressByClientCIDR) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -999,7 +971,7 @@ var xxx_messageInfo_ServerAddressByClientCIDR proto.InternalMessageInfo func (m *Status) Reset() { *m = Status{} } func (*Status) ProtoMessage() {} func (*Status) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{34} + return fileDescriptor_cf52fa777ced5367, []int{33} } func (m *Status) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1027,7 +999,7 @@ var xxx_messageInfo_Status proto.InternalMessageInfo func (m *StatusCause) Reset() { *m = StatusCause{} } func (*StatusCause) ProtoMessage() {} func (*StatusCause) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{35} + return fileDescriptor_cf52fa777ced5367, []int{34} } func (m *StatusCause) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1055,7 +1027,7 @@ var xxx_messageInfo_StatusCause proto.InternalMessageInfo func (m *StatusDetails) Reset() { *m = StatusDetails{} } func (*StatusDetails) ProtoMessage() {} func (*StatusDetails) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{36} + return fileDescriptor_cf52fa777ced5367, []int{35} } func (m *StatusDetails) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1083,7 +1055,7 @@ var xxx_messageInfo_StatusDetails proto.InternalMessageInfo func (m *TableOptions) Reset() { *m = TableOptions{} } func (*TableOptions) ProtoMessage() {} func (*TableOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{37} + return fileDescriptor_cf52fa777ced5367, []int{36} } func (m *TableOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1111,7 +1083,7 @@ var xxx_messageInfo_TableOptions proto.InternalMessageInfo func (m *Time) Reset() { *m = Time{} } func (*Time) ProtoMessage() {} func (*Time) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{38} + return fileDescriptor_cf52fa777ced5367, []int{37} } func (m *Time) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Time.Unmarshal(m, b) @@ -1134,7 +1106,7 @@ var xxx_messageInfo_Time proto.InternalMessageInfo func (m *Timestamp) Reset() { *m = Timestamp{} } func (*Timestamp) ProtoMessage() {} func (*Timestamp) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{39} + return fileDescriptor_cf52fa777ced5367, []int{38} } func (m *Timestamp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1162,7 +1134,7 @@ var xxx_messageInfo_Timestamp proto.InternalMessageInfo func (m *TypeMeta) Reset() { *m = TypeMeta{} } func (*TypeMeta) ProtoMessage() {} func (*TypeMeta) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{40} + return fileDescriptor_cf52fa777ced5367, []int{39} } func (m *TypeMeta) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1190,7 +1162,7 @@ var xxx_messageInfo_TypeMeta proto.InternalMessageInfo func (m *UpdateOptions) Reset() { *m = UpdateOptions{} } func (*UpdateOptions) ProtoMessage() {} func (*UpdateOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{41} + return fileDescriptor_cf52fa777ced5367, []int{40} } func (m *UpdateOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1218,7 +1190,7 @@ var xxx_messageInfo_UpdateOptions proto.InternalMessageInfo func (m *Verbs) Reset() { *m = Verbs{} } func (*Verbs) ProtoMessage() {} func (*Verbs) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{42} + return fileDescriptor_cf52fa777ced5367, []int{41} } func (m *Verbs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1246,7 +1218,7 @@ var xxx_messageInfo_Verbs proto.InternalMessageInfo func (m *WatchEvent) Reset() { *m = WatchEvent{} } func (*WatchEvent) ProtoMessage() {} func (*WatchEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_cf52fa777ced5367, []int{43} + return fileDescriptor_cf52fa777ced5367, []int{42} } func (m *WatchEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1281,7 +1253,6 @@ func init() { proto.RegisterType((*CreateOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.CreateOptions") proto.RegisterType((*DeleteOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.DeleteOptions") proto.RegisterType((*Duration)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.Duration") - proto.RegisterType((*ExportOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.ExportOptions") proto.RegisterType((*FieldsV1)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.FieldsV1") proto.RegisterType((*GetOptions)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.GetOptions") proto.RegisterType((*GroupKind)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1.GroupKind") @@ -1326,184 +1297,182 @@ func init() { } var fileDescriptor_cf52fa777ced5367 = []byte{ - // 2832 bytes of a gzipped FileDescriptorProto + // 2792 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x1a, 0xcd, 0x6f, 0x23, 0x57, - 0x3d, 0x63, 0xc7, 0x89, 0xfd, 0x73, 0x9c, 0x8f, 0xb7, 0x59, 0xf0, 0x06, 0x11, 0xa7, 0x53, 0xb4, - 0xda, 0x42, 0xeb, 0x34, 0x4b, 0xa9, 0xb6, 0x5b, 0x5a, 0x88, 0xe3, 0x64, 0x1b, 0x9a, 0x34, 0xd1, - 0xcb, 0xee, 0x02, 0xa5, 0x42, 0x9d, 0x78, 0x5e, 0x9c, 0x21, 0xe3, 0x19, 0xf7, 0xbd, 0x71, 0xb2, - 0x86, 0x03, 0x3d, 0x80, 0x00, 0x09, 0xaa, 0x1e, 0x11, 0x07, 0xd4, 0x0a, 0xfe, 0x02, 0x2e, 0xf0, - 0x07, 0x20, 0xd1, 0x63, 0x25, 0x2e, 0x95, 0x40, 0x56, 0x37, 0x1c, 0x38, 0x22, 0xae, 0xb9, 0x80, - 0xde, 0xc7, 0xcc, 0xbc, 0xf1, 0xc7, 0x66, 0xdc, 0x2d, 0x15, 0x37, 0xcf, 0xef, 0xfb, 0xbd, 0xf7, - 0x7b, 0xbf, 0xaf, 0x67, 0xd8, 0x3d, 0xb9, 0xc5, 0xaa, 0x8e, 0xbf, 0x7a, 0xd2, 0x39, 0x24, 0xd4, - 0x23, 0x01, 0x61, 0xab, 0xa7, 0xc4, 0xb3, 0x7d, 0xba, 0xaa, 0x10, 0x56, 0xdb, 0x69, 0x59, 0x8d, - 0x63, 0xc7, 0x23, 0xb4, 0xbb, 0xda, 0x3e, 0x69, 0x72, 0x00, 0x5b, 0x6d, 0x91, 0xc0, 0x5a, 0x3d, - 0x5d, 0x5b, 0x6d, 0x12, 0x8f, 0x50, 0x2b, 0x20, 0x76, 0xb5, 0x4d, 0xfd, 0xc0, 0x47, 0x5f, 0x92, - 0x5c, 0x55, 0x9d, 0xab, 0xda, 0x3e, 0x69, 0x72, 0x00, 0xab, 0x72, 0xae, 0xea, 0xe9, 0xda, 0xd2, - 0x33, 0x4d, 0x27, 0x38, 0xee, 0x1c, 0x56, 0x1b, 0x7e, 0x6b, 0xb5, 0xe9, 0x37, 0xfd, 0x55, 0xc1, - 0x7c, 0xd8, 0x39, 0x12, 0x5f, 0xe2, 0x43, 0xfc, 0x92, 0x42, 0x97, 0x46, 0x9a, 0x42, 0x3b, 0x5e, - 0xe0, 0xb4, 0x48, 0xbf, 0x15, 0x4b, 0xcf, 0x5f, 0xc6, 0xc0, 0x1a, 0xc7, 0xa4, 0x65, 0xf5, 0xf3, - 0x99, 0x7f, 0xc9, 0x42, 0x7e, 0x7d, 0x7f, 0xfb, 0x0e, 0xf5, 0x3b, 0x6d, 0xb4, 0x02, 0x93, 0x9e, - 0xd5, 0x22, 0x65, 0x63, 0xc5, 0xb8, 0x51, 0xa8, 0xcd, 0x7c, 0xd0, 0xab, 0x4c, 0x9c, 0xf7, 0x2a, - 0x93, 0xaf, 0x59, 0x2d, 0x82, 0x05, 0x06, 0xb9, 0x90, 0x3f, 0x25, 0x94, 0x39, 0xbe, 0xc7, 0xca, - 0x99, 0x95, 0xec, 0x8d, 0xe2, 0xcd, 0x97, 0xab, 0x69, 0xd6, 0x5f, 0x15, 0x0a, 0xee, 0x4b, 0xd6, - 0x2d, 0x9f, 0xd6, 0x1d, 0xd6, 0xf0, 0x4f, 0x09, 0xed, 0xd6, 0xe6, 0x95, 0x96, 0xbc, 0x42, 0x32, - 0x1c, 0x69, 0x40, 0x3f, 0x31, 0x60, 0xbe, 0x4d, 0xc9, 0x11, 0xa1, 0x94, 0xd8, 0x0a, 0x5f, 0xce, - 0xae, 0x18, 0x9f, 0x82, 0xda, 0xb2, 0x52, 0x3b, 0xbf, 0xdf, 0x27, 0x1f, 0x0f, 0x68, 0x44, 0xbf, - 0x33, 0x60, 0x89, 0x11, 0x7a, 0x4a, 0xe8, 0xba, 0x6d, 0x53, 0xc2, 0x58, 0xad, 0xbb, 0xe1, 0x3a, - 0xc4, 0x0b, 0x36, 0xb6, 0xeb, 0x98, 0x95, 0x27, 0xc5, 0x3e, 0x7c, 0x23, 0x9d, 0x41, 0x07, 0xa3, - 0xe4, 0xd4, 0x4c, 0x65, 0xd1, 0xd2, 0x48, 0x12, 0x86, 0x1f, 0x61, 0x86, 0x79, 0x04, 0x33, 0xe1, - 0x41, 0xee, 0x38, 0x2c, 0x40, 0xf7, 0x61, 0xaa, 0xc9, 0x3f, 0x58, 0xd9, 0x10, 0x06, 0x56, 0xd3, - 0x19, 0x18, 0xca, 0xa8, 0xcd, 0x2a, 0x7b, 0xa6, 0xc4, 0x27, 0xc3, 0x4a, 0x9a, 0xf9, 0x8b, 0x49, - 0x28, 0xae, 0xef, 0x6f, 0x63, 0xc2, 0xfc, 0x0e, 0x6d, 0x90, 0x14, 0x4e, 0x73, 0x0b, 0x66, 0x98, - 0xe3, 0x35, 0x3b, 0xae, 0x45, 0x39, 0xb4, 0x3c, 0x25, 0x28, 0x17, 0x15, 0xe5, 0xcc, 0x81, 0x86, - 0xc3, 0x09, 0x4a, 0x74, 0x13, 0x80, 0x4b, 0x60, 0x6d, 0xab, 0x41, 0xec, 0x72, 0x66, 0xc5, 0xb8, - 0x91, 0xaf, 0x21, 0xc5, 0x07, 0xaf, 0x45, 0x18, 0xac, 0x51, 0xa1, 0x27, 0x21, 0x27, 0x2c, 0x2d, - 0xe7, 0x85, 0x9a, 0x92, 0x22, 0xcf, 0x89, 0x65, 0x60, 0x89, 0x43, 0x4f, 0xc1, 0xb4, 0xf2, 0xb2, - 0x72, 0x41, 0x90, 0xcd, 0x29, 0xb2, 0xe9, 0xd0, 0x0d, 0x42, 0x3c, 0x5f, 0xdf, 0x89, 0xe3, 0xd9, - 0xc2, 0xef, 0xb4, 0xf5, 0xbd, 0xea, 0x78, 0x36, 0x16, 0x18, 0xb4, 0x03, 0xb9, 0x53, 0x42, 0x0f, - 0xb9, 0x27, 0x70, 0xd7, 0xfc, 0x4a, 0xba, 0x8d, 0xbe, 0xcf, 0x59, 0x6a, 0x05, 0x6e, 0x9a, 0xf8, - 0x89, 0xa5, 0x10, 0x54, 0x05, 0x60, 0xc7, 0x3e, 0x0d, 0xc4, 0xf2, 0xca, 0xb9, 0x95, 0xec, 0x8d, - 0x42, 0x6d, 0x96, 0xaf, 0xf7, 0x20, 0x82, 0x62, 0x8d, 0x82, 0xd3, 0x37, 0xac, 0x80, 0x34, 0x7d, - 0xea, 0x10, 0x56, 0x9e, 0x8e, 0xe9, 0x37, 0x22, 0x28, 0xd6, 0x28, 0xd0, 0xb7, 0x00, 0xb1, 0xc0, - 0xa7, 0x56, 0x93, 0xa8, 0xa5, 0xbe, 0x62, 0xb1, 0xe3, 0x32, 0x88, 0xd5, 0x2d, 0xa9, 0xd5, 0xa1, - 0x83, 0x01, 0x0a, 0x3c, 0x84, 0xcb, 0xfc, 0x83, 0x01, 0x73, 0x9a, 0x2f, 0x08, 0xbf, 0xbb, 0x05, - 0x33, 0x4d, 0xed, 0xd6, 0x29, 0xbf, 0x88, 0x4e, 0x5b, 0xbf, 0x91, 0x38, 0x41, 0x89, 0x08, 0x14, - 0xa8, 0x92, 0x14, 0x46, 0x97, 0xb5, 0xd4, 0x4e, 0x1b, 0xda, 0x10, 0x6b, 0xd2, 0x80, 0x0c, 0xc7, - 0x92, 0xcd, 0x7f, 0x1a, 0xc2, 0x81, 0xc3, 0x78, 0x83, 0x6e, 0x68, 0x31, 0xcd, 0x10, 0xdb, 0x37, - 0x33, 0x22, 0x1e, 0x5d, 0x12, 0x08, 0x32, 0xff, 0x17, 0x81, 0xe0, 0x76, 0xfe, 0xd7, 0xef, 0x55, - 0x26, 0xde, 0xfe, 0xfb, 0xca, 0x84, 0xf9, 0x9f, 0x0c, 0x14, 0x36, 0x7c, 0xcf, 0x76, 0x02, 0xe5, - 0xc8, 0x41, 0xb7, 0x3d, 0x70, 0x51, 0xef, 0x76, 0xdb, 0x04, 0x0b, 0x0c, 0x7a, 0x01, 0xa6, 0x58, - 0x60, 0x05, 0x1d, 0x26, 0xae, 0x5a, 0xa1, 0xf6, 0x44, 0x18, 0x02, 0x0e, 0x04, 0xf4, 0xa2, 0x57, - 0x99, 0x8b, 0xc4, 0x49, 0x10, 0x56, 0x0c, 0xdc, 0xab, 0xfc, 0x43, 0x61, 0x94, 0x7d, 0x47, 0xa6, - 0x98, 0x30, 0x56, 0x67, 0x63, 0xaf, 0xda, 0x1b, 0xa0, 0xc0, 0x43, 0xb8, 0xd0, 0x29, 0x20, 0xd7, - 0x62, 0xc1, 0x5d, 0x6a, 0x79, 0x4c, 0xe8, 0xba, 0xeb, 0xb4, 0x88, 0xba, 0x5c, 0x5f, 0x4e, 0xb7, - 0xbb, 0x9c, 0x23, 0xd6, 0xbb, 0x33, 0x20, 0x0d, 0x0f, 0xd1, 0x80, 0xae, 0xc3, 0x14, 0x25, 0x16, - 0xf3, 0xbd, 0x72, 0x4e, 0x2c, 0x3f, 0x8a, 0x80, 0x58, 0x40, 0xb1, 0xc2, 0xf2, 0xe0, 0xd1, 0x22, - 0x8c, 0x59, 0xcd, 0x30, 0x94, 0x45, 0xc1, 0x63, 0x57, 0x82, 0x71, 0x88, 0x37, 0x5b, 0x50, 0xda, - 0xa0, 0xc4, 0x0a, 0xc8, 0x5e, 0x3b, 0x10, 0x2e, 0x64, 0xc2, 0x94, 0x4d, 0xbb, 0xb8, 0xe3, 0x29, - 0x57, 0x03, 0x2e, 0xbf, 0x2e, 0x20, 0x58, 0x61, 0xf8, 0x0d, 0x3a, 0x72, 0x88, 0x6b, 0xef, 0x5a, - 0x9e, 0xd5, 0x24, 0x54, 0x45, 0x9e, 0xc8, 0xaf, 0xb7, 0x34, 0x1c, 0x4e, 0x50, 0x9a, 0x3f, 0xcb, - 0x42, 0xa9, 0x4e, 0x5c, 0x12, 0xeb, 0xdb, 0x02, 0xd4, 0xa4, 0x56, 0x83, 0xec, 0x13, 0xea, 0xf8, - 0xf6, 0x01, 0x69, 0xf8, 0x9e, 0xcd, 0x84, 0x0b, 0x64, 0x6b, 0x9f, 0xe3, 0x7b, 0x73, 0x67, 0x00, - 0x8b, 0x87, 0x70, 0x20, 0x17, 0x4a, 0x6d, 0x2a, 0x7e, 0x8b, 0xfd, 0x92, 0x1e, 0x52, 0xbc, 0xf9, - 0xd5, 0x74, 0xc7, 0xb1, 0xaf, 0xb3, 0xd6, 0x16, 0xce, 0x7b, 0x95, 0x52, 0x02, 0x84, 0x93, 0xc2, - 0xd1, 0x37, 0x61, 0xde, 0xa7, 0xed, 0x63, 0xcb, 0xab, 0x93, 0x36, 0xf1, 0x6c, 0xe2, 0x05, 0x4c, - 0xec, 0x42, 0xbe, 0xb6, 0xc8, 0x73, 0xf6, 0x5e, 0x1f, 0x0e, 0x0f, 0x50, 0xa3, 0xd7, 0x61, 0xa1, - 0x4d, 0xfd, 0xb6, 0xd5, 0x14, 0x2e, 0xb5, 0xef, 0xbb, 0x4e, 0xa3, 0x2b, 0x5c, 0xa8, 0x50, 0x7b, - 0xfa, 0xbc, 0x57, 0x59, 0xd8, 0xef, 0x47, 0x5e, 0xf4, 0x2a, 0x57, 0xc4, 0xd6, 0x71, 0x48, 0x8c, - 0xc4, 0x83, 0x62, 0xb4, 0x33, 0xcc, 0x8d, 0x3a, 0x43, 0x73, 0x1b, 0xf2, 0xf5, 0x8e, 0xf2, 0xe7, - 0x97, 0x20, 0x6f, 0xab, 0xdf, 0x6a, 0xe7, 0xc3, 0x8b, 0x15, 0xd1, 0x5c, 0xf4, 0x2a, 0x25, 0x5e, - 0xa6, 0x55, 0x43, 0x00, 0x8e, 0x58, 0xcc, 0x37, 0xa0, 0xb4, 0xf9, 0xa0, 0xed, 0xd3, 0x20, 0x3c, - 0xd3, 0xeb, 0x30, 0x45, 0x04, 0x40, 0x48, 0xcb, 0xc7, 0x7e, 0x2a, 0xc9, 0xb0, 0xc2, 0xf2, 0x4c, - 0x48, 0x1e, 0x58, 0x8d, 0x40, 0x25, 0xce, 0x28, 0x13, 0x6e, 0x72, 0x20, 0x96, 0x38, 0xf3, 0x3a, - 0xe4, 0x85, 0x43, 0xb1, 0xfb, 0x6b, 0x68, 0x1e, 0xb2, 0xd8, 0x3a, 0x13, 0x52, 0x67, 0x70, 0x96, - 0x5a, 0x67, 0x5a, 0x2c, 0xd9, 0x03, 0xb8, 0x43, 0x22, 0x13, 0xd6, 0x61, 0x2e, 0x0c, 0xa8, 0xc9, - 0x38, 0xff, 0x79, 0xa5, 0x64, 0x0e, 0x27, 0xd1, 0xb8, 0x9f, 0xde, 0x7c, 0x03, 0x0a, 0x22, 0x17, - 0xf0, 0x44, 0x1a, 0x27, 0x6d, 0xe3, 0x11, 0x49, 0x3b, 0xcc, 0xc4, 0x99, 0x51, 0x99, 0x58, 0x33, - 0xd7, 0x85, 0x92, 0xe4, 0x0d, 0xcb, 0x94, 0x54, 0x1a, 0x9e, 0x86, 0x7c, 0x68, 0xa6, 0xd2, 0x12, - 0x95, 0xa7, 0xa1, 0x20, 0x1c, 0x51, 0x68, 0xda, 0x8e, 0x21, 0x91, 0xd7, 0xd2, 0x29, 0xd3, 0x6a, - 0x90, 0xcc, 0xa3, 0x6b, 0x10, 0x4d, 0xd3, 0x8f, 0xa1, 0x3c, 0xaa, 0xa6, 0x7d, 0x8c, 0xcc, 0x9b, - 0xde, 0x14, 0xf3, 0x1d, 0x03, 0xe6, 0x75, 0x49, 0xe9, 0x8f, 0x2f, 0xbd, 0x92, 0xcb, 0x6b, 0x2e, - 0x6d, 0x47, 0x7e, 0x6b, 0xc0, 0x62, 0x62, 0x69, 0x63, 0x9d, 0xf8, 0x18, 0x46, 0xe9, 0xce, 0x91, - 0x1d, 0xc3, 0x39, 0xfe, 0x9a, 0x81, 0xd2, 0x8e, 0x75, 0x48, 0xdc, 0x03, 0xe2, 0x92, 0x46, 0xe0, - 0x53, 0xf4, 0x23, 0x28, 0xb6, 0xac, 0xa0, 0x71, 0x2c, 0xa0, 0x61, 0x7d, 0x5e, 0x4f, 0x17, 0x4a, - 0x13, 0x92, 0xaa, 0xbb, 0xb1, 0x98, 0x4d, 0x2f, 0xa0, 0xdd, 0xda, 0x15, 0x65, 0x52, 0x51, 0xc3, - 0x60, 0x5d, 0x9b, 0x68, 0xaa, 0xc4, 0xf7, 0xe6, 0x83, 0x36, 0x2f, 0x1e, 0xc6, 0xef, 0xe5, 0x12, - 0x26, 0x60, 0xf2, 0x56, 0xc7, 0xa1, 0xa4, 0x45, 0xbc, 0x20, 0x6e, 0xaa, 0x76, 0xfb, 0xe4, 0xe3, - 0x01, 0x8d, 0x4b, 0x2f, 0xc3, 0x7c, 0xbf, 0xf1, 0x3c, 0xfe, 0x9c, 0x90, 0xae, 0x3c, 0x2f, 0xcc, - 0x7f, 0xa2, 0x45, 0xc8, 0x9d, 0x5a, 0x6e, 0x47, 0xdd, 0x46, 0x2c, 0x3f, 0x6e, 0x67, 0x6e, 0x19, - 0xe6, 0xef, 0x0d, 0x28, 0x8f, 0x32, 0x04, 0x7d, 0x51, 0x13, 0x54, 0x2b, 0x2a, 0xab, 0xb2, 0xaf, - 0x92, 0xae, 0x94, 0xba, 0x09, 0x79, 0xbf, 0xcd, 0xab, 0x0d, 0x9f, 0xaa, 0x53, 0x7f, 0x2a, 0x3c, - 0xc9, 0x3d, 0x05, 0xbf, 0xe8, 0x55, 0xae, 0x26, 0xc4, 0x87, 0x08, 0x1c, 0xb1, 0xf2, 0x3c, 0x20, - 0xec, 0xe1, 0xb9, 0x29, 0xca, 0x03, 0xf7, 0x05, 0x04, 0x2b, 0x8c, 0xf9, 0x27, 0x03, 0x26, 0x45, - 0x59, 0xfc, 0x06, 0xe4, 0xf9, 0xfe, 0xd9, 0x56, 0x60, 0x09, 0xbb, 0x52, 0x37, 0x64, 0x9c, 0x7b, - 0x97, 0x04, 0x56, 0xec, 0x6d, 0x21, 0x04, 0x47, 0x12, 0x11, 0x86, 0x9c, 0x13, 0x90, 0x56, 0x78, - 0x90, 0xcf, 0x8c, 0x14, 0xad, 0xc6, 0x01, 0x55, 0x6c, 0x9d, 0x6d, 0x3e, 0x08, 0x88, 0xc7, 0x0f, - 0x23, 0xbe, 0x1a, 0xdb, 0x5c, 0x06, 0x96, 0xa2, 0xcc, 0x7f, 0x1b, 0x10, 0xa9, 0xe2, 0xce, 0xcf, - 0x88, 0x7b, 0xb4, 0xe3, 0x78, 0x27, 0x6a, 0x5b, 0x23, 0x73, 0x0e, 0x14, 0x1c, 0x47, 0x14, 0xc3, - 0xd2, 0x43, 0x66, 0xbc, 0xf4, 0xc0, 0x15, 0x36, 0x7c, 0x2f, 0x70, 0xbc, 0xce, 0xc0, 0x6d, 0xdb, - 0x50, 0x70, 0x1c, 0x51, 0xf0, 0x32, 0x87, 0x92, 0x96, 0xe5, 0x78, 0x8e, 0xd7, 0xe4, 0x8b, 0xd8, - 0xf0, 0x3b, 0x5e, 0x20, 0xf2, 0xbd, 0x2a, 0x73, 0xf0, 0x00, 0x16, 0x0f, 0xe1, 0x30, 0xff, 0x38, - 0x09, 0x45, 0xbe, 0xe6, 0x30, 0xcf, 0xbd, 0x08, 0x25, 0x57, 0xf7, 0x02, 0xb5, 0xf6, 0xab, 0xca, - 0x94, 0xe4, 0xbd, 0xc6, 0x49, 0x5a, 0xce, 0x2c, 0xaa, 0xb3, 0x88, 0x39, 0x93, 0x64, 0xde, 0xd2, - 0x91, 0x38, 0x49, 0xcb, 0xa3, 0xd7, 0x19, 0xbf, 0x1f, 0xaa, 0xee, 0x89, 0x8e, 0xe8, 0xdb, 0x1c, - 0x88, 0x25, 0x0e, 0xed, 0xc2, 0x15, 0xcb, 0x75, 0xfd, 0x33, 0x01, 0xac, 0xf9, 0xfe, 0x49, 0xcb, - 0xa2, 0x27, 0x4c, 0xb4, 0xb4, 0xf9, 0xda, 0x17, 0x14, 0xcb, 0x95, 0xf5, 0x41, 0x12, 0x3c, 0x8c, - 0x6f, 0xd8, 0xb1, 0x4d, 0x8e, 0x79, 0x6c, 0xc7, 0xb0, 0xd8, 0x07, 0x12, 0xb7, 0x5c, 0xf5, 0x97, - 0xcf, 0x29, 0x39, 0x8b, 0x78, 0x08, 0xcd, 0xc5, 0x08, 0x38, 0x1e, 0x2a, 0x11, 0xdd, 0x86, 0x59, - 0xee, 0xc9, 0x7e, 0x27, 0x08, 0xab, 0xda, 0x9c, 0x38, 0x6e, 0x74, 0xde, 0xab, 0xcc, 0xde, 0x4d, - 0x60, 0x70, 0x1f, 0x25, 0xdf, 0x5c, 0xd7, 0x69, 0x39, 0x41, 0x79, 0x5a, 0xb0, 0x44, 0x9b, 0xbb, - 0xc3, 0x81, 0x58, 0xe2, 0x12, 0x1e, 0x98, 0xbf, 0xcc, 0x03, 0xcd, 0xdf, 0x64, 0x01, 0xc9, 0x32, - 0xdc, 0x96, 0xf5, 0x94, 0x0c, 0x69, 0xbc, 0x57, 0x50, 0x65, 0xbc, 0xd1, 0xd7, 0x2b, 0xa8, 0x0a, - 0x3e, 0xc4, 0xa3, 0x5d, 0x28, 0xc8, 0xd0, 0x12, 0x5f, 0x97, 0x55, 0x45, 0x5c, 0xd8, 0x0b, 0x11, - 0x17, 0xbd, 0xca, 0x52, 0x42, 0x4d, 0x84, 0x11, 0x7d, 0x5c, 0x2c, 0x01, 0xdd, 0x04, 0xb0, 0xda, - 0x8e, 0x3e, 0x35, 0x2b, 0xc4, 0xb3, 0x93, 0xb8, 0xff, 0xc5, 0x1a, 0x15, 0x7a, 0x05, 0x26, 0x83, - 0x4f, 0xd6, 0x6b, 0xe5, 0x45, 0x2b, 0xc9, 0x3b, 0x2b, 0x21, 0x81, 0x6b, 0x17, 0xfe, 0xcc, 0xb8, - 0x59, 0xaa, 0x4d, 0x8a, 0xb4, 0x6f, 0x45, 0x18, 0xac, 0x51, 0xa1, 0xef, 0x40, 0xfe, 0x48, 0x95, - 0xa2, 0xe2, 0x60, 0x52, 0x87, 0xc8, 0xb0, 0x80, 0x95, 0x8d, 0x7b, 0xf8, 0x85, 0x23, 0x69, 0xe6, - 0x5b, 0x50, 0xd8, 0x75, 0x1a, 0xd4, 0x17, 0x6d, 0xde, 0x53, 0x30, 0xcd, 0x12, 0x7d, 0x50, 0x74, - 0x24, 0xa1, 0xbb, 0x84, 0x78, 0xee, 0x27, 0x9e, 0xe5, 0xf9, 0xb2, 0xdb, 0xc9, 0xc5, 0x7e, 0xf2, - 0x1a, 0x07, 0x62, 0x89, 0xbb, 0xbd, 0xc8, 0x33, 0xfd, 0xcf, 0xdf, 0xaf, 0x4c, 0xbc, 0xfb, 0x7e, - 0x65, 0xe2, 0xbd, 0xf7, 0x55, 0xd6, 0xbf, 0x00, 0x80, 0xbd, 0xc3, 0x1f, 0x90, 0x86, 0x8c, 0x9f, - 0xa9, 0xa6, 0x64, 0xe1, 0x70, 0x56, 0x4c, 0xc9, 0x32, 0x7d, 0xd5, 0x9b, 0x86, 0xc3, 0x09, 0x4a, - 0xb4, 0x0a, 0x85, 0x68, 0xfe, 0xa5, 0x0e, 0x7a, 0x21, 0x74, 0x9c, 0x68, 0x48, 0x86, 0x63, 0x9a, - 0x44, 0x30, 0x9f, 0xbc, 0x34, 0x98, 0xd7, 0x20, 0xdb, 0x71, 0x6c, 0xd5, 0x13, 0x3f, 0x1b, 0x26, - 0xd3, 0x7b, 0xdb, 0xf5, 0x8b, 0x5e, 0xe5, 0x89, 0x51, 0x63, 0xe7, 0xa0, 0xdb, 0x26, 0xac, 0x7a, - 0x6f, 0xbb, 0x8e, 0x39, 0xf3, 0xb0, 0xc8, 0x32, 0x35, 0x66, 0x64, 0xb9, 0x09, 0xd0, 0x8c, 0x27, - 0x0b, 0xf2, 0xe2, 0x46, 0x1e, 0xa5, 0x4d, 0x14, 0x34, 0x2a, 0xc4, 0x60, 0xa1, 0xc1, 0xdb, 0x6f, - 0xd5, 0xe1, 0xb3, 0xc0, 0x6a, 0xc9, 0xb9, 0xe0, 0x78, 0xce, 0x7d, 0x4d, 0xa9, 0x59, 0xd8, 0xe8, - 0x17, 0x86, 0x07, 0xe5, 0x23, 0x1f, 0x16, 0x6c, 0xd5, 0x48, 0xc6, 0x4a, 0x0b, 0x63, 0x2b, 0xbd, - 0xca, 0x15, 0xd6, 0xfb, 0x05, 0xe1, 0x41, 0xd9, 0xe8, 0xfb, 0xb0, 0x14, 0x02, 0x07, 0xbb, 0x79, - 0x11, 0x79, 0xb3, 0xb5, 0xe5, 0xf3, 0x5e, 0x65, 0xa9, 0x3e, 0x92, 0x0a, 0x3f, 0x42, 0x02, 0xb2, - 0x61, 0xca, 0x95, 0x95, 0x6a, 0x51, 0x54, 0x17, 0x5f, 0x4f, 0xb7, 0x8a, 0xd8, 0xfb, 0xab, 0x7a, - 0x85, 0x1a, 0x75, 0xab, 0xaa, 0x38, 0x55, 0xb2, 0xd1, 0x03, 0x28, 0x5a, 0x9e, 0xe7, 0x07, 0x96, - 0x9c, 0x2f, 0xcc, 0x08, 0x55, 0xeb, 0x63, 0xab, 0x5a, 0x8f, 0x65, 0xf4, 0x55, 0xc4, 0x1a, 0x06, - 0xeb, 0xaa, 0xd0, 0x19, 0xcc, 0xf9, 0x67, 0x1e, 0xa1, 0x98, 0x1c, 0x11, 0x4a, 0xbc, 0x06, 0x61, - 0xe5, 0x92, 0xd0, 0xfe, 0x5c, 0x4a, 0xed, 0x09, 0xe6, 0xd8, 0xa5, 0x93, 0x70, 0x86, 0xfb, 0xb5, - 0xa0, 0x2a, 0x0f, 0x92, 0x9e, 0xe5, 0x3a, 0x3f, 0x24, 0x94, 0x95, 0x67, 0xe3, 0xd1, 0xed, 0x56, - 0x04, 0xc5, 0x1a, 0x05, 0xfa, 0x1a, 0x14, 0x1b, 0x6e, 0x87, 0x05, 0x44, 0xce, 0xd1, 0xe7, 0xc4, - 0x0d, 0x8a, 0xd6, 0xb7, 0x11, 0xa3, 0xb0, 0x4e, 0x87, 0x3a, 0x50, 0x6a, 0xe9, 0x29, 0xa3, 0xbc, - 0x20, 0x56, 0x77, 0x2b, 0xdd, 0xea, 0x06, 0x93, 0x5a, 0x5c, 0xc1, 0x24, 0x70, 0x38, 0xa9, 0x65, - 0xe9, 0x05, 0x28, 0x7e, 0xc2, 0xe2, 0x9e, 0x37, 0x07, 0xfd, 0xe7, 0x38, 0x56, 0x73, 0xf0, 0xe7, - 0x0c, 0xcc, 0x26, 0x77, 0xbf, 0x2f, 0x1d, 0xe6, 0x52, 0xa5, 0xc3, 0xb0, 0x0d, 0x35, 0x46, 0x8e, - 0xfe, 0xc3, 0xb0, 0x9e, 0x1d, 0x19, 0xd6, 0x55, 0xf4, 0x9c, 0x7c, 0x9c, 0xe8, 0x59, 0x05, 0xe0, - 0x75, 0x06, 0xf5, 0x5d, 0x97, 0x50, 0x11, 0x38, 0xf3, 0x6a, 0xc4, 0x1f, 0x41, 0xb1, 0x46, 0xc1, - 0xab, 0xe1, 0x43, 0xd7, 0x6f, 0x9c, 0x88, 0x2d, 0x08, 0x2f, 0xbd, 0x08, 0x99, 0x79, 0x59, 0x0d, - 0xd7, 0x06, 0xb0, 0x78, 0x08, 0x87, 0xd9, 0x85, 0xab, 0xfb, 0x16, 0x0d, 0x1c, 0xcb, 0x8d, 0x2f, - 0x98, 0x68, 0x37, 0xde, 0x1c, 0x68, 0x66, 0x9e, 0x1d, 0xf7, 0xa2, 0xc6, 0x9b, 0x1f, 0xc3, 0xe2, - 0x86, 0xc6, 0xfc, 0x9b, 0x01, 0xd7, 0x86, 0xea, 0xfe, 0x0c, 0x9a, 0xa9, 0x37, 0x93, 0xcd, 0xd4, - 0x8b, 0x29, 0x67, 0x9c, 0xc3, 0xac, 0x1d, 0xd1, 0x5a, 0x4d, 0x43, 0x6e, 0x9f, 0x17, 0xb1, 0xe6, - 0xaf, 0x0c, 0x98, 0x11, 0xbf, 0xc6, 0x99, 0x0f, 0x57, 0x20, 0x77, 0xe4, 0x87, 0x23, 0xaa, 0xbc, - 0x7c, 0x42, 0xda, 0xe2, 0x00, 0x2c, 0xe1, 0x8f, 0x31, 0x40, 0x7e, 0xc7, 0x80, 0xe4, 0x64, 0x16, - 0xbd, 0x2c, 0xfd, 0xd7, 0x88, 0x46, 0xa7, 0x63, 0xfa, 0xee, 0x4b, 0xa3, 0x5a, 0xc1, 0x2b, 0xa9, - 0xa6, 0x84, 0x4f, 0x43, 0x01, 0xfb, 0x7e, 0xb0, 0x6f, 0x05, 0xc7, 0x8c, 0x2f, 0xbc, 0xcd, 0x7f, - 0xa8, 0xbd, 0x11, 0x0b, 0x17, 0x18, 0x2c, 0xe1, 0xe6, 0x2f, 0x0d, 0xb8, 0x36, 0xf2, 0xd5, 0x84, - 0x87, 0x80, 0x46, 0xf4, 0xa5, 0x56, 0x14, 0x79, 0x61, 0x4c, 0x87, 0x35, 0x2a, 0xde, 0xc3, 0x25, - 0x9e, 0x5a, 0xfa, 0x7b, 0xb8, 0x84, 0x36, 0x9c, 0xa4, 0x35, 0xff, 0x95, 0x01, 0xf5, 0x74, 0xf2, - 0x3f, 0xf6, 0xd8, 0xeb, 0x7d, 0x0f, 0x37, 0xb3, 0xc9, 0x87, 0x9b, 0xe8, 0x95, 0x46, 0x7b, 0xb9, - 0xc8, 0x3e, 0xfa, 0xe5, 0x02, 0x3d, 0x1f, 0x3d, 0x86, 0xc8, 0xd0, 0xb5, 0x9c, 0x7c, 0x0c, 0xb9, - 0xe8, 0x55, 0x66, 0x94, 0xf0, 0xe4, 0xe3, 0xc8, 0xeb, 0x30, 0x6d, 0x93, 0xc0, 0x72, 0x5c, 0xd9, - 0x8f, 0xa5, 0x7e, 0x22, 0x90, 0xc2, 0xea, 0x92, 0xb5, 0x56, 0xe4, 0x36, 0xa9, 0x0f, 0x1c, 0x0a, - 0xe4, 0xd1, 0xb6, 0xe1, 0xdb, 0xb2, 0x9d, 0xc8, 0xc5, 0xd1, 0x76, 0xc3, 0xb7, 0x09, 0x16, 0x18, - 0xf3, 0x5d, 0x03, 0x8a, 0x52, 0xd2, 0x86, 0xd5, 0x61, 0x04, 0xad, 0x45, 0xab, 0x90, 0xc7, 0x7d, - 0x4d, 0x7f, 0xf5, 0xba, 0xe8, 0x55, 0x0a, 0x82, 0x4c, 0x74, 0x22, 0x43, 0x5e, 0x77, 0x32, 0x97, - 0xec, 0xd1, 0x93, 0x90, 0x13, 0xb7, 0x47, 0x6d, 0x66, 0x74, 0xd7, 0xc5, 0x05, 0xc3, 0x12, 0x67, - 0x7e, 0x9c, 0x81, 0x52, 0x62, 0x71, 0x29, 0x7a, 0x81, 0x68, 0x74, 0x99, 0x49, 0x31, 0x0e, 0x1f, - 0xfd, 0x30, 0xad, 0x72, 0xcf, 0xd4, 0xe3, 0xe4, 0x9e, 0xef, 0xc2, 0x54, 0x83, 0xef, 0x51, 0xf8, - 0x3f, 0x87, 0xb5, 0x71, 0x8e, 0x53, 0xec, 0x6e, 0xec, 0x8d, 0xe2, 0x93, 0x61, 0x25, 0x10, 0xdd, - 0x81, 0x05, 0x4a, 0x02, 0xda, 0x5d, 0x3f, 0x0a, 0x08, 0xd5, 0x9b, 0xf8, 0x5c, 0x5c, 0x71, 0xe3, - 0x7e, 0x02, 0x3c, 0xc8, 0x63, 0x1e, 0xc2, 0xcc, 0x5d, 0xeb, 0xd0, 0x8d, 0x1e, 0xbd, 0x30, 0x94, - 0x1c, 0xaf, 0xe1, 0x76, 0x6c, 0x22, 0xa3, 0x71, 0x18, 0xbd, 0xc2, 0x4b, 0xbb, 0xad, 0x23, 0x2f, - 0x7a, 0x95, 0x2b, 0x09, 0x80, 0x7c, 0xe5, 0xc1, 0x49, 0x11, 0xa6, 0x0b, 0x93, 0x9f, 0x61, 0xf7, - 0xf8, 0x3d, 0x28, 0xc4, 0xf5, 0xfd, 0xa7, 0xac, 0xd2, 0x7c, 0x13, 0xf2, 0xdc, 0xe3, 0xc3, 0xbe, - 0xf4, 0x92, 0x12, 0x27, 0x59, 0x38, 0x65, 0xd2, 0x14, 0x4e, 0x66, 0x0b, 0x4a, 0xf7, 0xda, 0xf6, - 0x63, 0x3e, 0x7b, 0x66, 0x52, 0x67, 0xad, 0x9b, 0x20, 0xff, 0x42, 0xc1, 0x13, 0x84, 0xcc, 0xdc, - 0x5a, 0x82, 0xd0, 0x13, 0xaf, 0x36, 0x95, 0xff, 0xa9, 0x01, 0x20, 0xc6, 0x5f, 0x9b, 0xa7, 0xc4, - 0x0b, 0x52, 0x3c, 0x8e, 0xdf, 0x83, 0x29, 0x5f, 0x7a, 0x93, 0x7c, 0xfa, 0x1c, 0x73, 0xc6, 0x1a, - 0x5d, 0x02, 0xe9, 0x4f, 0x58, 0x09, 0xab, 0xdd, 0xf8, 0xe0, 0xe1, 0xf2, 0xc4, 0x87, 0x0f, 0x97, - 0x27, 0x3e, 0x7a, 0xb8, 0x3c, 0xf1, 0xf6, 0xf9, 0xb2, 0xf1, 0xc1, 0xf9, 0xb2, 0xf1, 0xe1, 0xf9, - 0xb2, 0xf1, 0xd1, 0xf9, 0xb2, 0xf1, 0xf1, 0xf9, 0xb2, 0xf1, 0xee, 0x3f, 0x96, 0x27, 0x5e, 0xcf, - 0x9c, 0xae, 0xfd, 0x37, 0x00, 0x00, 0xff, 0xff, 0x82, 0x62, 0x88, 0xff, 0xb8, 0x26, 0x00, 0x00, + 0x3d, 0x63, 0xc7, 0x89, 0xfd, 0x73, 0x9c, 0x8f, 0xb7, 0x59, 0xf0, 0x06, 0x11, 0xa7, 0x53, 0x54, + 0xa5, 0xd0, 0x3a, 0x4d, 0x28, 0xd5, 0x76, 0x4b, 0x0b, 0x71, 0xbc, 0xd9, 0x86, 0x26, 0x4d, 0xf4, + 0xb2, 0xbb, 0x40, 0xa9, 0x50, 0x27, 0x9e, 0x17, 0x67, 0xc8, 0x78, 0xc6, 0x7d, 0x6f, 0x9c, 0xd4, + 0x70, 0xa0, 0x07, 0x10, 0x20, 0x41, 0xd5, 0x23, 0xe2, 0x80, 0x5a, 0xc1, 0x5f, 0xc0, 0x05, 0xfe, + 0x00, 0x24, 0x7a, 0xac, 0xc4, 0xa5, 0x12, 0xc8, 0xea, 0x86, 0x03, 0x47, 0xc4, 0x35, 0x17, 0xd0, + 0xfb, 0x98, 0x99, 0x37, 0xfe, 0xd8, 0x8c, 0xbb, 0xa5, 0xe2, 0xe6, 0xf9, 0x7d, 0xbf, 0xf7, 0x7e, + 0xef, 0xf7, 0xf5, 0x0c, 0x7b, 0xa7, 0x37, 0x59, 0xd5, 0xf1, 0xd7, 0x4e, 0x3b, 0x47, 0x84, 0x7a, + 0x24, 0x20, 0x6c, 0xed, 0x8c, 0x78, 0xb6, 0x4f, 0xd7, 0x14, 0xc2, 0x6a, 0x3b, 0x2d, 0xab, 0x71, + 0xe2, 0x78, 0x84, 0x76, 0xd7, 0xda, 0xa7, 0x4d, 0x0e, 0x60, 0x6b, 0x2d, 0x12, 0x58, 0x6b, 0x67, + 0xeb, 0x6b, 0x4d, 0xe2, 0x11, 0x6a, 0x05, 0xc4, 0xae, 0xb6, 0xa9, 0x1f, 0xf8, 0xe8, 0x4b, 0x92, + 0xab, 0xaa, 0x73, 0x55, 0xdb, 0xa7, 0x4d, 0x0e, 0x60, 0x55, 0xce, 0x55, 0x3d, 0x5b, 0x5f, 0x7a, + 0xba, 0xe9, 0x04, 0x27, 0x9d, 0xa3, 0x6a, 0xc3, 0x6f, 0xad, 0x35, 0xfd, 0xa6, 0xbf, 0x26, 0x98, + 0x8f, 0x3a, 0xc7, 0xe2, 0x4b, 0x7c, 0x88, 0x5f, 0x52, 0xe8, 0xd2, 0x48, 0x53, 0x68, 0xc7, 0x0b, + 0x9c, 0x16, 0xe9, 0xb7, 0x62, 0xe9, 0xb9, 0xab, 0x18, 0x58, 0xe3, 0x84, 0xb4, 0xac, 0x7e, 0x3e, + 0xf3, 0x2f, 0x59, 0xc8, 0x6f, 0x1e, 0xec, 0xdc, 0xa1, 0x7e, 0xa7, 0x8d, 0x56, 0x60, 0xd2, 0xb3, + 0x5a, 0xa4, 0x6c, 0xac, 0x18, 0xab, 0x85, 0xda, 0xcc, 0x07, 0xbd, 0xca, 0xc4, 0x45, 0xaf, 0x32, + 0xf9, 0xaa, 0xd5, 0x22, 0x58, 0x60, 0x90, 0x0b, 0xf9, 0x33, 0x42, 0x99, 0xe3, 0x7b, 0xac, 0x9c, + 0x59, 0xc9, 0xae, 0x16, 0x37, 0x5e, 0xaa, 0xa6, 0x59, 0x7f, 0x55, 0x28, 0xb8, 0x2f, 0x59, 0xb7, + 0x7d, 0x5a, 0x77, 0x58, 0xc3, 0x3f, 0x23, 0xb4, 0x5b, 0x9b, 0x57, 0x5a, 0xf2, 0x0a, 0xc9, 0x70, + 0xa4, 0x01, 0xfd, 0xc4, 0x80, 0xf9, 0x36, 0x25, 0xc7, 0x84, 0x52, 0x62, 0x2b, 0x7c, 0x39, 0xbb, + 0x62, 0x7c, 0x0a, 0x6a, 0xcb, 0x4a, 0xed, 0xfc, 0x41, 0x9f, 0x7c, 0x3c, 0xa0, 0x11, 0xfd, 0xce, + 0x80, 0x25, 0x46, 0xe8, 0x19, 0xa1, 0x9b, 0xb6, 0x4d, 0x09, 0x63, 0xb5, 0xee, 0x96, 0xeb, 0x10, + 0x2f, 0xd8, 0xda, 0xa9, 0x63, 0x56, 0x9e, 0x14, 0xfb, 0xf0, 0x8d, 0x74, 0x06, 0x1d, 0x8e, 0x92, + 0x53, 0x33, 0x95, 0x45, 0x4b, 0x23, 0x49, 0x18, 0x7e, 0x88, 0x19, 0xe6, 0x31, 0xcc, 0x84, 0x07, + 0xb9, 0xeb, 0xb0, 0x00, 0xdd, 0x87, 0xa9, 0x26, 0xff, 0x60, 0x65, 0x43, 0x18, 0x58, 0x4d, 0x67, + 0x60, 0x28, 0xa3, 0x36, 0xab, 0xec, 0x99, 0x12, 0x9f, 0x0c, 0x2b, 0x69, 0xe6, 0x2f, 0x26, 0xa1, + 0xb8, 0x79, 0xb0, 0x83, 0x09, 0xf3, 0x3b, 0xb4, 0x41, 0x52, 0x38, 0xcd, 0x4d, 0x98, 0x61, 0x8e, + 0xd7, 0xec, 0xb8, 0x16, 0xe5, 0xd0, 0xf2, 0x94, 0xa0, 0x5c, 0x54, 0x94, 0x33, 0x87, 0x1a, 0x0e, + 0x27, 0x28, 0xd1, 0x06, 0x00, 0x97, 0xc0, 0xda, 0x56, 0x83, 0xd8, 0xe5, 0xcc, 0x8a, 0xb1, 0x9a, + 0xaf, 0x21, 0xc5, 0x07, 0xaf, 0x46, 0x18, 0xac, 0x51, 0xa1, 0xc7, 0x21, 0x27, 0x2c, 0x2d, 0xe7, + 0x85, 0x9a, 0x92, 0x22, 0xcf, 0x89, 0x65, 0x60, 0x89, 0x43, 0x4f, 0xc2, 0xb4, 0xf2, 0xb2, 0x72, + 0x41, 0x90, 0xcd, 0x29, 0xb2, 0xe9, 0xd0, 0x0d, 0x42, 0x3c, 0x5f, 0xdf, 0xa9, 0xe3, 0xd9, 0xc2, + 0xef, 0xb4, 0xf5, 0xbd, 0xe2, 0x78, 0x36, 0x16, 0x18, 0xb4, 0x0b, 0xb9, 0x33, 0x42, 0x8f, 0xb8, + 0x27, 0x70, 0xd7, 0xfc, 0x4a, 0xba, 0x8d, 0xbe, 0xcf, 0x59, 0x6a, 0x05, 0x6e, 0x9a, 0xf8, 0x89, + 0xa5, 0x10, 0x54, 0x05, 0x60, 0x27, 0x3e, 0x0d, 0xc4, 0xf2, 0xca, 0xb9, 0x95, 0xec, 0x6a, 0xa1, + 0x36, 0xcb, 0xd7, 0x7b, 0x18, 0x41, 0xb1, 0x46, 0xc1, 0xe9, 0x1b, 0x56, 0x40, 0x9a, 0x3e, 0x75, + 0x08, 0x2b, 0x4f, 0xc7, 0xf4, 0x5b, 0x11, 0x14, 0x6b, 0x14, 0xe8, 0x5b, 0x80, 0x58, 0xe0, 0x53, + 0xab, 0x49, 0xd4, 0x52, 0x5f, 0xb6, 0xd8, 0x49, 0x19, 0xc4, 0xea, 0x96, 0xd4, 0xea, 0xd0, 0xe1, + 0x00, 0x05, 0x1e, 0xc2, 0x65, 0xfe, 0xc1, 0x80, 0x39, 0xcd, 0x17, 0x84, 0xdf, 0xdd, 0x84, 0x99, + 0xa6, 0x76, 0xeb, 0x94, 0x5f, 0x44, 0xa7, 0xad, 0xdf, 0x48, 0x9c, 0xa0, 0x44, 0x04, 0x0a, 0x54, + 0x49, 0x0a, 0xa3, 0xcb, 0x7a, 0x6a, 0xa7, 0x0d, 0x6d, 0x88, 0x35, 0x69, 0x40, 0x86, 0x63, 0xc9, + 0xe6, 0x3f, 0x0d, 0xe1, 0xc0, 0x61, 0xbc, 0x41, 0xab, 0x5a, 0x4c, 0x33, 0xc4, 0xf6, 0xcd, 0x8c, + 0x88, 0x47, 0x57, 0x04, 0x82, 0xcc, 0xff, 0x45, 0x20, 0xb8, 0x95, 0xff, 0xf5, 0x7b, 0x95, 0x89, + 0xb7, 0xff, 0xbe, 0x32, 0x61, 0xfe, 0x27, 0x03, 0x85, 0x2d, 0xdf, 0xb3, 0x9d, 0x40, 0x39, 0x72, + 0xd0, 0x6d, 0x0f, 0x5c, 0xd4, 0xbb, 0xdd, 0x36, 0xc1, 0x02, 0x83, 0x9e, 0x87, 0x29, 0x16, 0x58, + 0x41, 0x87, 0x89, 0xab, 0x56, 0xa8, 0x3d, 0x16, 0x86, 0x80, 0x43, 0x01, 0xbd, 0xec, 0x55, 0xe6, + 0x22, 0x71, 0x12, 0x84, 0x15, 0x03, 0xf7, 0x2a, 0xff, 0x48, 0x18, 0x65, 0xdf, 0x91, 0x29, 0x26, + 0x8c, 0xd5, 0xd9, 0xd8, 0xab, 0xf6, 0x07, 0x28, 0xf0, 0x10, 0x2e, 0x74, 0x06, 0xc8, 0xb5, 0x58, + 0x70, 0x97, 0x5a, 0x1e, 0x13, 0xba, 0xee, 0x3a, 0x2d, 0xa2, 0x2e, 0xd7, 0x97, 0xd3, 0xed, 0x2e, + 0xe7, 0x88, 0xf5, 0xee, 0x0e, 0x48, 0xc3, 0x43, 0x34, 0xa0, 0x27, 0x60, 0x8a, 0x12, 0x8b, 0xf9, + 0x5e, 0x39, 0x27, 0x96, 0x1f, 0x45, 0x40, 0x2c, 0xa0, 0x58, 0x61, 0x79, 0xf0, 0x68, 0x11, 0xc6, + 0xac, 0x66, 0x18, 0xca, 0xa2, 0xe0, 0xb1, 0x27, 0xc1, 0x38, 0xc4, 0x9b, 0x2d, 0x28, 0x6d, 0x51, + 0x62, 0x05, 0x64, 0xbf, 0x1d, 0x08, 0x17, 0x32, 0x61, 0xca, 0xa6, 0x5d, 0xdc, 0xf1, 0x94, 0xab, + 0x01, 0x97, 0x5f, 0x17, 0x10, 0xac, 0x30, 0xfc, 0x06, 0x1d, 0x3b, 0xc4, 0xb5, 0xf7, 0x2c, 0xcf, + 0x6a, 0x12, 0xaa, 0x22, 0x4f, 0xe4, 0xd7, 0xdb, 0x1a, 0x0e, 0x27, 0x28, 0xcd, 0x9f, 0x65, 0xa1, + 0x54, 0x27, 0x2e, 0x89, 0xf5, 0x6d, 0x03, 0x6a, 0x52, 0xab, 0x41, 0x0e, 0x08, 0x75, 0x7c, 0xfb, + 0x90, 0x34, 0x7c, 0xcf, 0x66, 0xc2, 0x05, 0xb2, 0xb5, 0xcf, 0xf1, 0xbd, 0xb9, 0x33, 0x80, 0xc5, + 0x43, 0x38, 0x90, 0x0b, 0xa5, 0x36, 0x15, 0xbf, 0xc5, 0x7e, 0x49, 0x0f, 0x29, 0x6e, 0x7c, 0x35, + 0xdd, 0x71, 0x1c, 0xe8, 0xac, 0xb5, 0x85, 0x8b, 0x5e, 0xa5, 0x94, 0x00, 0xe1, 0xa4, 0x70, 0xf4, + 0x4d, 0x98, 0xf7, 0x69, 0xfb, 0xc4, 0xf2, 0xea, 0xa4, 0x4d, 0x3c, 0x9b, 0x78, 0x01, 0x13, 0xbb, + 0x90, 0xaf, 0x2d, 0xf2, 0x9c, 0xbd, 0xdf, 0x87, 0xc3, 0x03, 0xd4, 0xe8, 0x35, 0x58, 0x68, 0x53, + 0xbf, 0x6d, 0x35, 0x85, 0x4b, 0x1d, 0xf8, 0xae, 0xd3, 0xe8, 0x0a, 0x17, 0x2a, 0xd4, 0x9e, 0xba, + 0xe8, 0x55, 0x16, 0x0e, 0xfa, 0x91, 0x97, 0xbd, 0xca, 0x35, 0xb1, 0x75, 0x1c, 0x12, 0x23, 0xf1, + 0xa0, 0x18, 0xed, 0x0c, 0x73, 0xa3, 0xce, 0xd0, 0xdc, 0x81, 0x7c, 0xbd, 0xa3, 0xfc, 0xf9, 0x45, + 0xc8, 0xdb, 0xea, 0xb7, 0xda, 0xf9, 0xf0, 0x62, 0x45, 0x34, 0x97, 0xbd, 0x4a, 0x89, 0x97, 0x69, + 0xd5, 0x10, 0x80, 0x23, 0x16, 0xf3, 0x09, 0xc8, 0x8b, 0x23, 0x67, 0xf7, 0xd7, 0xd1, 0x3c, 0x64, + 0xb1, 0x75, 0x2e, 0xa4, 0xcc, 0xe0, 0x2c, 0xb5, 0xce, 0xb5, 0xdb, 0xbe, 0x0f, 0x70, 0x87, 0x04, + 0xe1, 0xc1, 0x6f, 0xc2, 0x5c, 0x18, 0xf2, 0x92, 0x91, 0xf8, 0xf3, 0x4a, 0xf7, 0x1c, 0x4e, 0xa2, + 0x71, 0x3f, 0xbd, 0xf9, 0x3a, 0x14, 0x44, 0xb4, 0xe6, 0xa9, 0x2e, 0x4e, 0xab, 0xc6, 0x43, 0xd2, + 0x6a, 0x98, 0x2b, 0x33, 0xa3, 0x72, 0xa5, 0x66, 0xae, 0x0b, 0x25, 0xc9, 0x1b, 0x16, 0x12, 0xa9, + 0x34, 0x3c, 0x05, 0xf9, 0xd0, 0x4c, 0xa5, 0x25, 0x2a, 0x20, 0x43, 0x41, 0x38, 0xa2, 0xd0, 0xb4, + 0x9d, 0x40, 0x22, 0xf3, 0xa4, 0x53, 0xa6, 0x55, 0x09, 0x99, 0x87, 0x57, 0x09, 0x9a, 0xa6, 0x1f, + 0x43, 0x79, 0x54, 0xd5, 0xf9, 0x08, 0xb9, 0x31, 0xbd, 0x29, 0xe6, 0x3b, 0x06, 0xcc, 0xeb, 0x92, + 0xd2, 0x1f, 0x5f, 0x7a, 0x25, 0x57, 0x57, 0x45, 0xda, 0x8e, 0xfc, 0xd6, 0x80, 0xc5, 0xc4, 0xd2, + 0xc6, 0x3a, 0xf1, 0x31, 0x8c, 0xd2, 0x9d, 0x23, 0x3b, 0x86, 0x73, 0xfc, 0x35, 0x03, 0xa5, 0x5d, + 0xeb, 0x88, 0xb8, 0x87, 0xc4, 0x25, 0x8d, 0xc0, 0xa7, 0xe8, 0x47, 0x50, 0x6c, 0x59, 0x41, 0xe3, + 0x44, 0x40, 0xc3, 0x0a, 0xba, 0x9e, 0x2e, 0xd8, 0x25, 0x24, 0x55, 0xf7, 0x62, 0x31, 0xb7, 0xbd, + 0x80, 0x76, 0x6b, 0xd7, 0x94, 0x49, 0x45, 0x0d, 0x83, 0x75, 0x6d, 0xa2, 0xed, 0x11, 0xdf, 0xb7, + 0xdf, 0x6a, 0xf3, 0xf4, 0x3e, 0x7e, 0xb7, 0x95, 0x30, 0x01, 0x93, 0x37, 0x3b, 0x0e, 0x25, 0x2d, + 0xe2, 0x05, 0x71, 0xdb, 0xb3, 0xd7, 0x27, 0x1f, 0x0f, 0x68, 0x5c, 0x7a, 0x09, 0xe6, 0xfb, 0x8d, + 0xe7, 0xf1, 0xe7, 0x94, 0x74, 0xe5, 0x79, 0x61, 0xfe, 0x13, 0x2d, 0x42, 0xee, 0xcc, 0x72, 0x3b, + 0xea, 0x36, 0x62, 0xf9, 0x71, 0x2b, 0x73, 0xd3, 0x30, 0x7f, 0x6f, 0x40, 0x79, 0x94, 0x21, 0xe8, + 0x8b, 0x9a, 0xa0, 0x5a, 0x51, 0x59, 0x95, 0x7d, 0x85, 0x74, 0xa5, 0xd4, 0xdb, 0x90, 0xf7, 0xdb, + 0xbc, 0x1e, 0xf0, 0xa9, 0x3a, 0xf5, 0x27, 0xc3, 0x93, 0xdc, 0x57, 0xf0, 0xcb, 0x5e, 0xe5, 0x7a, + 0x42, 0x7c, 0x88, 0xc0, 0x11, 0x2b, 0x8f, 0xd4, 0xc2, 0x1e, 0x9e, 0x3d, 0xa2, 0x48, 0x7d, 0x5f, + 0x40, 0xb0, 0xc2, 0x98, 0x7f, 0x32, 0x60, 0x52, 0x14, 0xae, 0xaf, 0x43, 0x9e, 0xef, 0x9f, 0x6d, + 0x05, 0x96, 0xb0, 0x2b, 0x75, 0xcb, 0xc4, 0xb9, 0xf7, 0x48, 0x60, 0xc5, 0xde, 0x16, 0x42, 0x70, + 0x24, 0x11, 0x61, 0xc8, 0x39, 0x01, 0x69, 0x85, 0x07, 0xf9, 0xf4, 0x48, 0xd1, 0xaa, 0x61, 0xaf, + 0x62, 0xeb, 0xfc, 0xf6, 0x5b, 0x01, 0xf1, 0xf8, 0x61, 0xc4, 0x57, 0x63, 0x87, 0xcb, 0xc0, 0x52, + 0x94, 0xf9, 0x6f, 0x03, 0x22, 0x55, 0xdc, 0xf9, 0x19, 0x71, 0x8f, 0x77, 0x1d, 0xef, 0x54, 0x6d, + 0x6b, 0x64, 0xce, 0xa1, 0x82, 0xe3, 0x88, 0x62, 0x58, 0x7a, 0xc8, 0x8c, 0x97, 0x1e, 0xb8, 0xc2, + 0x86, 0xef, 0x05, 0x8e, 0xd7, 0x19, 0xb8, 0x6d, 0x5b, 0x0a, 0x8e, 0x23, 0x0a, 0x5e, 0x88, 0x50, + 0xd2, 0xb2, 0x1c, 0xcf, 0xf1, 0x9a, 0x7c, 0x11, 0x5b, 0x7e, 0xc7, 0x0b, 0x44, 0x46, 0x56, 0x85, + 0x08, 0x1e, 0xc0, 0xe2, 0x21, 0x1c, 0xe6, 0x1f, 0x27, 0xa1, 0xc8, 0xd7, 0x1c, 0xe6, 0xb9, 0x17, + 0xa0, 0xe4, 0xea, 0x5e, 0xa0, 0xd6, 0x7e, 0x5d, 0x99, 0x92, 0xbc, 0xd7, 0x38, 0x49, 0xcb, 0x99, + 0x45, 0xfd, 0x14, 0x31, 0x67, 0x92, 0xcc, 0xdb, 0x3a, 0x12, 0x27, 0x69, 0x79, 0xf4, 0x3a, 0xe7, + 0xf7, 0x43, 0x55, 0x26, 0xd1, 0x11, 0x7d, 0x9b, 0x03, 0xb1, 0xc4, 0xa1, 0x3d, 0xb8, 0x66, 0xb9, + 0xae, 0x7f, 0x2e, 0x80, 0x35, 0xdf, 0x3f, 0x6d, 0x59, 0xf4, 0x94, 0x89, 0xa6, 0x33, 0x5f, 0xfb, + 0x82, 0x62, 0xb9, 0xb6, 0x39, 0x48, 0x82, 0x87, 0xf1, 0x0d, 0x3b, 0xb6, 0xc9, 0x31, 0x8f, 0xed, + 0x04, 0x16, 0xfb, 0x40, 0xe2, 0x96, 0xab, 0x0e, 0xf0, 0x59, 0x25, 0x67, 0x11, 0x0f, 0xa1, 0xb9, + 0x1c, 0x01, 0xc7, 0x43, 0x25, 0xa2, 0x5b, 0x30, 0xcb, 0x3d, 0xd9, 0xef, 0x04, 0x61, 0xdd, 0x99, + 0x13, 0xc7, 0x8d, 0x2e, 0x7a, 0x95, 0xd9, 0xbb, 0x09, 0x0c, 0xee, 0xa3, 0xe4, 0x9b, 0xeb, 0x3a, + 0x2d, 0x27, 0x28, 0x4f, 0x0b, 0x96, 0x68, 0x73, 0x77, 0x39, 0x10, 0x4b, 0x5c, 0xc2, 0x03, 0xf3, + 0x57, 0x79, 0xa0, 0xf9, 0x9b, 0x2c, 0x20, 0x59, 0x28, 0xdb, 0xb2, 0x9e, 0x92, 0x21, 0x8d, 0x57, + 0xf3, 0xaa, 0xd0, 0x36, 0xfa, 0xaa, 0x79, 0x55, 0x63, 0x87, 0x78, 0xb4, 0x07, 0x05, 0x19, 0x5a, + 0xe2, 0xeb, 0xb2, 0xa6, 0x88, 0x0b, 0xfb, 0x21, 0xe2, 0xb2, 0x57, 0x59, 0x4a, 0xa8, 0x89, 0x30, + 0xa2, 0xd3, 0x8a, 0x25, 0xa0, 0x0d, 0x00, 0xab, 0xed, 0xe8, 0x73, 0xad, 0x42, 0x3c, 0xdd, 0x88, + 0x3b, 0x54, 0xac, 0x51, 0xa1, 0x97, 0x61, 0x32, 0xf8, 0x64, 0xdd, 0x50, 0x5e, 0x34, 0x7b, 0xbc, + 0xf7, 0x11, 0x12, 0xb8, 0x76, 0xe1, 0xcf, 0x8c, 0x9b, 0xa5, 0x1a, 0x99, 0x48, 0xfb, 0x76, 0x84, + 0xc1, 0x1a, 0x15, 0xfa, 0x0e, 0xe4, 0x8f, 0x55, 0x29, 0x2a, 0x0e, 0x26, 0x75, 0x88, 0x0c, 0x0b, + 0x58, 0xd9, 0x5a, 0x87, 0x5f, 0x38, 0x92, 0x66, 0xbe, 0x09, 0x85, 0x3d, 0xa7, 0x41, 0x7d, 0xd1, + 0x88, 0x3d, 0x09, 0xd3, 0x2c, 0xd1, 0xa9, 0x44, 0x47, 0x12, 0xba, 0x4b, 0x88, 0xe7, 0x7e, 0xe2, + 0x59, 0x9e, 0x2f, 0xfb, 0x91, 0x5c, 0xec, 0x27, 0xaf, 0x72, 0x20, 0x96, 0xb8, 0x5b, 0x8b, 0x3c, + 0xd3, 0xff, 0xfc, 0xfd, 0xca, 0xc4, 0xbb, 0xef, 0x57, 0x26, 0xde, 0x7b, 0x5f, 0x65, 0xfd, 0x4b, + 0x00, 0xd8, 0x3f, 0xfa, 0x01, 0x69, 0xc8, 0xf8, 0x99, 0x6a, 0x8e, 0x15, 0x8e, 0x4f, 0xc5, 0x1c, + 0x2b, 0xd3, 0x57, 0xbd, 0x69, 0x38, 0x9c, 0xa0, 0x44, 0x6b, 0x50, 0x88, 0x26, 0x54, 0xea, 0xa0, + 0x17, 0x42, 0xc7, 0x89, 0xc6, 0x58, 0x38, 0xa6, 0x49, 0x04, 0xf3, 0xc9, 0x2b, 0x83, 0x79, 0x0d, + 0xb2, 0x1d, 0xc7, 0x56, 0x5d, 0xeb, 0x33, 0x61, 0x32, 0xbd, 0xb7, 0x53, 0xbf, 0xec, 0x55, 0x1e, + 0x1b, 0x35, 0x18, 0xe6, 0x1d, 0x3f, 0xab, 0xde, 0xdb, 0xa9, 0x63, 0xce, 0x3c, 0x2c, 0xb2, 0x4c, + 0x8d, 0x19, 0x59, 0x36, 0x00, 0x9a, 0x71, 0xef, 0x2f, 0x2f, 0x6e, 0xe4, 0x51, 0x5a, 0xcf, 0xaf, + 0x51, 0x21, 0x06, 0x0b, 0x0d, 0xde, 0x20, 0xab, 0x1e, 0x9c, 0x05, 0x56, 0x4b, 0x4e, 0xee, 0xc6, + 0x73, 0xee, 0x1b, 0x4a, 0xcd, 0xc2, 0x56, 0xbf, 0x30, 0x3c, 0x28, 0x1f, 0xf9, 0xb0, 0x60, 0xab, + 0x56, 0x2f, 0x56, 0x5a, 0x18, 0x5b, 0xe9, 0x75, 0xae, 0xb0, 0xde, 0x2f, 0x08, 0x0f, 0xca, 0x46, + 0xdf, 0x87, 0xa5, 0x10, 0x38, 0xd8, 0x6f, 0x8b, 0xc8, 0x9b, 0xad, 0x2d, 0x5f, 0xf4, 0x2a, 0x4b, + 0xf5, 0x91, 0x54, 0xf8, 0x21, 0x12, 0x90, 0x0d, 0x53, 0xae, 0xac, 0x54, 0x8b, 0xa2, 0xba, 0xf8, + 0x7a, 0xba, 0x55, 0xc4, 0xde, 0x5f, 0xd5, 0x2b, 0xd4, 0x68, 0xee, 0xa1, 0x8a, 0x53, 0x25, 0x1b, + 0xbd, 0x05, 0x45, 0xcb, 0xf3, 0xfc, 0xc0, 0x92, 0x13, 0x80, 0x19, 0xa1, 0x6a, 0x73, 0x6c, 0x55, + 0x9b, 0xb1, 0x8c, 0xbe, 0x8a, 0x58, 0xc3, 0x60, 0x5d, 0x15, 0x3a, 0x87, 0x39, 0xff, 0xdc, 0x23, + 0x14, 0x93, 0x63, 0x42, 0x89, 0xd7, 0x20, 0xac, 0x5c, 0x12, 0xda, 0x9f, 0x4d, 0xa9, 0x3d, 0xc1, + 0x1c, 0xbb, 0x74, 0x12, 0xce, 0x70, 0xbf, 0x16, 0x54, 0xe5, 0x41, 0xd2, 0xb3, 0x5c, 0xe7, 0x87, + 0x84, 0xb2, 0xf2, 0x6c, 0x3c, 0x5c, 0xdd, 0x8e, 0xa0, 0x58, 0xa3, 0x40, 0x5f, 0x83, 0x62, 0xc3, + 0xed, 0xb0, 0x80, 0xc8, 0x49, 0xf7, 0x9c, 0xb8, 0x41, 0xd1, 0xfa, 0xb6, 0x62, 0x14, 0xd6, 0xe9, + 0x50, 0x07, 0x4a, 0x2d, 0x3d, 0x65, 0x94, 0x17, 0xc4, 0xea, 0x6e, 0xa6, 0x5b, 0xdd, 0x60, 0x52, + 0x8b, 0x2b, 0x98, 0x04, 0x0e, 0x27, 0xb5, 0x2c, 0x3d, 0x0f, 0xc5, 0x4f, 0x58, 0xdc, 0xf3, 0xe6, + 0xa0, 0xff, 0x1c, 0xc7, 0x6a, 0x0e, 0xfe, 0x9c, 0x81, 0xd9, 0xe4, 0xee, 0xf7, 0xa5, 0xc3, 0x5c, + 0xaa, 0x74, 0x18, 0xb6, 0xa1, 0xc6, 0xc8, 0xe1, 0x7c, 0x18, 0xd6, 0xb3, 0x23, 0xc3, 0xba, 0x8a, + 0x9e, 0x93, 0x8f, 0x12, 0x3d, 0xab, 0x00, 0xbc, 0xce, 0xa0, 0xbe, 0xeb, 0x12, 0x2a, 0x02, 0x67, + 0x5e, 0x0d, 0xe1, 0x23, 0x28, 0xd6, 0x28, 0x78, 0x35, 0x7c, 0xe4, 0xfa, 0x8d, 0x53, 0xb1, 0x05, + 0xe1, 0xa5, 0x17, 0x21, 0x33, 0x2f, 0xab, 0xe1, 0xda, 0x00, 0x16, 0x0f, 0xe1, 0x30, 0xbb, 0x70, + 0xfd, 0xc0, 0xa2, 0x81, 0x63, 0xb9, 0xf1, 0x05, 0x13, 0xed, 0xc6, 0x1b, 0x03, 0xcd, 0xcc, 0x33, + 0xe3, 0x5e, 0xd4, 0x78, 0xf3, 0x63, 0x58, 0xdc, 0xd0, 0x98, 0x7f, 0x33, 0xe0, 0xc6, 0x50, 0xdd, + 0x9f, 0x41, 0x33, 0xf5, 0x46, 0xb2, 0x99, 0x7a, 0x21, 0xe5, 0x14, 0x72, 0x98, 0xb5, 0x23, 0x5a, + 0xab, 0x69, 0xc8, 0x1d, 0xf0, 0x22, 0xd6, 0xfc, 0x95, 0x01, 0x33, 0xe2, 0xd7, 0x38, 0x13, 0xdc, + 0x0a, 0xe4, 0x8e, 0xfd, 0x70, 0x44, 0x95, 0x97, 0x8f, 0x3c, 0xdb, 0x1c, 0x80, 0x25, 0xfc, 0x11, + 0x46, 0xbc, 0xef, 0x18, 0x90, 0x9c, 0x9d, 0xa2, 0x97, 0xa4, 0xff, 0x1a, 0xd1, 0x70, 0x73, 0x4c, + 0xdf, 0x7d, 0x71, 0x54, 0x2b, 0x78, 0x2d, 0xd5, 0x94, 0xf0, 0x29, 0x28, 0x60, 0xdf, 0x0f, 0x0e, + 0xac, 0xe0, 0x84, 0xf1, 0x85, 0xb7, 0xf9, 0x0f, 0xb5, 0x37, 0x62, 0xe1, 0x02, 0x83, 0x25, 0xdc, + 0xfc, 0xa5, 0x01, 0x37, 0x46, 0xbe, 0x6b, 0xf0, 0x10, 0xd0, 0x88, 0xbe, 0xd4, 0x8a, 0x22, 0x2f, + 0x8c, 0xe9, 0xb0, 0x46, 0xc5, 0x7b, 0xb8, 0xc4, 0x63, 0x48, 0x7f, 0x0f, 0x97, 0xd0, 0x86, 0x93, + 0xb4, 0xe6, 0xbf, 0x32, 0xa0, 0x1e, 0x37, 0xfe, 0xc7, 0x1e, 0xfb, 0x44, 0xdf, 0xd3, 0xca, 0x6c, + 0xf2, 0x69, 0x25, 0x7a, 0x47, 0xd1, 0xde, 0x16, 0xb2, 0x0f, 0x7f, 0x5b, 0x40, 0xcf, 0x45, 0xcf, + 0x15, 0x32, 0x74, 0x2d, 0x27, 0x9f, 0x2b, 0x2e, 0x7b, 0x95, 0x19, 0x25, 0x3c, 0xf9, 0x7c, 0xf1, + 0x1a, 0x4c, 0xdb, 0x24, 0xb0, 0x1c, 0x57, 0xf6, 0x63, 0xa9, 0x87, 0xf8, 0x52, 0x58, 0x5d, 0xb2, + 0xd6, 0x8a, 0xdc, 0x26, 0xf5, 0x81, 0x43, 0x81, 0x3c, 0xda, 0x36, 0x7c, 0x5b, 0xb6, 0x13, 0xb9, + 0x38, 0xda, 0x6e, 0xf9, 0x36, 0xc1, 0x02, 0x63, 0xbe, 0x6b, 0x40, 0x51, 0x4a, 0xda, 0xb2, 0x3a, + 0x8c, 0xa0, 0xf5, 0x68, 0x15, 0xf2, 0xb8, 0x6f, 0xe8, 0xef, 0x52, 0x97, 0xbd, 0x4a, 0x41, 0x90, + 0x89, 0x4e, 0x64, 0xc8, 0xfb, 0x4b, 0xe6, 0x8a, 0x3d, 0x7a, 0x1c, 0x72, 0xe2, 0xf6, 0xa8, 0xcd, + 0x8c, 0xee, 0xba, 0xb8, 0x60, 0x58, 0xe2, 0xcc, 0x8f, 0x33, 0x50, 0x4a, 0x2c, 0x2e, 0x45, 0x2f, + 0x10, 0x8d, 0x2e, 0x33, 0x29, 0xc6, 0xe1, 0xa3, 0x9f, 0x8e, 0x55, 0xee, 0x99, 0x7a, 0x94, 0xdc, + 0xf3, 0x5d, 0x98, 0x6a, 0xf0, 0x3d, 0x0a, 0xff, 0x89, 0xb0, 0x3e, 0xce, 0x71, 0x8a, 0xdd, 0x8d, + 0xbd, 0x51, 0x7c, 0x32, 0xac, 0x04, 0xa2, 0x3b, 0xb0, 0x40, 0x49, 0x40, 0xbb, 0x9b, 0xc7, 0x01, + 0xa1, 0x7a, 0x13, 0x9f, 0x8b, 0x2b, 0x6e, 0xdc, 0x4f, 0x80, 0x07, 0x79, 0xcc, 0x23, 0x98, 0xb9, + 0x6b, 0x1d, 0xb9, 0xd1, 0xb3, 0x14, 0x86, 0x92, 0xe3, 0x35, 0xdc, 0x8e, 0x4d, 0x64, 0x34, 0x0e, + 0xa3, 0x57, 0x78, 0x69, 0x77, 0x74, 0xe4, 0x65, 0xaf, 0x72, 0x2d, 0x01, 0x90, 0xef, 0x30, 0x38, + 0x29, 0xc2, 0x74, 0x61, 0xf2, 0x33, 0xec, 0x1e, 0xbf, 0x07, 0x85, 0xb8, 0xbe, 0xff, 0x94, 0x55, + 0x9a, 0x6f, 0x40, 0x9e, 0x7b, 0x7c, 0xd8, 0x97, 0x5e, 0x51, 0xe2, 0x24, 0x0b, 0xa7, 0x4c, 0x9a, + 0xc2, 0xc9, 0x6c, 0x41, 0xe9, 0x5e, 0xdb, 0x7e, 0xc4, 0x87, 0xc9, 0x4c, 0xea, 0xac, 0xb5, 0x01, + 0xf2, 0x4f, 0x0e, 0x3c, 0x41, 0xc8, 0xcc, 0xad, 0x25, 0x08, 0x3d, 0xf1, 0x6a, 0x53, 0xf9, 0x9f, + 0x1a, 0x00, 0x62, 0xfc, 0x75, 0xfb, 0x8c, 0x78, 0x41, 0x8a, 0xe7, 0xeb, 0x7b, 0x30, 0xe5, 0x4b, + 0x6f, 0x92, 0x8f, 0x93, 0x63, 0xce, 0x58, 0xa3, 0x4b, 0x20, 0xfd, 0x09, 0x2b, 0x61, 0xb5, 0xd5, + 0x0f, 0x1e, 0x2c, 0x4f, 0x7c, 0xf8, 0x60, 0x79, 0xe2, 0xa3, 0x07, 0xcb, 0x13, 0x6f, 0x5f, 0x2c, + 0x1b, 0x1f, 0x5c, 0x2c, 0x1b, 0x1f, 0x5e, 0x2c, 0x1b, 0x1f, 0x5d, 0x2c, 0x1b, 0x1f, 0x5f, 0x2c, + 0x1b, 0xef, 0xfe, 0x63, 0x79, 0xe2, 0xb5, 0xcc, 0xd9, 0xfa, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, + 0x8c, 0xe4, 0xf0, 0xe3, 0x5a, 0x26, 0x00, 0x00, } func (m *APIGroup) Marshal() (dAtA []byte, err error) { @@ -1973,45 +1942,6 @@ func (m *Duration) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *ExportOptions) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ExportOptions) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ExportOptions) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - i-- - if m.Exact { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x10 - i-- - if m.Export { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } - i-- - dAtA[i] = 0x8 - return len(dAtA) - i, nil -} - func (m *FieldsV1) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3661,17 +3591,6 @@ func (m *Duration) Size() (n int) { return n } -func (m *ExportOptions) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - n += 2 - n += 2 - return n -} - func (m *FieldsV1) Size() (n int) { if m == nil { return 0 @@ -4367,17 +4286,6 @@ func (this *Duration) String() string { }, "") return s } -func (this *ExportOptions) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ExportOptions{`, - `Export:` + fmt.Sprintf("%v", this.Export) + `,`, - `Exact:` + fmt.Sprintf("%v", this.Exact) + `,`, - `}`, - }, "") - return s -} func (this *GetOptions) String() string { if this == nil { return "nil" @@ -6250,99 +6158,6 @@ func (m *Duration) Unmarshal(dAtA []byte) error { } return nil } -func (m *ExportOptions) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ExportOptions: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ExportOptions: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Export", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Export = bool(v != 0) - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Exact", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.Exact = bool(v != 0) - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *FieldsV1) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto index fd24483c0e4..3d34ed491ce 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto @@ -268,18 +268,6 @@ message Duration { optional int64 duration = 1; } -// ExportOptions is the query options to the standard REST get call. -// Deprecated. Planned for removal in 1.18. -message ExportOptions { - // Should this value be exported. Export strips fields that a user can not specify. - // Deprecated. Planned for removal in 1.18. - optional bool export = 1; - - // Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. - // Deprecated. Planned for removal in 1.18. - optional bool exact = 2; -} - // FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format. // // Each key is either a '.' representing the field itself, and will always map to an empty set, diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/register.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/register.go index c1a077178bf..1abdd626de0 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/register.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/register.go @@ -55,7 +55,6 @@ var ParameterCodec = runtime.NewParameterCodec(scheme) var optionsTypes = []runtime.Object{ &ListOptions{}, - &ExportOptions{}, &GetOptions{}, &DeleteOptions{}, &CreateOptions{}, diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go index d84878d7c25..31e2c48cfa6 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go @@ -433,21 +433,6 @@ const ( // +k8s:conversion-gen:explicit-from=net/url.Values // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// ExportOptions is the query options to the standard REST get call. -// Deprecated. Planned for removal in 1.18. -type ExportOptions struct { - TypeMeta `json:",inline"` - // Should this value be exported. Export strips fields that a user can not specify. - // Deprecated. Planned for removal in 1.18. - Export bool `json:"export" protobuf:"varint,1,opt,name=export"` - // Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. - // Deprecated. Planned for removal in 1.18. - Exact bool `json:"exact" protobuf:"varint,2,opt,name=exact"` -} - -// +k8s:conversion-gen:explicit-from=net/url.Values -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - // GetOptions is the standard query options to the standard REST get call. type GetOptions struct { TypeMeta `json:",inline"` diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go index ace0abfb98e..718f16ec1eb 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go @@ -123,16 +123,6 @@ func (DeleteOptions) SwaggerDoc() map[string]string { return map_DeleteOptions } -var map_ExportOptions = map[string]string{ - "": "ExportOptions is the query options to the standard REST get call. Deprecated. Planned for removal in 1.18.", - "export": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - "exact": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", -} - -func (ExportOptions) SwaggerDoc() map[string]string { - return map_ExportOptions -} - var map_FieldsV1 = map[string]string{ "": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:', where is the name of a field in a struct, or key in a map 'v:', where is the exact json formatted value of a list item 'i:', where is position of a item in a list 'k:', where is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", } diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.conversion.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.conversion.go index 06afd9b5be3..3ecb67c8279 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.conversion.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.conversion.go @@ -50,11 +50,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*ExportOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_url_Values_To_v1_ExportOptions(a.(*url.Values), b.(*ExportOptions), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*url.Values)(nil), (*GetOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_url_Values_To_v1_GetOptions(a.(*url.Values), b.(*GetOptions), scope) }); err != nil { @@ -339,31 +334,6 @@ func autoConvert_url_Values_To_v1_DeleteOptions(in *url.Values, out *DeleteOptio return nil } -func autoConvert_url_Values_To_v1_ExportOptions(in *url.Values, out *ExportOptions, s conversion.Scope) error { - // WARNING: Field TypeMeta does not have json tag, skipping. - - if values, ok := map[string][]string(*in)["export"]; ok && len(values) > 0 { - if err := runtime.Convert_Slice_string_To_bool(&values, &out.Export, s); err != nil { - return err - } - } else { - out.Export = false - } - if values, ok := map[string][]string(*in)["exact"]; ok && len(values) > 0 { - if err := runtime.Convert_Slice_string_To_bool(&values, &out.Exact, s); err != nil { - return err - } - } else { - out.Exact = false - } - return nil -} - -// Convert_url_Values_To_v1_ExportOptions is an autogenerated conversion function. -func Convert_url_Values_To_v1_ExportOptions(in *url.Values, out *ExportOptions, s conversion.Scope) error { - return autoConvert_url_Values_To_v1_ExportOptions(in, out, s) -} - func autoConvert_url_Values_To_v1_GetOptions(in *url.Values, out *GetOptions, s conversion.Scope) error { // WARNING: Field TypeMeta does not have json tag, skipping. diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go index 1aa73bd24fd..101431579a1 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/zz_generated.deepcopy.go @@ -304,31 +304,6 @@ func (in *Duration) DeepCopy() *Duration { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ExportOptions) DeepCopyInto(out *ExportOptions) { - *out = *in - out.TypeMeta = in.TypeMeta - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExportOptions. -func (in *ExportOptions) DeepCopy() *ExportOptions { - if in == nil { - return nil - } - out := new(ExportOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ExportOptions) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *FieldsV1) DeepCopyInto(out *FieldsV1) { *out = *in diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/apiserver_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/apiserver_test.go index f0da9ede17c..a7b977ee43d 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/apiserver_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/apiserver_test.go @@ -142,10 +142,10 @@ func init() { func addGrouplessTypes() { scheme.AddKnownTypes(grouplessGroupVersion, - &genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ListOptions{}, &metav1.ExportOptions{}, + &genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ListOptions{}, &metav1.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{}) scheme.AddKnownTypes(grouplessInternalGroupVersion, - &genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ExportOptions{}, + &genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{}) utilruntime.Must(genericapitesting.RegisterConversions(scheme)) @@ -153,20 +153,20 @@ func addGrouplessTypes() { func addTestTypes() { scheme.AddKnownTypes(testGroupVersion, - &genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ExportOptions{}, + &genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{}, &genericapitesting.SimpleXGSubresource{}) scheme.AddKnownTypes(testGroupVersion, &examplev1.Pod{}) scheme.AddKnownTypes(testInternalGroupVersion, - &genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ExportOptions{}, + &genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{}, &genericapitesting.SimpleXGSubresource{}) scheme.AddKnownTypes(testInternalGroupVersion, &example.Pod{}) // Register SimpleXGSubresource in both testGroupVersion and testGroup2Version, and also their // their corresponding internal versions, to verify that the desired group version object is // served in the tests. - scheme.AddKnownTypes(testGroup2Version, &genericapitesting.SimpleXGSubresource{}, &metav1.ExportOptions{}) - scheme.AddKnownTypes(testInternalGroup2Version, &genericapitesting.SimpleXGSubresource{}, &metav1.ExportOptions{}) + scheme.AddKnownTypes(testGroup2Version, &genericapitesting.SimpleXGSubresource{}) + scheme.AddKnownTypes(testInternalGroup2Version, &genericapitesting.SimpleXGSubresource{}) metav1.AddToGroupVersion(scheme, testGroupVersion) utilruntime.Must(genericapitesting.RegisterConversions(scheme)) @@ -174,7 +174,7 @@ func addTestTypes() { func addNewTestTypes() { scheme.AddKnownTypes(newGroupVersion, - &genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.ExportOptions{}, + &genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &metav1.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{}, &examplev1.Pod{}, ) @@ -368,21 +368,6 @@ func (storage *SimpleRESTStorage) NamespaceScoped() bool { return true } -func (storage *SimpleRESTStorage) Export(ctx context.Context, name string, opts metav1.ExportOptions) (runtime.Object, error) { - obj, err := storage.Get(ctx, name, &metav1.GetOptions{}) - if err != nil { - return nil, err - } - s, ok := obj.(*genericapitesting.Simple) - if !ok { - return nil, fmt.Errorf("unexpected object") - } - - // Set a marker to verify the method was called - s.Other = "exported" - return obj, storage.errors["export"] -} - func (storage *SimpleRESTStorage) ConvertToTable(ctx context.Context, obj runtime.Object, tableOptions runtime.Object) (*metav1.Table, error) { return rest.NewDefaultTableConvertor(schema.GroupResource{Resource: "simple"}).ConvertToTable(ctx, obj, tableOptions) } @@ -1556,55 +1541,6 @@ func TestMetadata(t *testing.T) { } } -func TestExport(t *testing.T) { - storage := map[string]rest.Storage{} - simpleStorage := SimpleRESTStorage{ - item: genericapitesting.Simple{ - ObjectMeta: metav1.ObjectMeta{ - ResourceVersion: "1234", - CreationTimestamp: metav1.NewTime(time.Unix(10, 10)), - }, - Other: "foo", - }, - } - selfLinker := &setTestSelfLinker{ - t: t, - expectedSet: "/" + prefix + "/" + testGroupVersion.Group + "/" + testGroupVersion.Version + "/namespaces/default/simple/id", - name: "id", - namespace: "default", - } - storage["simple"] = &simpleStorage - handler := handleLinker(storage, selfLinker) - server := httptest.NewServer(handler) - defer server.Close() - - resp, err := http.Get(server.URL + "/" + prefix + "/" + testGroupVersion.Group + "/" + testGroupVersion.Version + "/namespaces/default/simple/id?export=true") - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - if resp.StatusCode != http.StatusOK { - data, _ := ioutil.ReadAll(resp.Body) - resp.Body.Close() - t.Fatalf("unexpected response: %#v\n%s\n", resp, string(data)) - } - var itemOut genericapitesting.Simple - body, err := extractBody(resp, &itemOut) - if err != nil { - t.Errorf("unexpected error: %v", err) - } - - if itemOut.Name != simpleStorage.item.Name { - t.Errorf("Unexpected data: %#v, expected %#v (%s)", itemOut, simpleStorage.item, string(body)) - } - if itemOut.Other != "exported" { - t.Errorf("Expected: exported, saw: %s", itemOut.Other) - } - - if utilfeature.DefaultFeatureGate.Enabled(features.RemoveSelfLink) == selfLinker.called { - t.Errorf("unexpected selfLinker.called: %v", selfLinker.called) - } -} - func TestGet(t *testing.T) { storage := map[string]rest.Storage{} simpleStorage := SimpleRESTStorage{ diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/get.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/get.go index da227e7aeda..6c09b496535 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/get.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/get.go @@ -19,14 +19,15 @@ package handlers import ( "context" "fmt" - metainternalversionvalidation "k8s.io/apimachinery/pkg/apis/meta/internalversion/validation" - "k8s.io/apimachinery/pkg/runtime/schema" "math/rand" "net/http" "net/url" "strings" "time" + metainternalversionvalidation "k8s.io/apimachinery/pkg/apis/meta/internalversion/validation" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/klog/v2" "k8s.io/apimachinery/pkg/api/errors" @@ -81,22 +82,22 @@ func getResourceHandler(scope *RequestScope, getter getterFunc) http.HandlerFunc } // GetResource returns a function that handles retrieving a single resource from a rest.Storage object. -func GetResource(r rest.Getter, e rest.Exporter, scope *RequestScope) http.HandlerFunc { +func GetResource(r rest.Getter, scope *RequestScope) http.HandlerFunc { return getResourceHandler(scope, func(ctx context.Context, name string, req *http.Request, trace *utiltrace.Trace) (runtime.Object, error) { // check for export options := metav1.GetOptions{} if values := req.URL.Query(); len(values) > 0 { - exports := metav1.ExportOptions{} - if err := metainternalversionscheme.ParameterCodec.DecodeParameters(values, scope.MetaGroupVersion, &exports); err != nil { - err = errors.NewBadRequest(err.Error()) - return nil, err - } - if exports.Export { - if e == nil { - return nil, errors.NewBadRequest(fmt.Sprintf("export of %q is not supported", scope.Resource.Resource)) + if len(values["export"]) > 0 { + exportBool := true + exportStrings := values["export"] + err := runtime.Convert_Slice_string_To_bool(&exportStrings, &exportBool, nil) + if err != nil { + return nil, errors.NewBadRequest(fmt.Sprintf("the export parameter cannot be parsed: %v", err)) + } + if exportBool { + return nil, errors.NewBadRequest("the export parameter, deprecated since v1.14, is no longer supported") } - return e.Export(ctx, name, exports) } if err := metainternalversionscheme.ParameterCodec.DecodeParameters(values, scope.MetaGroupVersion, &options); err != nil { err = errors.NewBadRequest(err.Error()) diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/installer.go b/staging/src/k8s.io/apiserver/pkg/endpoints/installer.go index 6549771ced8..ec09454ed8d 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/installer.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/installer.go @@ -253,15 +253,6 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag if !isMetadata { storageMeta = defaultStorageMetadata{} } - exporter, isExporter := storage.(rest.Exporter) - if !isExporter { - exporter = nil - } - - versionedExportOptions, err := a.group.Creater.New(optionsExternalVersion.WithKind("ExportOptions")) - if err != nil { - return nil, nil, err - } if isNamedCreater { isCreater = true @@ -684,7 +675,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag if isGetterWithOptions { handler = restfulGetResourceWithOptions(getterWithOptions, reqScope, isSubresource) } else { - handler = restfulGetResource(getter, exporter, reqScope) + handler = restfulGetResource(getter, reqScope) } if needOverride { @@ -713,11 +704,6 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag return nil, nil, err } } - if isExporter { - if err := AddObjectParams(ws, route, versionedExportOptions); err != nil { - return nil, nil, err - } - } addParams(route, action.Params) routes = append(routes, route) case "LIST": // List all resources of a kind. @@ -1227,9 +1213,9 @@ func restfulPatchResource(r rest.Patcher, scope handlers.RequestScope, admit adm } } -func restfulGetResource(r rest.Getter, e rest.Exporter, scope handlers.RequestScope) restful.RouteFunction { +func restfulGetResource(r rest.Getter, scope handlers.RequestScope) restful.RouteFunction { return func(req *restful.Request, res *restful.Response) { - handlers.GetResource(r, e, &scope)(res.ResponseWriter, req.Request) + handlers.GetResource(r, &scope)(res.ResponseWriter, req.Request) } } diff --git a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go index 4a80a43948d..b5a3377493d 100644 --- a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go +++ b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store.go @@ -19,7 +19,6 @@ package registry import ( "context" "fmt" - "reflect" "strings" "sync" "time" @@ -73,7 +72,6 @@ type GenericStore interface { GetCreateStrategy() rest.RESTCreateStrategy GetUpdateStrategy() rest.RESTUpdateStrategy GetDeleteStrategy() rest.RESTDeleteStrategy - GetExportStrategy() rest.RESTExportStrategy } // Store implements k8s.io/apiserver/pkg/registry/rest.StandardStorage. It's @@ -199,10 +197,6 @@ type Store struct { // deletionTimestamp, and deletionGracePeriodSeconds checks. ShouldDeleteDuringUpdate func(ctx context.Context, key string, obj, existing runtime.Object) bool - // ExportStrategy implements resource-specific behavior during export, - // optional. Exported objects are not decorated. - ExportStrategy rest.RESTExportStrategy - // TableConvertor is an optional interface for transforming items or lists // of items into tabular output. If unset, the default will be used. TableConvertor rest.TableConvertor @@ -223,7 +217,6 @@ type Store struct { // Note: the rest.StandardStorage interface aggregates the common REST verbs var _ rest.StandardStorage = &Store{} -var _ rest.Exporter = &Store{} var _ rest.TableConvertor = &Store{} var _ GenericStore = &Store{} @@ -312,11 +305,6 @@ func (e *Store) GetDeleteStrategy() rest.RESTDeleteStrategy { return e.DeleteStrategy } -// GetExportStrategy implements GenericStore. -func (e *Store) GetExportStrategy() rest.RESTExportStrategy { - return e.ExportStrategy -} - // List returns a list of items matching labels and field according to the // store's PredicateFunc. func (e *Store) List(ctx context.Context, options *metainternalversion.ListOptions) (runtime.Object, error) { @@ -1267,44 +1255,6 @@ func (e *Store) calculateTTL(obj runtime.Object, defaultTTL int64, update bool) return ttl, err } -// exportObjectMeta unsets the fields on the given object that should not be -// present when the object is exported. -func exportObjectMeta(accessor metav1.Object, exact bool) { - accessor.SetUID("") - if !exact { - accessor.SetNamespace("") - } - accessor.SetCreationTimestamp(metav1.Time{}) - accessor.SetDeletionTimestamp(nil) - accessor.SetResourceVersion("") - accessor.SetSelfLink("") - if len(accessor.GetGenerateName()) > 0 && !exact { - accessor.SetName("") - } -} - -// Export implements the rest.Exporter interface -func (e *Store) Export(ctx context.Context, name string, opts metav1.ExportOptions) (runtime.Object, error) { - obj, err := e.Get(ctx, name, &metav1.GetOptions{}) - if err != nil { - return nil, err - } - if accessor, err := meta.Accessor(obj); err == nil { - exportObjectMeta(accessor, opts.Exact) - } else { - klog.V(4).Infof("Object of type %v does not have ObjectMeta: %v", reflect.TypeOf(obj), err) - } - - if e.ExportStrategy != nil { - if err = e.ExportStrategy.Export(ctx, obj, opts.Exact); err != nil { - return nil, err - } - } else { - e.CreateStrategy.PrepareForCreate(ctx, obj) - } - return obj, nil -} - // CompleteWithOptions updates the store with the provided options and // defaults common fields. func (e *Store) CompleteWithOptions(options *generic.StoreOptions) error { diff --git a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store_test.go b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store_test.go index 3f89a3fac82..cd8556f7743 100644 --- a/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store_test.go +++ b/staging/src/k8s.io/apiserver/pkg/registry/generic/registry/store_test.go @@ -1162,104 +1162,6 @@ func TestStoreUpdateHooksInnerRetry(t *testing.T) { } } -// TODO: Add a test to check no-op update if we have object with ResourceVersion -// already stored in etcd. Currently there is no easy way to store object with -// ResourceVersion in etcd. - -type testPodExport struct{} - -func (t testPodExport) Export(ctx context.Context, obj runtime.Object, exact bool) error { - pod := obj.(*example.Pod) - if pod.Labels == nil { - pod.Labels = map[string]string{} - } - pod.Labels["exported"] = "true" - pod.Labels["exact"] = strconv.FormatBool(exact) - - return nil -} - -func TestStoreCustomExport(t *testing.T) { - podA := example.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "test", - Name: "foo", - Labels: map[string]string{}, - }, - Spec: example.PodSpec{NodeName: "machine"}, - } - - destroyFunc, registry := NewTestGenericStoreRegistry(t) - defer destroyFunc() - - registry.ExportStrategy = testPodExport{} - - testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") - registry.UpdateStrategy.(*testRESTStrategy).allowCreateOnUpdate = true - if !updateAndVerify(t, testContext, registry, &podA) { - t.Errorf("Unexpected error updating podA") - } - - obj, err := registry.Export(testContext, podA.Name, metav1.ExportOptions{}) - if err != nil { - t.Errorf("unexpected error: %v", err) - } - exportedPod := obj.(*example.Pod) - if exportedPod.Labels["exported"] != "true" { - t.Errorf("expected: exported->true, found: %s", exportedPod.Labels["exported"]) - } - if exportedPod.Labels["exact"] != "false" { - t.Errorf("expected: exact->false, found: %s", exportedPod.Labels["exact"]) - } - if exportedPod.Labels["prepare_create"] != "true" { - t.Errorf("expected: prepare_create->true, found: %s", exportedPod.Labels["prepare_create"]) - } - delete(exportedPod.Labels, "exported") - delete(exportedPod.Labels, "exact") - delete(exportedPod.Labels, "prepare_create") - exportObjectMeta(&podA.ObjectMeta, false) - podA.Spec = exportedPod.Spec - if !reflect.DeepEqual(&podA, exportedPod) { - t.Errorf("expected:\n%v\nsaw:\n%v\n", &podA, exportedPod) - } -} - -func TestStoreBasicExport(t *testing.T) { - podA := example.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "test", - Name: "foo", - Labels: map[string]string{}, - }, - Spec: example.PodSpec{NodeName: "machine"}, - Status: example.PodStatus{HostIP: "1.2.3.4"}, - } - - destroyFunc, registry := NewTestGenericStoreRegistry(t) - defer destroyFunc() - - testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") - registry.UpdateStrategy.(*testRESTStrategy).allowCreateOnUpdate = true - if !updateAndVerify(t, testContext, registry, &podA) { - t.Errorf("Unexpected error updating podA") - } - - obj, err := registry.Export(testContext, podA.Name, metav1.ExportOptions{}) - if err != nil { - t.Errorf("unexpected error: %v", err) - } - exportedPod := obj.(*example.Pod) - if exportedPod.Labels["prepare_create"] != "true" { - t.Errorf("expected: prepare_create->true, found: %s", exportedPod.Labels["prepare_create"]) - } - delete(exportedPod.Labels, "prepare_create") - exportObjectMeta(&podA.ObjectMeta, false) - podA.Spec = exportedPod.Spec - if !reflect.DeepEqual(&podA, exportedPod) { - t.Errorf("expected:\n%v\nsaw:\n%v\n", &podA, exportedPod) - } -} - func TestStoreGet(t *testing.T) { podA := &example.Pod{ ObjectMeta: metav1.ObjectMeta{Namespace: "test", Name: "foo"}, diff --git a/staging/src/k8s.io/apiserver/pkg/registry/rest/BUILD b/staging/src/k8s.io/apiserver/pkg/registry/rest/BUILD index 1c04312bcd8..e8f3230acf6 100644 --- a/staging/src/k8s.io/apiserver/pkg/registry/rest/BUILD +++ b/staging/src/k8s.io/apiserver/pkg/registry/rest/BUILD @@ -25,7 +25,6 @@ go_library( "create_update.go", "delete.go", "doc.go", - "export.go", "meta.go", "rest.go", "table.go", diff --git a/staging/src/k8s.io/apiserver/pkg/registry/rest/export.go b/staging/src/k8s.io/apiserver/pkg/registry/rest/export.go deleted file mode 100644 index b3fd8af3001..00000000000 --- a/staging/src/k8s.io/apiserver/pkg/registry/rest/export.go +++ /dev/null @@ -1,34 +0,0 @@ -/* -Copyright 2015 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package rest - -import ( - "context" - - "k8s.io/apimachinery/pkg/runtime" -) - -// RESTExportStrategy is the interface that defines how to export a Kubernetes -// object. An exported object is stripped of non-user-settable fields and -// optionally, the identifying information related to the object's identity in -// the cluster so that it can be loaded into a different namespace or entirely -// different cluster without conflict. -type RESTExportStrategy interface { - // Export strips fields that can not be set by the user. If 'exact' is false - // fields specific to the cluster are also stripped - Export(ctx context.Context, obj runtime.Object, exact bool) error -} diff --git a/staging/src/k8s.io/apiserver/pkg/registry/rest/rest.go b/staging/src/k8s.io/apiserver/pkg/registry/rest/rest.go index aca8da8b4a0..66e7844a277 100644 --- a/staging/src/k8s.io/apiserver/pkg/registry/rest/rest.go +++ b/staging/src/k8s.io/apiserver/pkg/registry/rest/rest.go @@ -102,16 +102,6 @@ type Lister interface { TableConvertor } -// Exporter is an object that knows how to strip a RESTful resource for export. A store should implement this interface -// if export is generally supported for that type. Errors can still be returned during the actual Export when certain -// instances of the type are not exportable. -type Exporter interface { - // Export an object. Fields that are not user specified (e.g. Status, ObjectMeta.ResourceVersion) are stripped out - // Returns the stripped object. If 'exact' is true, fields that are specific to the cluster (e.g. namespace) are - // retained, otherwise they are stripped also. - Export(ctx context.Context, name string, opts metav1.ExportOptions) (runtime.Object, error) -} - // Getter is an object that can retrieve a named RESTful resource. type Getter interface { // Get finds a resource in the storage by name and returns it. diff --git a/staging/src/k8s.io/code-generator/_examples/apiserver/openapi/zz_generated.openapi.go b/staging/src/k8s.io/code-generator/_examples/apiserver/openapi/zz_generated.openapi.go index 44d364382bb..fc4c5e8e9f9 100644 --- a/staging/src/k8s.io/code-generator/_examples/apiserver/openapi/zz_generated.openapi.go +++ b/staging/src/k8s.io/code-generator/_examples/apiserver/openapi/zz_generated.openapi.go @@ -39,7 +39,6 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/apimachinery/pkg/apis/meta/v1.CreateOptions": schema_pkg_apis_meta_v1_CreateOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.DeleteOptions": schema_pkg_apis_meta_v1_DeleteOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.Duration": schema_pkg_apis_meta_v1_Duration(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.ExportOptions": schema_pkg_apis_meta_v1_ExportOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.FieldsV1": schema_pkg_apis_meta_v1_FieldsV1(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.GetOptions": schema_pkg_apis_meta_v1_GetOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.GroupKind": schema_pkg_apis_meta_v1_GroupKind(ref), @@ -628,50 +627,6 @@ func schema_pkg_apis_meta_v1_Duration(ref common.ReferenceCallback) common.OpenA } } -func schema_pkg_apis_meta_v1_ExportOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExportOptions is the query options to the standard REST get call. Deprecated. Planned for removal in 1.18.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "export": { - SchemaProps: spec.SchemaProps{ - Description: "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - Default: false, - Type: []string{"boolean"}, - Format: "", - }, - }, - "exact": { - SchemaProps: spec.SchemaProps{ - Description: "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - Default: false, - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"export", "exact"}, - }, - }, - } -} - func schema_pkg_apis_meta_v1_FieldsV1(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/staging/src/k8s.io/kube-aggregator/pkg/generated/openapi/zz_generated.openapi.go b/staging/src/k8s.io/kube-aggregator/pkg/generated/openapi/zz_generated.openapi.go index 86a1e002444..480ee452d95 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/generated/openapi/zz_generated.openapi.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/generated/openapi/zz_generated.openapi.go @@ -39,7 +39,6 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/apimachinery/pkg/apis/meta/v1.CreateOptions": schema_pkg_apis_meta_v1_CreateOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.DeleteOptions": schema_pkg_apis_meta_v1_DeleteOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.Duration": schema_pkg_apis_meta_v1_Duration(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.ExportOptions": schema_pkg_apis_meta_v1_ExportOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.FieldsV1": schema_pkg_apis_meta_v1_FieldsV1(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.GetOptions": schema_pkg_apis_meta_v1_GetOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.GroupKind": schema_pkg_apis_meta_v1_GroupKind(ref), @@ -631,50 +630,6 @@ func schema_pkg_apis_meta_v1_Duration(ref common.ReferenceCallback) common.OpenA } } -func schema_pkg_apis_meta_v1_ExportOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExportOptions is the query options to the standard REST get call. Deprecated. Planned for removal in 1.18.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "export": { - SchemaProps: spec.SchemaProps{ - Description: "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - Default: false, - Type: []string{"boolean"}, - Format: "", - }, - }, - "exact": { - SchemaProps: spec.SchemaProps{ - Description: "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - Default: false, - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"export", "exact"}, - }, - }, - } -} - func schema_pkg_apis_meta_v1_FieldsV1(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/staging/src/k8s.io/sample-apiserver/pkg/generated/openapi/zz_generated.openapi.go b/staging/src/k8s.io/sample-apiserver/pkg/generated/openapi/zz_generated.openapi.go index 3f416cd7de8..add3f1c8e26 100644 --- a/staging/src/k8s.io/sample-apiserver/pkg/generated/openapi/zz_generated.openapi.go +++ b/staging/src/k8s.io/sample-apiserver/pkg/generated/openapi/zz_generated.openapi.go @@ -39,7 +39,6 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "k8s.io/apimachinery/pkg/apis/meta/v1.CreateOptions": schema_pkg_apis_meta_v1_CreateOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.DeleteOptions": schema_pkg_apis_meta_v1_DeleteOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.Duration": schema_pkg_apis_meta_v1_Duration(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.ExportOptions": schema_pkg_apis_meta_v1_ExportOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.FieldsV1": schema_pkg_apis_meta_v1_FieldsV1(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.GetOptions": schema_pkg_apis_meta_v1_GetOptions(ref), "k8s.io/apimachinery/pkg/apis/meta/v1.GroupKind": schema_pkg_apis_meta_v1_GroupKind(ref), @@ -629,50 +628,6 @@ func schema_pkg_apis_meta_v1_Duration(ref common.ReferenceCallback) common.OpenA } } -func schema_pkg_apis_meta_v1_ExportOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExportOptions is the query options to the standard REST get call. Deprecated. Planned for removal in 1.18.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "export": { - SchemaProps: spec.SchemaProps{ - Description: "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - Default: false, - Type: []string{"boolean"}, - Format: "", - }, - }, - "exact": { - SchemaProps: spec.SchemaProps{ - Description: "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - Default: false, - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"export", "exact"}, - }, - }, - } -} - func schema_pkg_apis_meta_v1_FieldsV1(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/test/integration/apiserver/BUILD b/test/integration/apiserver/BUILD index 413adb999ca..57e1500efde 100644 --- a/test/integration/apiserver/BUILD +++ b/test/integration/apiserver/BUILD @@ -10,6 +10,7 @@ go_test( size = "large", srcs = [ "apiserver_test.go", + "export_test.go", "main_test.go", "max_json_patch_operations_test.go", "max_request_body_bytes_test.go", diff --git a/test/integration/apiserver/export_test.go b/test/integration/apiserver/export_test.go new file mode 100644 index 00000000000..5c03355c840 --- /dev/null +++ b/test/integration/apiserver/export_test.go @@ -0,0 +1,57 @@ +/* +Copyright 2020 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package apiserver + +import ( + "context" + "net/http" + "testing" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// Tests that the apiserver rejects the export param +func TestExportRejection(t *testing.T) { + _, clientSet, closeFn := setup(t) + defer closeFn() + + _, err := clientSet.CoreV1().Namespaces().Create(context.Background(), &corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{Name: "export-fail"}, + }, metav1.CreateOptions{}) + if err != nil { + t.Fatal(err) + } + defer func() { + clientSet.CoreV1().Namespaces().Delete(context.Background(), "export-fail", metav1.DeleteOptions{}) + }() + + result := clientSet.Discovery().RESTClient().Get().AbsPath("/api/v1/namespaces/export-fail").Param("export", "true").Do(context.Background()) + statusCode := 0 + result.StatusCode(&statusCode) + if statusCode != http.StatusBadRequest { + t.Errorf("expected %v, got %v", http.StatusBadRequest, statusCode) + } + + result = clientSet.Discovery().RESTClient().Get().AbsPath("/api/v1/namespaces/export-fail").Param("export", "false").Do(context.Background()) + statusCode = 0 + result.StatusCode(&statusCode) + if statusCode != http.StatusOK { + t.Errorf("expected %v, got %v", http.StatusOK, statusCode) + } + +}