APIServer: Use options pattern in standalone mode (#82760)

use options
This commit is contained in:
Ryan McKinley 2024-02-15 12:00:20 -08:00 committed by GitHub
parent ba63e62311
commit c879588332
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 23 additions and 5 deletions

View File

@ -62,7 +62,7 @@ func newCommandStartExampleAPIServer(o *APIServerOptions, stopCh <-chan struct{}
}
cmd.Flags().StringVar(&runtimeConfig, "runtime-config", "", "A set of key=value pairs that enable or disable built-in APIs.")
o.factory.InitFlags(cmd.Flags())
o.factory.GetOptions().AddFlags(cmd.Flags())
// Register standard k8s flags with the command line
o.RecommendedOptions = options.NewRecommendedOptions(

View File

@ -110,6 +110,7 @@ func (o *APIServerOptions) ModifiedApplyTo(config *genericapiserver.RecommendedC
if err != nil {
return err
}
return nil
}
@ -160,6 +161,7 @@ func (o *APIServerOptions) Config() (*genericapiserver.RecommendedConfig, error)
func (o *APIServerOptions) Validate(args []string) error {
errors := []error{}
errors = append(errors, o.RecommendedOptions.Validate()...)
errors = append(errors, o.factory.GetOptions().ValidateOptions()...)
return utilerrors.NewAggregate(errors)
}

View File

@ -10,6 +10,11 @@ import (
genericoptions "k8s.io/apiserver/pkg/server/options"
)
type OptionsProvider interface {
AddFlags(fs *pflag.FlagSet)
ValidateOptions() []error
}
const defaultEtcdPathPrefix = "/registry/grafana.app"
type Options struct {
@ -17,6 +22,7 @@ type Options struct {
AggregatorOptions *AggregatorServerOptions
StorageOptions *StorageOptions
ExtraOptions *ExtraOptions
APIOptions []OptionsProvider
}
func NewOptions(codec runtime.Codec) *Options {
@ -36,6 +42,10 @@ func (o *Options) AddFlags(fs *pflag.FlagSet) {
o.AggregatorOptions.AddFlags(fs)
o.StorageOptions.AddFlags(fs)
o.ExtraOptions.AddFlags(fs)
for _, api := range o.APIOptions {
api.AddFlags(fs)
}
}
func (o *Options) Validate() []error {
@ -69,6 +79,11 @@ func (o *Options) Validate() []error {
}
}
for _, api := range o.APIOptions {
if errs := api.ValidateOptions(); len(errs) != 0 {
return errs
}
}
return nil
}
@ -100,7 +115,6 @@ func (o *Options) ApplyTo(serverConfig *genericapiserver.RecommendedConfig) erro
}
serverConfig.SecureServing = nil
}
return nil
}

View File

@ -5,7 +5,6 @@ import (
"fmt"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/spf13/pflag"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
@ -19,6 +18,7 @@ import (
"github.com/grafana/grafana/pkg/services/accesscontrol/actest"
"github.com/grafana/grafana/pkg/services/apiserver/builder"
"github.com/grafana/grafana/pkg/services/apiserver/endpoints/request"
"github.com/grafana/grafana/pkg/services/apiserver/options"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/setting"
testdatasource "github.com/grafana/grafana/pkg/tsdb/grafana-testdata-datasource"
@ -26,7 +26,7 @@ import (
type APIServerFactory interface {
// Called before the groups are loaded so any custom command can be registered
InitFlags(flags *pflag.FlagSet)
GetOptions() options.OptionsProvider
// Given the flags, what can we produce
GetEnabled(runtime []RuntimeConfig) ([]schema.GroupVersion, error)
@ -42,7 +42,9 @@ func GetDummyAPIFactory() APIServerFactory {
type DummyAPIFactory struct{}
func (p *DummyAPIFactory) InitFlags(flags *pflag.FlagSet) {}
func (p *DummyAPIFactory) GetOptions() options.OptionsProvider {
return nil
}
func (p *DummyAPIFactory) GetEnabled(runtime []RuntimeConfig) ([]schema.GroupVersion, error) {
gv := []schema.GroupVersion{}