apiserver: fix openapi extension types to be JSON

Kubernetes-commit: e67d5f2d8dbbc45d28d0fd5566747ef0df93eb6d
This commit is contained in:
Dr. Stefan Schimanski 2019-02-07 15:34:42 +01:00 committed by Kubernetes Publisher
parent c137f497eb
commit 9c9f2c012a
4 changed files with 25 additions and 14 deletions

View File

@ -108,6 +108,18 @@ func (s groupVersionKinds) Less(i, j int) bool {
return s[i].Group < s[j].Group 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. // DefinitionNamer is the type to customize OpenAPI definition name.
type DefinitionNamer struct { type DefinitionNamer struct {
typeGroupVersionKinds map[string]groupVersionKinds typeGroupVersionKinds map[string]groupVersionKinds
@ -172,7 +184,7 @@ func NewDefinitionNamer(schemes ...*runtime.Scheme) *DefinitionNamer {
func (d *DefinitionNamer) GetDefinitionName(name string) (string, spec.Extensions) { func (d *DefinitionNamer) GetDefinitionName(name string) (string, spec.Extensions) {
if groupVersionKinds, ok := d.typeGroupVersionKinds[name]; ok { if groupVersionKinds, ok := d.typeGroupVersionKinds[name]; ok {
return friendlyName(name), spec.Extensions{ return friendlyName(name), spec.Extensions{
extensionGVK: []v1.GroupVersionKind(groupVersionKinds), extensionGVK: groupVersionKinds.JSON(),
} }
} }
return friendlyName(name), nil return friendlyName(name), nil

View File

@ -23,7 +23,6 @@ import (
"github.com/go-openapi/spec" "github.com/go-openapi/spec"
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
openapitesting "k8s.io/apiserver/pkg/endpoints/openapi/testing" openapitesting "k8s.io/apiserver/pkg/endpoints/openapi/testing"
) )
@ -58,13 +57,13 @@ func TestGetDefinitionName(t *testing.T) {
namer := NewDefinitionNamer(s) namer := NewDefinitionNamer(s)
n, e := namer.GetDefinitionName(typePkgName) n, e := namer.GetDefinitionName(typePkgName)
assertEqual(t, typeFriendlyName, n) assertEqual(t, typeFriendlyName, n)
assertEqual(t, e["x-kubernetes-group-version-kind"], []v1.GroupVersionKind{ assertEqual(t, []interface{}{
{ map[string]interface{}{
Group: "test", "group": "test",
Version: "v1", "version": "v1",
Kind: "TestType", "kind": "TestType",
}, },
}) }, e["x-kubernetes-group-version-kind"])
n, e2 := namer.GetDefinitionName("test.com/another.Type") n, e2 := namer.GetDefinitionName("test.com/another.Type")
assertEqual(t, "com.test.another.Type", n) assertEqual(t, "com.test.another.Type", n)
assertEqual(t, e2, spec.Extensions(nil)) assertEqual(t, e2, spec.Extensions(nil))

View File

@ -89,18 +89,18 @@ func buildTestOpenAPIDefinition() kubeopenapi.OpenAPIDefinition {
}, },
VendorExtensible: openapi.VendorExtensible{ VendorExtensible: openapi.VendorExtensible{
Extensions: openapi.Extensions{ Extensions: openapi.Extensions{
"x-kubernetes-group-version-kind": []map[string]string{ "x-kubernetes-group-version-kind": []interface{}{
{ map[string]interface{}{
"group": "", "group": "",
"version": "v1", "version": "v1",
"kind": "Getter", "kind": "Getter",
}, },
{ map[string]interface{}{
"group": "batch", "group": "batch",
"version": "v1", "version": "v1",
"kind": "Getter", "kind": "Getter",
}, },
{ map[string]interface{}{
"group": "extensions", "group": "extensions",
"version": "v1", "version": "v1",
"kind": "Getter", "kind": "Getter",

View File

@ -44,8 +44,8 @@ func TestOpenAPIDefinitionsToProtoModels(t *testing.T) {
}, },
VendorExtensible: spec.VendorExtensible{ VendorExtensible: spec.VendorExtensible{
Extensions: spec.Extensions{ Extensions: spec.Extensions{
"x-kubernetes-group-version-kind": []map[string]string{ "x-kubernetes-group-version-kind": []interface{}{
{ map[string]interface{}{
"group": "testgroup.k8s.io", "group": "testgroup.k8s.io",
"version": "v1", "version": "v1",
"kind": "Foo", "kind": "Foo",