APIServer: Move shared code to a utility/helper function (#80261)

This commit is contained in:
Ryan McKinley
2024-01-10 07:30:16 -08:00
committed by GitHub
parent 4f832c4c69
commit ee7daeb2a7
6 changed files with 113 additions and 134 deletions
+9 -17
View File
@@ -4,11 +4,13 @@ import (
"os"
"path"
"github.com/grafana/grafana/pkg/aggregator"
"github.com/grafana/grafana/pkg/services/grafana-apiserver/utils"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/klog/v2"
"github.com/grafana/grafana/pkg/aggregator"
grafanaapiserver "github.com/grafana/grafana/pkg/services/grafana-apiserver"
"github.com/grafana/grafana/pkg/services/grafana-apiserver/utils"
"github.com/spf13/cobra"
genericapiserver "k8s.io/apiserver/pkg/server"
"k8s.io/apiserver/pkg/server/options"
@@ -56,7 +58,7 @@ func newCommandStartExampleAPIServer(o *APIServerOptions, stopCh <-chan struct{}
// Register standard k8s flags with the command line
o.RecommendedOptions = options.NewRecommendedOptions(
defaultEtcdPathPrefix,
Codecs.LegacyCodec(), // the codec is passed to etcd and not used
grafanaapiserver.Codecs.LegacyCodec(), // the codec is passed to etcd and not used
)
o.RecommendedOptions.AddFlags(cmd.Flags())
@@ -111,20 +113,10 @@ func run(serverOptions *aggregator.AggregatorServerOptions) error {
}
// Install the API Group+version
for _, b := range serverOptions.Builders {
g, err := b.GetAPIGroupInfo(Scheme, Codecs, config.GenericConfig.RESTOptionsGetter)
if err != nil {
klog.Errorf("Error getting group info for prerequisite API group: %s", err)
return err
}
if g == nil || len(g.PrioritizedVersions) < 1 {
continue
}
err = aggregator.GenericAPIServer.InstallAPIGroup(g)
if err != nil {
klog.Errorf("Error installing prerequisite API groups for aggregator: %s", err)
return err
}
err = grafanaapiserver.InstallAPIs(aggregator.GenericAPIServer, config.GenericConfig.RESTOptionsGetter, serverOptions.Builders)
if err != nil {
klog.Errorf("Error installing apis: %s", err)
return err
}
if err := clientcmd.WriteToFile(
+8 -52
View File
@@ -6,22 +6,15 @@ import (
"net"
"path"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/serializer"
utilerrors "k8s.io/apimachinery/pkg/util/errors"
openapinamer "k8s.io/apiserver/pkg/endpoints/openapi"
genericapiserver "k8s.io/apiserver/pkg/server"
"k8s.io/apiserver/pkg/server/options"
"k8s.io/apiserver/pkg/util/openapi"
"k8s.io/client-go/tools/clientcmd"
netutils "k8s.io/utils/net"
"github.com/grafana/grafana/pkg/services/grafana-apiserver/utils"
"github.com/grafana/grafana/pkg/registry/apis/example"
grafanaAPIServer "github.com/grafana/grafana/pkg/services/grafana-apiserver"
"github.com/grafana/grafana/pkg/services/grafana-apiserver/utils"
)
const (
@@ -29,26 +22,6 @@ const (
dataPath = "data/grafana-apiserver" // same as grafana core
)
var (
Scheme = runtime.NewScheme()
Codecs = serializer.NewCodecFactory(Scheme)
)
func init() {
unversionedVersion := schema.GroupVersion{Group: "", Version: "v1"}
unversionedTypes := []runtime.Object{
&metav1.Status{},
&metav1.WatchEvent{},
&metav1.APIVersions{},
&metav1.APIGroupList{},
&metav1.APIGroup{},
&metav1.APIResourceList{},
}
// we need to add the options to empty v1
metav1.AddToGroupVersion(Scheme, schema.GroupVersion{Group: "", Version: "v1"})
Scheme.AddUnversionedTypes(unversionedVersion, unversionedTypes...)
}
// APIServerOptions contains the state for the apiserver
type APIServerOptions struct {
builders []grafanaAPIServer.APIGroupBuilder
@@ -84,7 +57,7 @@ func (o *APIServerOptions) LoadAPIGroupBuilders(args []string) error {
// Install schemas
for _, b := range o.builders {
if err := b.InstallSchema(Scheme); err != nil {
if err := b.InstallSchema(grafanaAPIServer.Scheme); err != nil {
return err
}
}
@@ -160,7 +133,7 @@ func (o *APIServerOptions) Config() (*genericapiserver.RecommendedConfig, error)
o.RecommendedOptions.CoreAPI = nil
}
serverConfig := genericapiserver.NewRecommendedConfig(Codecs)
serverConfig := genericapiserver.NewRecommendedConfig(grafanaAPIServer.Codecs)
if o.RecommendedOptions.CoreAPI == nil {
if err := o.ModifiedApplyTo(serverConfig); err != nil {
@@ -176,16 +149,8 @@ func (o *APIServerOptions) Config() (*genericapiserver.RecommendedConfig, error)
serverConfig.DisabledPostStartHooks = serverConfig.DisabledPostStartHooks.Insert("priority-and-fairness-config-consumer")
// Add OpenAPI specs for each group+version
defsGetter := grafanaAPIServer.GetOpenAPIDefinitions(o.builders)
serverConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(
openapi.GetOpenAPIDefinitionsWithoutDisabledFeatures(defsGetter),
openapinamer.NewDefinitionNamer(Scheme))
serverConfig.OpenAPIV3Config = genericapiserver.DefaultOpenAPIV3Config(
openapi.GetOpenAPIDefinitionsWithoutDisabledFeatures(defsGetter),
openapinamer.NewDefinitionNamer(Scheme))
return serverConfig, nil
err := grafanaAPIServer.SetupConfig(serverConfig, o.builders)
return serverConfig, err
}
// Validate validates APIServerOptions
@@ -212,18 +177,9 @@ func (o *APIServerOptions) RunAPIServer(config *genericapiserver.RecommendedConf
}
// Install the API Group+version
for _, b := range o.builders {
g, err := b.GetAPIGroupInfo(Scheme, Codecs, completedConfig.RESTOptionsGetter)
if err != nil {
return err
}
if g == nil || len(g.PrioritizedVersions) < 1 {
continue
}
err = server.InstallAPIGroup(g)
if err != nil {
return err
}
err = grafanaAPIServer.InstallAPIs(server, config.RESTOptionsGetter, o.builders)
if err != nil {
return err
}
// write the local config to disk