mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-08 03:33:56 +00:00
Simplify extra initializer logic
This commit is contained in:
parent
5dab6bc40a
commit
a8127df3bb
@ -188,13 +188,9 @@ type Config struct {
|
||||
PublicAddress net.IP
|
||||
}
|
||||
|
||||
type AdmissionInitializersInitFunc func() (admission.PluginInitializer, error)
|
||||
|
||||
type RecommendedConfig struct {
|
||||
Config
|
||||
|
||||
ExtraAdmissionInitializersInitFunc []AdmissionInitializersInitFunc
|
||||
|
||||
// SharedInformerFactory provides shared informers for Kubernetes resources. This value is set by
|
||||
// RecommendedOptions.CoreAPI.ApplyTo called by RecommendedOptions.ApplyTo. It uses an in-cluster client config
|
||||
// by default, or the kubeconfig given with kubeconfig command line flag.
|
||||
@ -263,7 +259,6 @@ func NewConfig(codecs serializer.CodecFactory) *Config {
|
||||
func NewRecommendedConfig(codecs serializer.CodecFactory) *RecommendedConfig {
|
||||
return &RecommendedConfig{
|
||||
Config: *NewConfig(codecs),
|
||||
ExtraAdmissionInitializersInitFunc: make([]AdmissionInitializersInitFunc, 0),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -104,6 +104,16 @@ func (a *AdmissionOptions) ApplyTo(
|
||||
return nil
|
||||
}
|
||||
|
||||
// Admission need scheme to construct admission initializer.
|
||||
if scheme == nil {
|
||||
return fmt.Errorf("admission depends on a scheme, it cannot be nil")
|
||||
}
|
||||
|
||||
// Admission depends on CoreAPI to set SharedInformerFactory and ClientConfig.
|
||||
if informers == nil {
|
||||
return fmt.Errorf("admission depends on a Kubernetes core API shared informer, it cannot be nil")
|
||||
}
|
||||
|
||||
pluginNames := a.PluginNames
|
||||
if len(a.PluginNames) == 0 {
|
||||
pluginNames = a.enabledPluginNames()
|
||||
|
@ -17,8 +17,6 @@ limitations under the License.
|
||||
package options
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/spf13/pflag"
|
||||
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
@ -38,19 +36,24 @@ type RecommendedOptions struct {
|
||||
Audit *AuditOptions
|
||||
Features *FeatureOptions
|
||||
CoreAPI *CoreAPIOptions
|
||||
Admission *AdmissionOptions
|
||||
|
||||
// ExtraAdmissionInitializers is called once after all ApplyTo from the options above, to pass the returned
|
||||
// admission plugin initializers to Admission.ApplyTo.
|
||||
ExtraAdmissionInitializers func() ([]admission.PluginInitializer, error)
|
||||
Admission *AdmissionOptions
|
||||
}
|
||||
|
||||
func NewRecommendedOptions(prefix string, codec runtime.Codec) *RecommendedOptions {
|
||||
return &RecommendedOptions{
|
||||
Etcd: NewEtcdOptions(storagebackend.NewDefaultConfig(prefix, codec)),
|
||||
SecureServing: NewSecureServingOptions(),
|
||||
Authentication: NewDelegatingAuthenticationOptions(),
|
||||
Authorization: NewDelegatingAuthorizationOptions(),
|
||||
Audit: NewAuditOptions(),
|
||||
Features: NewFeatureOptions(),
|
||||
CoreAPI: NewCoreAPIOptions(),
|
||||
Admission: NewAdmissionOptions(),
|
||||
Etcd: NewEtcdOptions(storagebackend.NewDefaultConfig(prefix, codec)),
|
||||
SecureServing: NewSecureServingOptions(),
|
||||
Authentication: NewDelegatingAuthenticationOptions(),
|
||||
Authorization: NewDelegatingAuthorizationOptions(),
|
||||
Audit: NewAuditOptions(),
|
||||
Features: NewFeatureOptions(),
|
||||
CoreAPI: NewCoreAPIOptions(),
|
||||
ExtraAdmissionInitializers: func() ([]admission.PluginInitializer, error) { return nil, nil },
|
||||
Admission: NewAdmissionOptions(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -90,34 +93,10 @@ func (o *RecommendedOptions) ApplyTo(config *server.RecommendedConfig, scheme *r
|
||||
if err := o.CoreAPI.ApplyTo(config); err != nil {
|
||||
return err
|
||||
}
|
||||
if o.Admission != nil {
|
||||
// Admission depends on CoreAPI to set SharedInformerFactory and ClientConfig.
|
||||
if o.CoreAPI == nil {
|
||||
return fmt.Errorf("admission depends on CoreAPI, so it must be set")
|
||||
}
|
||||
// Admission need scheme to construct admission initializer.
|
||||
if scheme == nil {
|
||||
return fmt.Errorf("admission depends on shceme, so it must be set")
|
||||
}
|
||||
|
||||
pluginInitializers := []admission.PluginInitializer{}
|
||||
for _, initFunc := range config.ExtraAdmissionInitializersInitFunc {
|
||||
intializer, err := initFunc()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
pluginInitializers = append(pluginInitializers, intializer)
|
||||
}
|
||||
|
||||
err := o.Admission.ApplyTo(
|
||||
&config.Config,
|
||||
config.SharedInformerFactory,
|
||||
config.ClientConfig,
|
||||
scheme,
|
||||
pluginInitializers...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if initializers, err := o.ExtraAdmissionInitializers(); err != nil {
|
||||
return err
|
||||
} else if err := o.Admission.ApplyTo(&config.Config, config.SharedInformerFactory, config.ClientConfig, scheme, initializers...); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -104,18 +104,15 @@ func (o *WardleServerOptions) Config() (*apiserver.Config, error) {
|
||||
|
||||
serverConfig := genericapiserver.NewRecommendedConfig(apiserver.Codecs)
|
||||
|
||||
admissionInitializerInitFunc := func() (admission.PluginInitializer, error) {
|
||||
o.RecommendedOptions.ExtraAdmissionInitializers = func() ([]admission.PluginInitializer, error) {
|
||||
client, err := clientset.NewForConfig(serverConfig.LoopbackClientConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
informerFactory := informers.NewSharedInformerFactory(client, serverConfig.LoopbackClientConfig.Timeout)
|
||||
o.SharedInformerFactory = informerFactory
|
||||
return wardleinitializer.New(informerFactory), nil
|
||||
return []admission.PluginInitializer{wardleinitializer.New(informerFactory)}, nil
|
||||
}
|
||||
|
||||
serverConfig.ExtraAdmissionInitializersInitFunc = []genericapiserver.AdmissionInitializersInitFunc{admissionInitializerInitFunc}
|
||||
|
||||
if err := o.RecommendedOptions.ApplyTo(serverConfig, apiserver.Scheme); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user