apiserver: fix openapi extension types to be JSON

pull/564/head
Dr. Stefan Schimanski 2019-02-07 15:34:42 +01:00
parent 01bc4eff0e
commit e67d5f2d8d
5 changed files with 25 additions and 15 deletions

View File

@ -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",

View File

@ -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

View File

@ -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))

View File

@ -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",

View File

@ -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",