From 0974cbad950ae5cf54d5ff213ee7ab87a6eb5734 Mon Sep 17 00:00:00 2001 From: Jefftree Date: Tue, 22 Mar 2022 20:58:17 -0700 Subject: [PATCH] Fix OpenAPI v3 bug with #/definitions --- .../pkg/controller/openapi/builder/builder.go | 2 +- .../pkg/controller/openapi/builder/builder_test.go | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go index d935eb2d919..76daefe10b4 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder.go @@ -501,7 +501,7 @@ func (b *builder) buildListSchema(v2 bool) *spec.Schema { doc := fmt.Sprintf("List of %s. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md", b.plural) s := new(spec.Schema).WithDescription(fmt.Sprintf("%s is a list of %s", b.listKind, b.kind)). WithRequired("items"). - SetProperty("items", *spec.ArrayProperty(spec.RefSchema(name)).WithDescription(doc)). + SetProperty("items", *spec.ArrayProperty(spec.RefSchema(refForOpenAPIVersion(name, v2))).WithDescription(doc)). SetProperty("metadata", *spec.RefSchema(refForOpenAPIVersion(listMetaSchemaRef, v2)).WithDescription(swaggerPartialObjectMetadataListDescriptions["metadata"])) addTypeMetaProperties(s, v2) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go index ebef7e224d6..552e93d14fa 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/builder/builder_test.go @@ -782,6 +782,10 @@ func TestBuildOpenAPIV3(t *testing.T) { } gotSchema := *got.Components.Schemas["io.k8s.bar.v1.Foo"] + listSchemaRef := got.Components.Schemas["io.k8s.bar.v1.FooList"].Properties["items"].Items.Schema.Ref.String() + if strings.Contains(listSchemaRef, "#/definitions/") || !strings.Contains(listSchemaRef, "#/components/schemas/") { + t.Errorf("Expected list schema ref to contain #/components/schemas/ prefix. Got %s", listSchemaRef) + } gotProperties := properties(gotSchema.Properties) wantedProperties := properties(wantedSchema.Properties) if !gotProperties.Equal(wantedProperties) {