github.com/operator-framework/operator-lifecycle-manager@v0.30.0/pkg/package-server/apiserver/config.go (about) 1 // Copyright 2018 The Kubernetes Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package apiserver 16 17 import ( 18 "strings" 19 20 openapinamer "k8s.io/apiserver/pkg/endpoints/openapi" 21 genericapiserver "k8s.io/apiserver/pkg/server" 22 utilversion "k8s.io/apiserver/pkg/util/version" 23 "k8s.io/client-go/informers" 24 25 "github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/apiserver/generic" 26 generatedopenapi "github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/client/openapi" 27 "github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/version" 28 ) 29 30 // Config contains configuration for launching an instance of package-server. 31 type Config struct { 32 GenericConfig *genericapiserver.Config 33 ProviderConfig generic.ProviderConfig 34 } 35 36 type completedConfig struct { 37 genericapiserver.CompletedConfig 38 ProviderConfig *generic.ProviderConfig 39 } 40 41 // Complete fills in any fields not set that are required to have valid data. It's mutating the receiver. 42 func (c *Config) Complete(informers informers.SharedInformerFactory) completedConfig { 43 c.GenericConfig.EffectiveVersion = utilversion.NewEffectiveVersion(version.VersionInfo().String()) 44 45 // enable OpenAPI schemas 46 c.GenericConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(generatedopenapi.GetOpenAPIDefinitions, openapinamer.NewDefinitionNamer(generic.Scheme)) 47 c.GenericConfig.OpenAPIConfig.Info.Title = "Package API server" 48 c.GenericConfig.OpenAPIConfig.Info.Version = strings.Split(c.GenericConfig.EffectiveVersion.String(), "-")[0] 49 50 // enable OpenAPIV3 schemas 51 c.GenericConfig.OpenAPIV3Config = genericapiserver.DefaultOpenAPIV3Config(generatedopenapi.GetOpenAPIDefinitions, openapinamer.NewDefinitionNamer(generic.Scheme)) 52 c.GenericConfig.OpenAPIV3Config.Info.Title = "Package API server" 53 c.GenericConfig.OpenAPIV3Config.Info.Version = strings.Split(c.GenericConfig.EffectiveVersion.String(), "-")[0] 54 55 return completedConfig{ 56 CompletedConfig: c.GenericConfig.Complete(informers), 57 ProviderConfig: &c.ProviderConfig, 58 } 59 } 60 61 type PackageManifestServer struct { 62 *genericapiserver.GenericAPIServer 63 } 64 65 // New returns a new instance of MetricsServer from the given config. 66 func (c completedConfig) New() (*PackageManifestServer, error) { 67 genericServer, err := c.CompletedConfig.New("packagemanifest-server", genericapiserver.NewEmptyDelegate()) // completion is done in Complete, no need for a second time 68 if err != nil { 69 return nil, err 70 } 71 72 if err := generic.InstallStorage(c.ProviderConfig, genericServer); err != nil { 73 return nil, err 74 } 75 76 return &PackageManifestServer{ 77 GenericAPIServer: genericServer, 78 }, nil 79 }