From 588884dd69350be73af453f7fdb27ad0bcfba002 Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Tue, 21 Feb 2023 13:06:49 -0500 Subject: [PATCH] Add CRD compatibility objects --- ...update-generated-api-compatibility-data.sh | 3 + .../pkg/apis/roundtrip_test.go | 69 ++++ ...extensions.k8s.io.v1.ConversionReview.json | 61 ++++ ...piextensions.k8s.io.v1.ConversionReview.pb | Bin 0 -> 500 bytes ...extensions.k8s.io.v1.ConversionReview.yaml | 41 +++ ...ns.k8s.io.v1.CustomResourceDefinition.json | 213 ++++++++++++ ...ions.k8s.io.v1.CustomResourceDefinition.pb | Bin 0 -> 1762 bytes ...ns.k8s.io.v1.CustomResourceDefinition.yaml | 158 +++++++++ ...sions.k8s.io.v1beta1.ConversionReview.json | 61 ++++ ...ensions.k8s.io.v1beta1.ConversionReview.pb | Bin 0 -> 505 bytes ...sions.k8s.io.v1beta1.ConversionReview.yaml | 41 +++ ...s.io.v1beta1.CustomResourceDefinition.json | 309 ++++++++++++++++++ ...k8s.io.v1beta1.CustomResourceDefinition.pb | Bin 0 -> 2674 bytes ...s.io.v1beta1.CustomResourceDefinition.yaml | 232 +++++++++++++ .../pkg/apis/testdata/README.md | 3 + 15 files changed, 1191 insertions(+) create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/roundtrip_test.go create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.ConversionReview.json create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.ConversionReview.pb create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.ConversionReview.yaml create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.CustomResourceDefinition.json create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.CustomResourceDefinition.pb create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.CustomResourceDefinition.yaml create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1beta1.ConversionReview.json create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1beta1.ConversionReview.pb create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1beta1.ConversionReview.yaml create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1beta1.CustomResourceDefinition.json create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1beta1.CustomResourceDefinition.pb create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1beta1.CustomResourceDefinition.yaml create mode 100644 staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/README.md diff --git a/hack/update-generated-api-compatibility-data.sh b/hack/update-generated-api-compatibility-data.sh index 0ad130aa761..3a0a2c51fc6 100755 --- a/hack/update-generated-api-compatibility-data.sh +++ b/hack/update-generated-api-compatibility-data.sh @@ -28,12 +28,15 @@ export GO111MODULE=on # Nuke old files so we don't accidentally carry stuff forward. rm -f staging/src/k8s.io/api/testdata/HEAD/*.{yaml,json,pb} +rm -f staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/*.{yaml,json,pb} # UPDATE_COMPATIBILITY_FIXTURE_DATA=true regenerates fixture data if needed. # -run //HEAD only runs the test cases comparing against testdata for HEAD. # We suppress the output because we are expecting to have changes. # We suppress the test failure that occurs when there are changes. UPDATE_COMPATIBILITY_FIXTURE_DATA=true go test k8s.io/api -run //HEAD >/dev/null 2>&1 || true +UPDATE_COMPATIBILITY_FIXTURE_DATA=true go test k8s.io/apiextensions-apiserver/pkg/apis -run //HEAD >/dev/null 2>&1 || true # Now that we have regenerated data at HEAD, run the test without suppressing output or failures go test k8s.io/api -run //HEAD -count=1 +go test k8s.io/apiextensions-apiserver/pkg/apis -run //HEAD -count=1 diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/roundtrip_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/roundtrip_test.go new file mode 100644 index 00000000000..d01e6dae0f0 --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/roundtrip_test.go @@ -0,0 +1,69 @@ +/* +Copyright 2023 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 api + +import ( + "reflect" + "strconv" + "testing" + + "github.com/stretchr/testify/require" + + apiextensionv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" + apiextensionv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" + "k8s.io/apimachinery/pkg/api/apitesting/roundtrip" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + _ "k8s.io/apimachinery/pkg/runtime/serializer" +) + +var groups = []runtime.SchemeBuilder{ + apiextensionv1.SchemeBuilder, + apiextensionv1beta1.SchemeBuilder, +} + +func TestCompatibility(t *testing.T) { + scheme := runtime.NewScheme() + for _, builder := range groups { + require.NoError(t, builder.AddToScheme(scheme)) + } + + opts := roundtrip.NewCompatibilityTestOptions(scheme) + + // Fill unstructured JSON field types + opts.FillFuncs = map[reflect.Type]roundtrip.FillFunc{ + reflect.TypeOf(&apiextensionv1.JSON{}): func(s string, i int, obj interface{}) { + obj.(*apiextensionv1.JSON).Raw = []byte(strconv.Quote(s + "Value")) + }, + reflect.TypeOf(&apiextensionv1beta1.JSON{}): func(s string, i int, obj interface{}) { + obj.(*apiextensionv1beta1.JSON).Raw = []byte(strconv.Quote(s + "Value")) + }, + } + + opts.Complete(t) + + // limit to types in apiextensions.k8s.io + filteredKinds := []schema.GroupVersionKind{} + for _, gvk := range opts.Kinds { + if gvk.Group == apiextensionv1.SchemeGroupVersion.Group { + filteredKinds = append(filteredKinds, gvk) + } + } + opts.Kinds = filteredKinds + + opts.Run(t) +} diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.ConversionReview.json b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.ConversionReview.json new file mode 100644 index 00000000000..89434644605 --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.ConversionReview.json @@ -0,0 +1,61 @@ +{ + "kind": "ConversionReview", + "apiVersion": "apiextensions.k8s.io/v1", + "request": { + "uid": "uidValue", + "desiredAPIVersion": "desiredAPIVersionValue", + "objects": [ + { + "apiVersion": "example.com/v1", + "kind": "CustomType", + "spec": { + "replicas": 1 + }, + "status": { + "available": 1 + } + } + ] + }, + "response": { + "uid": "uidValue", + "convertedObjects": [ + { + "apiVersion": "example.com/v1", + "kind": "CustomType", + "spec": { + "replicas": 1 + }, + "status": { + "available": 1 + } + } + ], + "result": { + "metadata": { + "selfLink": "selfLinkValue", + "resourceVersion": "resourceVersionValue", + "continue": "continueValue", + "remainingItemCount": 4 + }, + "status": "statusValue", + "message": "messageValue", + "reason": "reasonValue", + "details": { + "name": "nameValue", + "group": "groupValue", + "kind": "kindValue", + "uid": "uidValue", + "causes": [ + { + "reason": "reasonValue", + "message": "messageValue", + "field": "fieldValue" + } + ], + "retryAfterSeconds": 5 + }, + "code": 6 + } + } +} \ No newline at end of file diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.ConversionReview.pb b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.ConversionReview.pb new file mode 100644 index 0000000000000000000000000000000000000000..0f2e34ade0b36900129ccfcca2bf50bf5df1d3b1 GIT binary patch literal 500 zcmchU%}N6?6op&=u&D(JqA)ATMo}593n{act^^k%QrGFsZMjS)8FD9MrF8Gp_yYQH zW+o!-3%I*{=iHOzBp*?SU9uBdA}lJ{ilQDusk_Yyp# z5>k;Yg@saKDoG^6m8X@goS%JSEm6s-f<{>J&#kqq{L7KiSC`$f0fCx5qRvAJM;6F9 zo5Dr~gVg8>wS(4ly2Jb79igCu0*K^1h@x*nlF_Yn@ydEy7D3@`ZjCF$POqt~9mN@2 YU*Q{R5t|{XU_9Tw{rjw&y{IEPKdI)Zz5oCK literal 0 HcmV?d00001 diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.ConversionReview.yaml b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.ConversionReview.yaml new file mode 100644 index 00000000000..5e2bf422a3c --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.ConversionReview.yaml @@ -0,0 +1,41 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: ConversionReview +request: + desiredAPIVersion: desiredAPIVersionValue + objects: + - apiVersion: example.com/v1 + kind: CustomType + spec: + replicas: 1 + status: + available: 1 + uid: uidValue +response: + convertedObjects: + - apiVersion: example.com/v1 + kind: CustomType + spec: + replicas: 1 + status: + available: 1 + result: + code: 6 + details: + causes: + - field: fieldValue + message: messageValue + reason: reasonValue + group: groupValue + kind: kindValue + name: nameValue + retryAfterSeconds: 5 + uid: uidValue + message: messageValue + metadata: + continue: continueValue + remainingItemCount: 4 + resourceVersion: resourceVersionValue + selfLink: selfLinkValue + reason: reasonValue + status: statusValue + uid: uidValue diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.CustomResourceDefinition.json b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.CustomResourceDefinition.json new file mode 100644 index 00000000000..ab9b3fe9b02 --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.CustomResourceDefinition.json @@ -0,0 +1,213 @@ +{ + "kind": "CustomResourceDefinition", + "apiVersion": "apiextensions.k8s.io/v1", + "metadata": { + "name": "nameValue", + "generateName": "generateNameValue", + "namespace": "namespaceValue", + "selfLink": "selfLinkValue", + "uid": "uidValue", + "resourceVersion": "resourceVersionValue", + "generation": 7, + "creationTimestamp": "2008-01-01T01:01:01Z", + "deletionTimestamp": "2009-01-01T01:01:01Z", + "deletionGracePeriodSeconds": 10, + "labels": { + "labelsKey": "labelsValue" + }, + "annotations": { + "annotationsKey": "annotationsValue" + }, + "ownerReferences": [ + { + "apiVersion": "apiVersionValue", + "kind": "kindValue", + "name": "nameValue", + "uid": "uidValue", + "controller": true, + "blockOwnerDeletion": true + } + ], + "finalizers": [ + "finalizersValue" + ], + "managedFields": [ + { + "manager": "managerValue", + "operation": "operationValue", + "apiVersion": "apiVersionValue", + "time": "2004-01-01T01:01:01Z", + "fieldsType": "fieldsTypeValue", + "fieldsV1": {}, + "subresource": "subresourceValue" + } + ] + }, + "spec": { + "group": "groupValue", + "names": { + "plural": "pluralValue", + "singular": "singularValue", + "shortNames": [ + "shortNamesValue" + ], + "kind": "kindValue", + "listKind": "listKindValue", + "categories": [ + "categoriesValue" + ] + }, + "scope": "scopeValue", + "versions": [ + { + "name": "nameValue", + "served": true, + "storage": true, + "deprecated": true, + "deprecationWarning": "deprecationWarningValue", + "schema": { + "openAPIV3Schema": { + "id": "idValue", + "$schema": "$schemaValue", + "$ref": "$refValue", + "description": "descriptionValue", + "type": "typeValue", + "format": "formatValue", + "title": "titleValue", + "default": "defaultValue", + "maximum": 9.5, + "exclusiveMaximum": true, + "minimum": 11.5, + "exclusiveMinimum": true, + "maxLength": 13, + "minLength": 14, + "pattern": "patternValue", + "maxItems": 16, + "minItems": 17, + "uniqueItems": true, + "multipleOf": 19.5, + "enum": [ + "enumValue" + ], + "maxProperties": 21, + "minProperties": 22, + "required": [ + "requiredValue" + ], + "items": [ + {} + ], + "allOf": [ + {} + ], + "oneOf": [ + {} + ], + "anyOf": [ + {} + ], + "properties": { + "propertiesKey": {} + }, + "additionalProperties": true, + "patternProperties": { + "patternPropertiesKey": {} + }, + "dependencies": { + "dependenciesKey": [ + "\u003cno json tag\u003e PropertyValue" + ] + }, + "additionalItems": true, + "definitions": { + "definitionsKey": {} + }, + "externalDocs": { + "description": "descriptionValue", + "url": "urlValue" + }, + "example": "exampleValue", + "nullable": true, + "x-kubernetes-preserve-unknown-fields": true, + "x-kubernetes-embedded-resource": true, + "x-kubernetes-int-or-string": true, + "x-kubernetes-list-map-keys": [ + "x-kubernetes-list-map-keysValue" + ], + "x-kubernetes-list-type": "x-kubernetes-list-typeValue", + "x-kubernetes-map-type": "x-kubernetes-map-typeValue", + "x-kubernetes-validations": [ + { + "rule": "ruleValue", + "message": "messageValue" + } + ] + } + }, + "subresources": { + "status": {}, + "scale": { + "specReplicasPath": "specReplicasPathValue", + "statusReplicasPath": "statusReplicasPathValue", + "labelSelectorPath": "labelSelectorPathValue" + } + }, + "additionalPrinterColumns": [ + { + "name": "nameValue", + "type": "typeValue", + "format": "formatValue", + "description": "descriptionValue", + "priority": 5, + "jsonPath": "jsonPathValue" + } + ] + } + ], + "conversion": { + "strategy": "strategyValue", + "webhook": { + "clientConfig": { + "url": "urlValue", + "service": { + "namespace": "namespaceValue", + "name": "nameValue", + "path": "pathValue", + "port": 4 + }, + "caBundle": "Ag==" + }, + "conversionReviewVersions": [ + "conversionReviewVersionsValue" + ] + } + }, + "preserveUnknownFields": true + }, + "status": { + "conditions": [ + { + "type": "typeValue", + "status": "statusValue", + "lastTransitionTime": "2003-01-01T01:01:01Z", + "reason": "reasonValue", + "message": "messageValue" + } + ], + "acceptedNames": { + "plural": "pluralValue", + "singular": "singularValue", + "shortNames": [ + "shortNamesValue" + ], + "kind": "kindValue", + "listKind": "listKindValue", + "categories": [ + "categoriesValue" + ] + }, + "storedVersions": [ + "storedVersionsValue" + ] + } +} \ No newline at end of file diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.CustomResourceDefinition.pb b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1.CustomResourceDefinition.pb new file mode 100644 index 0000000000000000000000000000000000000000..7c9b481ccba5fe738ca23ec0bfe1b532f82074ef GIT binary patch literal 1762 zcmcIlO>7%Q6y6yU#U5vEcW9firC=?Us4S%|t^g|n6a|E!t&o*grEuza{p?J=o?T{U zLlT5kaYE%%af2H<1tFmxE4WmgP^4aZ?5QeJ51cBFaDdqv|Ft;;4*2vu@9%r>d+%+( zsXTI)EU=WrrUs#SBGjpVQ=Q_;>5W(D;@g?h$zTmslF10(fi4$Z8zZ{olLwd-1slL+ z7H2>Y^+14R8a^031?60;QWiOr&{q(5FL2Sf9`!=TJ638Omcs;>LFN$bYjbY3P`LZu zqn~H0-Z>-v@OaNiE%NaqDaNb~u{sZ1wB$tV(GE$O36W@)L$vDZ)PHMp?Nw6jbKw#P z6a3*AO}%2eF%9GlY9d)Nm9v;{8-O;>4b&#{114Axq%S$o_G+tja$g!E*Rr8Y%yg_P1blPq=_eZ@sDi4mlF`N`y_hYW~`BB}CN@R%YC6bR!iHZz-8+Q5oxhY<&Xc2{vX31}}WNt_o zoj;+Xbr>)Qs(3;|*NS1a11gd{9XFv~)T0_3rEVezOuHOJa~->Ut5s4CJJ4lW?3CgA zp8dVF(n23O@#U4PXx&fC+w&>Y8l;<$>!|uAI&>4EZ;&;+es*OC`J@zr$OaD4E;@1x z9sLRU5I^2 zohE)N^Rdx}hxtLvGpr-M}W{*T%1G2pX>bzXAF!exB?b23p9Zo7^3oa}JwqkPe3++{Ne?Mz=A# zgV7#-adWAkwGGdpK`rI8yEI_wQXjV5Xy3!f_FIfc?LH2k(B`gV+9j PropertyValue + description: descriptionValue + enum: + - enumValue + example: exampleValue + exclusiveMaximum: true + exclusiveMinimum: true + externalDocs: + description: descriptionValue + url: urlValue + format: formatValue + id: idValue + items: + - {} + maxItems: 16 + maxLength: 13 + maxProperties: 21 + maximum: 9.5 + minItems: 17 + minLength: 14 + minProperties: 22 + minimum: 11.5 + multipleOf: 19.5 + nullable: true + oneOf: + - {} + pattern: patternValue + patternProperties: + patternPropertiesKey: {} + properties: + propertiesKey: {} + required: + - requiredValue + title: titleValue + type: typeValue + uniqueItems: true + x-kubernetes-embedded-resource: true + x-kubernetes-int-or-string: true + x-kubernetes-list-map-keys: + - x-kubernetes-list-map-keysValue + x-kubernetes-list-type: x-kubernetes-list-typeValue + x-kubernetes-map-type: x-kubernetes-map-typeValue + x-kubernetes-preserve-unknown-fields: true + x-kubernetes-validations: + - message: messageValue + rule: ruleValue + served: true + storage: true + subresources: + scale: + labelSelectorPath: labelSelectorPathValue + specReplicasPath: specReplicasPathValue + statusReplicasPath: statusReplicasPathValue + status: {} +status: + acceptedNames: + categories: + - categoriesValue + kind: kindValue + listKind: listKindValue + plural: pluralValue + shortNames: + - shortNamesValue + singular: singularValue + conditions: + - lastTransitionTime: "2003-01-01T01:01:01Z" + message: messageValue + reason: reasonValue + status: statusValue + type: typeValue + storedVersions: + - storedVersionsValue diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1beta1.ConversionReview.json b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1beta1.ConversionReview.json new file mode 100644 index 00000000000..2b129c4e550 --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1beta1.ConversionReview.json @@ -0,0 +1,61 @@ +{ + "kind": "ConversionReview", + "apiVersion": "apiextensions.k8s.io/v1beta1", + "request": { + "uid": "uidValue", + "desiredAPIVersion": "desiredAPIVersionValue", + "objects": [ + { + "apiVersion": "example.com/v1", + "kind": "CustomType", + "spec": { + "replicas": 1 + }, + "status": { + "available": 1 + } + } + ] + }, + "response": { + "uid": "uidValue", + "convertedObjects": [ + { + "apiVersion": "example.com/v1", + "kind": "CustomType", + "spec": { + "replicas": 1 + }, + "status": { + "available": 1 + } + } + ], + "result": { + "metadata": { + "selfLink": "selfLinkValue", + "resourceVersion": "resourceVersionValue", + "continue": "continueValue", + "remainingItemCount": 4 + }, + "status": "statusValue", + "message": "messageValue", + "reason": "reasonValue", + "details": { + "name": "nameValue", + "group": "groupValue", + "kind": "kindValue", + "uid": "uidValue", + "causes": [ + { + "reason": "reasonValue", + "message": "messageValue", + "field": "fieldValue" + } + ], + "retryAfterSeconds": 5 + }, + "code": 6 + } + } +} \ No newline at end of file diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1beta1.ConversionReview.pb b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/HEAD/apiextensions.k8s.io.v1beta1.ConversionReview.pb new file mode 100644 index 0000000000000000000000000000000000000000..e7acab7bf0e7af2b71ce8ae4f0fbf9965fbeded3 GIT binary patch literal 505 zcmchU%}N6?6op&=u&D(J;$mrM!>QLg+eQg%L&Fp-!w@EHBadARI3JTt35*_;EjIo zl8-()bfTDX>42UVfWks?|MV~m#*Rk?$yUr~|3a2BSn|q9h;v=}e0I%Bp$gBZ4r^V# zyc_Tg4dg6cF$+eDoFhwUDQT2%aRT;6c!vIjxA2W6(?RBn!FZm{W+5gQwt84_aN-^OFp?3duo8pQ`JcJIpK60-r|7~PiICA?6-1P958i~XANo>p((mWV zT}<*J8^C!MBtZA{AOy}NoE=^{<&-L7<{1{ZBp~RX@x#7;QOhNMN1y8RJX3HUcxs2f zZOk=uxm(}d|7pgyR@CXc2RrK2A|Ec0e8Aceh|{o13+AX_v|UnWVHio4nyAV4#J}db z^b*PU{m>|O#`e1-Yibo0l1W2Oq6Xp>1FkP_ip|5jBVAGFbF#0z0KG}W@(1tPd;thB598zp@aIRO-PSNNo-UU*C*oRd_W3u zkZ=|lVoCU6FA112$Ek?5h|4q?#$b2scC8fnLY^K*po9eiX?9b7js|bCCG~4ADm#?7`DYy_O z17p!P+IJo8{}Giqe3bYcOwNBsRr(yUsO4HUt8Oh>E$gDSWnD$qHnwhH>n65#&@K$O zcVoD-8^dqt1S!QlEg7l8o>uZMI)6tvhyFk>lld$Rt^e}+GklU%IuJwHfzZn|9;OFh z4WsHM5rtLBdaqYAk()YxSFlp}g?d+33Ci03-x&HeK18O9f#wo!>hu~;a}FD95NAc; zZew&EqZ=6A#ApXUzp>a)+A7Z=K`f?~x;S9*Vjnh5A>YOar#VKYb_Y8TQPZa*;ywH< z$@3)BON**Eglb^zZvBiZinqx=5rel1ao~GQw3uAeM0!9dP)WoT!P&3z=Nts!$%v00 zEPXpS0gg6WKH zY@p@=g?}8>tWzWUea1sIE_HJ^ACroe9w`Z#u0TD5p!5}Tj6AXg(ecXR PropertyValue + description: descriptionValue + enum: + - enumValue + example: exampleValue + exclusiveMaximum: true + exclusiveMinimum: true + externalDocs: + description: descriptionValue + url: urlValue + format: formatValue + id: idValue + items: + - {} + maxItems: 16 + maxLength: 13 + maxProperties: 21 + maximum: 9.5 + minItems: 17 + minLength: 14 + minProperties: 22 + minimum: 11.5 + multipleOf: 19.5 + nullable: true + oneOf: + - {} + pattern: patternValue + patternProperties: + patternPropertiesKey: {} + properties: + propertiesKey: {} + required: + - requiredValue + title: titleValue + type: typeValue + uniqueItems: true + x-kubernetes-embedded-resource: true + x-kubernetes-int-or-string: true + x-kubernetes-list-map-keys: + - x-kubernetes-list-map-keysValue + x-kubernetes-list-type: x-kubernetes-list-typeValue + x-kubernetes-map-type: x-kubernetes-map-typeValue + x-kubernetes-preserve-unknown-fields: true + x-kubernetes-validations: + - message: messageValue + rule: ruleValue + version: versionValue + versions: + - additionalPrinterColumns: + - JSONPath: JSONPathValue + description: descriptionValue + format: formatValue + name: nameValue + priority: 5 + type: typeValue + deprecated: true + deprecationWarning: deprecationWarningValue + name: nameValue + schema: + openAPIV3Schema: + $ref: $refValue + $schema: $schemaValue + additionalItems: true + additionalProperties: true + allOf: + - {} + anyOf: + - {} + default: defaultValue + definitions: + definitionsKey: {} + dependencies: + dependenciesKey: + - PropertyValue + description: descriptionValue + enum: + - enumValue + example: exampleValue + exclusiveMaximum: true + exclusiveMinimum: true + externalDocs: + description: descriptionValue + url: urlValue + format: formatValue + id: idValue + items: + - {} + maxItems: 16 + maxLength: 13 + maxProperties: 21 + maximum: 9.5 + minItems: 17 + minLength: 14 + minProperties: 22 + minimum: 11.5 + multipleOf: 19.5 + nullable: true + oneOf: + - {} + pattern: patternValue + patternProperties: + patternPropertiesKey: {} + properties: + propertiesKey: {} + required: + - requiredValue + title: titleValue + type: typeValue + uniqueItems: true + x-kubernetes-embedded-resource: true + x-kubernetes-int-or-string: true + x-kubernetes-list-map-keys: + - x-kubernetes-list-map-keysValue + x-kubernetes-list-type: x-kubernetes-list-typeValue + x-kubernetes-map-type: x-kubernetes-map-typeValue + x-kubernetes-preserve-unknown-fields: true + x-kubernetes-validations: + - message: messageValue + rule: ruleValue + served: true + storage: true + subresources: + scale: + labelSelectorPath: labelSelectorPathValue + specReplicasPath: specReplicasPathValue + statusReplicasPath: statusReplicasPathValue + status: {} +status: + acceptedNames: + categories: + - categoriesValue + kind: kindValue + listKind: listKindValue + plural: pluralValue + shortNames: + - shortNamesValue + singular: singularValue + conditions: + - lastTransitionTime: "2003-01-01T01:01:01Z" + message: messageValue + reason: reasonValue + status: statusValue + type: typeValue + storedVersions: + - storedVersionsValue diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/README.md b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/README.md new file mode 100644 index 00000000000..9755fa574c9 --- /dev/null +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/testdata/README.md @@ -0,0 +1,3 @@ +# API serialization compatibility tests + +This directory tree contains serialized API objects in json, yaml, and protobuf formats. \ No newline at end of file