From e67d5f2d8dbbc45d28d0fd5566747ef0df93eb6d Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Thu, 7 Feb 2019 15:34:42 +0100 Subject: [PATCH] apiserver: fix openapi extension types to be JSON --- .../k8s.io/apiserver/pkg/endpoints/openapi/BUILD | 1 - .../apiserver/pkg/endpoints/openapi/openapi.go | 14 +++++++++++++- .../pkg/endpoints/openapi/openapi_test.go | 13 ++++++------- .../apiserver/pkg/server/genericapiserver_test.go | 8 ++++---- .../apiserver/pkg/util/openapi/proto_test.go | 4 ++-- 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/openapi/BUILD b/staging/src/k8s.io/apiserver/pkg/endpoints/openapi/BUILD index e525394ce62..639f52d7566 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/openapi/BUILD +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/openapi/BUILD @@ -11,7 +11,6 @@ go_test( srcs = ["openapi_test.go"], embed = [":go_default_library"], deps = [ - "//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/openapi/testing:go_default_library", "//vendor/github.com/go-openapi/spec:go_default_library", diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/openapi/openapi.go b/staging/src/k8s.io/apiserver/pkg/endpoints/openapi/openapi.go index e512f29b38c..e3bd028bbf9 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/openapi/openapi.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/openapi/openapi.go @@ -108,6 +108,18 @@ func (s groupVersionKinds) Less(i, j int) bool { return s[i].Group < s[j].Group } +func (s groupVersionKinds) JSON() []interface{} { + j := []interface{}{} + for _, gvk := range s { + j = append(j, map[string]interface{}{ + "group": gvk.Group, + "version": gvk.Version, + "kind": gvk.Kind, + }) + } + return j +} + // DefinitionNamer is the type to customize OpenAPI definition name. type DefinitionNamer struct { typeGroupVersionKinds map[string]groupVersionKinds @@ -172,7 +184,7 @@ func NewDefinitionNamer(schemes ...*runtime.Scheme) *DefinitionNamer { func (d *DefinitionNamer) GetDefinitionName(name string) (string, spec.Extensions) { if groupVersionKinds, ok := d.typeGroupVersionKinds[name]; ok { return friendlyName(name), spec.Extensions{ - extensionGVK: []v1.GroupVersionKind(groupVersionKinds), + extensionGVK: groupVersionKinds.JSON(), } } return friendlyName(name), nil diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/openapi/openapi_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/openapi/openapi_test.go index fb188fed0c7..0ebfedeaeba 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/openapi/openapi_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/openapi/openapi_test.go @@ -23,7 +23,6 @@ import ( "github.com/go-openapi/spec" - "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" openapitesting "k8s.io/apiserver/pkg/endpoints/openapi/testing" ) @@ -58,13 +57,13 @@ func TestGetDefinitionName(t *testing.T) { namer := NewDefinitionNamer(s) n, e := namer.GetDefinitionName(typePkgName) assertEqual(t, typeFriendlyName, n) - assertEqual(t, e["x-kubernetes-group-version-kind"], []v1.GroupVersionKind{ - { - Group: "test", - Version: "v1", - Kind: "TestType", + assertEqual(t, []interface{}{ + map[string]interface{}{ + "group": "test", + "version": "v1", + "kind": "TestType", }, - }) + }, e["x-kubernetes-group-version-kind"]) n, e2 := namer.GetDefinitionName("test.com/another.Type") assertEqual(t, "com.test.another.Type", n) assertEqual(t, e2, spec.Extensions(nil)) diff --git a/staging/src/k8s.io/apiserver/pkg/server/genericapiserver_test.go b/staging/src/k8s.io/apiserver/pkg/server/genericapiserver_test.go index df6b0203ca2..cd9e57bc210 100644 --- a/staging/src/k8s.io/apiserver/pkg/server/genericapiserver_test.go +++ b/staging/src/k8s.io/apiserver/pkg/server/genericapiserver_test.go @@ -89,18 +89,18 @@ func buildTestOpenAPIDefinition() kubeopenapi.OpenAPIDefinition { }, VendorExtensible: openapi.VendorExtensible{ Extensions: openapi.Extensions{ - "x-kubernetes-group-version-kind": []map[string]string{ - { + "x-kubernetes-group-version-kind": []interface{}{ + map[string]interface{}{ "group": "", "version": "v1", "kind": "Getter", }, - { + map[string]interface{}{ "group": "batch", "version": "v1", "kind": "Getter", }, - { + map[string]interface{}{ "group": "extensions", "version": "v1", "kind": "Getter", diff --git a/staging/src/k8s.io/apiserver/pkg/util/openapi/proto_test.go b/staging/src/k8s.io/apiserver/pkg/util/openapi/proto_test.go index d4ee737caa2..4fbd63f1891 100644 --- a/staging/src/k8s.io/apiserver/pkg/util/openapi/proto_test.go +++ b/staging/src/k8s.io/apiserver/pkg/util/openapi/proto_test.go @@ -44,8 +44,8 @@ func TestOpenAPIDefinitionsToProtoModels(t *testing.T) { }, VendorExtensible: spec.VendorExtensible{ Extensions: spec.Extensions{ - "x-kubernetes-group-version-kind": []map[string]string{ - { + "x-kubernetes-group-version-kind": []interface{}{ + map[string]interface{}{ "group": "testgroup.k8s.io", "version": "v1", "kind": "Foo",