diff --git a/custom-metrics-stackdriver-adapter/adapter.go b/custom-metrics-stackdriver-adapter/adapter.go index 6c861bd0b..e0dee034c 100644 --- a/custom-metrics-stackdriver-adapter/adapter.go +++ b/custom-metrics-stackdriver-adapter/adapter.go @@ -34,8 +34,8 @@ import ( stackdriver "google.golang.org/api/monitoring/v3" openapinamer "k8s.io/apiserver/pkg/endpoints/openapi" genericapiserver "k8s.io/apiserver/pkg/server" - openapispec "k8s.io/kube-openapi/pkg/validation/spec" coreclient "k8s.io/client-go/kubernetes/typed/core/v1" + openapispec "k8s.io/kube-openapi/pkg/validation/spec" customexternalmetrics "sigs.k8s.io/custom-metrics-apiserver/pkg/apiserver" "sigs.k8s.io/custom-metrics-apiserver/pkg/provider" @@ -190,15 +190,7 @@ func main() { }, } - if cmd.OpenAPIConfig == nil { - namer := openapinamer.NewDefinitionNamer(api.Scheme, customexternalmetrics.Scheme) - cmd.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(generatedopenapi.GetOpenAPIDefinitions, namer) - cmd.OpenAPIConfig.GetDefinitionName = func(name string) (string, openapispec.Extensions) { - return getDefinitionName(namer, name) - } - cmd.OpenAPIConfig.Info.Title = "custom-metrics-stackdriver-adapter" - cmd.OpenAPIConfig.Info.Version = "1.0.0" - } + configureOpenAPI(cmd) flags := cmd.Flags() klog.InitFlags(flag.CommandLine) @@ -279,6 +271,27 @@ func main() { } } +func configureOpenAPI(cmd *StackdriverAdapter) { + namer := openapinamer.NewDefinitionNamer(api.Scheme, customexternalmetrics.Scheme) + resolveDefinitionName := func(name string) (string, openapispec.Extensions) { + return getDefinitionName(namer, name) + } + + if cmd.OpenAPIConfig == nil { + cmd.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(generatedopenapi.GetOpenAPIDefinitions, namer) + cmd.OpenAPIConfig.GetDefinitionName = resolveDefinitionName + cmd.OpenAPIConfig.Info.Title = "custom-metrics-stackdriver-adapter" + cmd.OpenAPIConfig.Info.Version = "1.0.0" + } + + if cmd.OpenAPIV3Config == nil { + cmd.OpenAPIV3Config = genericapiserver.DefaultOpenAPIV3Config(generatedopenapi.GetOpenAPIDefinitions, namer) + cmd.OpenAPIV3Config.GetDefinitionName = resolveDefinitionName + cmd.OpenAPIV3Config.Info.Title = "custom-metrics-stackdriver-adapter" + cmd.OpenAPIV3Config.Info.Version = "1.0.0" + } +} + func getDefinitionName(namer *openapinamer.DefinitionNamer, name string) (string, openapispec.Extensions) { if name == "k8s.io/apimachinery/pkg/version.Info" { return version.Info{}.OpenAPIModelName(), nil diff --git a/custom-metrics-stackdriver-adapter/adapter_test.go b/custom-metrics-stackdriver-adapter/adapter_test.go index d24e2d519..d2995bc44 100644 --- a/custom-metrics-stackdriver-adapter/adapter_test.go +++ b/custom-metrics-stackdriver-adapter/adapter_test.go @@ -22,6 +22,7 @@ import ( generatedopenapi "github.com/GoogleCloudPlatform/k8s-stackdriver/custom-metrics-stackdriver-adapter/pkg/api/generated/openapi" openapinamer "k8s.io/apiserver/pkg/endpoints/openapi" + builder3 "k8s.io/kube-openapi/pkg/builder3" "k8s.io/kube-openapi/pkg/validation/spec" customexternalmetrics "sigs.k8s.io/custom-metrics-apiserver/pkg/apiserver" "sigs.k8s.io/metrics-server/pkg/api" @@ -96,4 +97,20 @@ func TestOpenAPIDefinitionsResolution(t *testing.T) { t.Errorf("OpenAPI definition for GVK %v (type name %q resolved to %q) not found in generated definitions", gvk, typeName, resolvedName) } } -} \ No newline at end of file +} + +func TestOpenAPIV3DefinitionsResolution(t *testing.T) { + cmd := &StackdriverAdapter{} + configureOpenAPI(cmd) + + names := []string{ + "io.k8s.metrics.pkg.apis.custom_metrics.v1beta1.MetricValueList", + "io.k8s.metrics.pkg.apis.custom_metrics.v1beta2.MetricValueList", + "io.k8s.metrics.pkg.apis.external_metrics.v1beta1.ExternalMetricValueList", + } + for _, name := range names { + if _, err := builder3.BuildOpenAPIDefinitionsForResources(cmd.OpenAPIV3Config, name); err != nil { + t.Errorf("OpenAPI v3 definition for %q not found: %v", name, err) + } + } +}