Merge pull request #64174 from liggitt/correct-openapi-extensions
Automatic merge from submit-queue (batch tested with PRs 64174, 64187, 64216, 63265, 64223). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Correctly identify types served in the kube-apiserver openapi doc Fixes https://github.com/kubernetes/kubernetes/issues/52741 Split out from https://github.com/kubernetes/kubernetes/pull/63893 ```release-note The kube-apiserver openapi doc now includes extensions identifying APIService and CustomResourceDefinition kinds ``` Kubernetes-commit: fa354b3f6813d5a113930fbf34e06a3580d1faae
This commit is contained in:
commit
26d8520c41
|
|
@ -143,12 +143,24 @@ func typeName(t reflect.Type) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDefinitionNamer constructs a new DefinitionNamer to be used to customize OpenAPI spec.
|
// NewDefinitionNamer constructs a new DefinitionNamer to be used to customize OpenAPI spec.
|
||||||
func NewDefinitionNamer(s *runtime.Scheme) DefinitionNamer {
|
func NewDefinitionNamer(schemes ...*runtime.Scheme) *DefinitionNamer {
|
||||||
ret := DefinitionNamer{
|
ret := &DefinitionNamer{
|
||||||
typeGroupVersionKinds: map[string]groupVersionKinds{},
|
typeGroupVersionKinds: map[string]groupVersionKinds{},
|
||||||
}
|
}
|
||||||
for gvk, rtype := range s.AllKnownTypes() {
|
for _, s := range schemes {
|
||||||
ret.typeGroupVersionKinds[typeName(rtype)] = append(ret.typeGroupVersionKinds[typeName(rtype)], gvkConvert(gvk))
|
for gvk, rtype := range s.AllKnownTypes() {
|
||||||
|
newGVK := gvkConvert(gvk)
|
||||||
|
exists := false
|
||||||
|
for _, existingGVK := range ret.typeGroupVersionKinds[typeName(rtype)] {
|
||||||
|
if newGVK == existingGVK {
|
||||||
|
exists = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !exists {
|
||||||
|
ret.typeGroupVersionKinds[typeName(rtype)] = append(ret.typeGroupVersionKinds[typeName(rtype)], newGVK)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for _, gvk := range ret.typeGroupVersionKinds {
|
for _, gvk := range ret.typeGroupVersionKinds {
|
||||||
sort.Sort(gvk)
|
sort.Sort(gvk)
|
||||||
|
|
|
||||||
|
|
@ -278,8 +278,7 @@ func NewRecommendedConfig(codecs serializer.CodecFactory) *RecommendedConfig {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func DefaultOpenAPIConfig(getDefinitions openapicommon.GetOpenAPIDefinitions, scheme *runtime.Scheme) *openapicommon.Config {
|
func DefaultOpenAPIConfig(getDefinitions openapicommon.GetOpenAPIDefinitions, defNamer *apiopenapi.DefinitionNamer) *openapicommon.Config {
|
||||||
defNamer := apiopenapi.NewDefinitionNamer(scheme)
|
|
||||||
return &openapicommon.Config{
|
return &openapicommon.Config{
|
||||||
ProtocolList: []string{"https"},
|
ProtocolList: []string{"https"},
|
||||||
IgnorePrefixes: []string{"/swaggerapi"},
|
IgnorePrefixes: []string{"/swaggerapi"},
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ import (
|
||||||
"k8s.io/apiserver/pkg/authorization/authorizer"
|
"k8s.io/apiserver/pkg/authorization/authorizer"
|
||||||
"k8s.io/apiserver/pkg/endpoints/discovery"
|
"k8s.io/apiserver/pkg/endpoints/discovery"
|
||||||
genericapifilters "k8s.io/apiserver/pkg/endpoints/filters"
|
genericapifilters "k8s.io/apiserver/pkg/endpoints/filters"
|
||||||
|
openapinamer "k8s.io/apiserver/pkg/endpoints/openapi"
|
||||||
"k8s.io/apiserver/pkg/registry/rest"
|
"k8s.io/apiserver/pkg/registry/rest"
|
||||||
genericfilters "k8s.io/apiserver/pkg/server/filters"
|
genericfilters "k8s.io/apiserver/pkg/server/filters"
|
||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
||||||
|
|
@ -95,7 +96,7 @@ func setUp(t *testing.T) (Config, *assert.Assertions) {
|
||||||
t.Fatal("unable to create fake client set")
|
t.Fatal("unable to create fake client set")
|
||||||
}
|
}
|
||||||
|
|
||||||
config.OpenAPIConfig = DefaultOpenAPIConfig(testGetOpenAPIDefinitions, runtime.NewScheme())
|
config.OpenAPIConfig = DefaultOpenAPIConfig(testGetOpenAPIDefinitions, openapinamer.NewDefinitionNamer(runtime.NewScheme()))
|
||||||
config.OpenAPIConfig.Info.Version = "unversioned"
|
config.OpenAPIConfig.Info.Version = "unversioned"
|
||||||
config.SwaggerConfig = DefaultSwaggerConfig()
|
config.SwaggerConfig = DefaultSwaggerConfig()
|
||||||
sharedInformers := informers.NewSharedInformerFactory(clientset, config.LoopbackClientConfig.Timeout)
|
sharedInformers := informers.NewSharedInformerFactory(clientset, config.LoopbackClientConfig.Timeout)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue