mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-09 20:17:41 +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
|
PublicAddress net.IP
|
||||||
}
|
}
|
||||||
|
|
||||||
type AdmissionInitializersInitFunc func() (admission.PluginInitializer, error)
|
|
||||||
|
|
||||||
type RecommendedConfig struct {
|
type RecommendedConfig struct {
|
||||||
Config
|
Config
|
||||||
|
|
||||||
ExtraAdmissionInitializersInitFunc []AdmissionInitializersInitFunc
|
|
||||||
|
|
||||||
// SharedInformerFactory provides shared informers for Kubernetes resources. This value is set by
|
// 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
|
// 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.
|
// 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 {
|
func NewRecommendedConfig(codecs serializer.CodecFactory) *RecommendedConfig {
|
||||||
return &RecommendedConfig{
|
return &RecommendedConfig{
|
||||||
Config: *NewConfig(codecs),
|
Config: *NewConfig(codecs),
|
||||||
ExtraAdmissionInitializersInitFunc: make([]AdmissionInitializersInitFunc, 0),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -104,6 +104,16 @@ func (a *AdmissionOptions) ApplyTo(
|
|||||||
return nil
|
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
|
pluginNames := a.PluginNames
|
||||||
if len(a.PluginNames) == 0 {
|
if len(a.PluginNames) == 0 {
|
||||||
pluginNames = a.enabledPluginNames()
|
pluginNames = a.enabledPluginNames()
|
||||||
|
@ -17,8 +17,6 @@ limitations under the License.
|
|||||||
package options
|
package options
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
@ -38,19 +36,24 @@ type RecommendedOptions struct {
|
|||||||
Audit *AuditOptions
|
Audit *AuditOptions
|
||||||
Features *FeatureOptions
|
Features *FeatureOptions
|
||||||
CoreAPI *CoreAPIOptions
|
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 {
|
func NewRecommendedOptions(prefix string, codec runtime.Codec) *RecommendedOptions {
|
||||||
return &RecommendedOptions{
|
return &RecommendedOptions{
|
||||||
Etcd: NewEtcdOptions(storagebackend.NewDefaultConfig(prefix, codec)),
|
Etcd: NewEtcdOptions(storagebackend.NewDefaultConfig(prefix, codec)),
|
||||||
SecureServing: NewSecureServingOptions(),
|
SecureServing: NewSecureServingOptions(),
|
||||||
Authentication: NewDelegatingAuthenticationOptions(),
|
Authentication: NewDelegatingAuthenticationOptions(),
|
||||||
Authorization: NewDelegatingAuthorizationOptions(),
|
Authorization: NewDelegatingAuthorizationOptions(),
|
||||||
Audit: NewAuditOptions(),
|
Audit: NewAuditOptions(),
|
||||||
Features: NewFeatureOptions(),
|
Features: NewFeatureOptions(),
|
||||||
CoreAPI: NewCoreAPIOptions(),
|
CoreAPI: NewCoreAPIOptions(),
|
||||||
Admission: NewAdmissionOptions(),
|
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 {
|
if err := o.CoreAPI.ApplyTo(config); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if o.Admission != nil {
|
if initializers, err := o.ExtraAdmissionInitializers(); err != nil {
|
||||||
// Admission depends on CoreAPI to set SharedInformerFactory and ClientConfig.
|
return err
|
||||||
if o.CoreAPI == nil {
|
} else if err := o.Admission.ApplyTo(&config.Config, config.SharedInformerFactory, config.ClientConfig, scheme, initializers...); err != nil {
|
||||||
return fmt.Errorf("admission depends on CoreAPI, so it must be set")
|
return err
|
||||||
}
|
|
||||||
// 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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -104,18 +104,15 @@ func (o *WardleServerOptions) Config() (*apiserver.Config, error) {
|
|||||||
|
|
||||||
serverConfig := genericapiserver.NewRecommendedConfig(apiserver.Codecs)
|
serverConfig := genericapiserver.NewRecommendedConfig(apiserver.Codecs)
|
||||||
|
|
||||||
admissionInitializerInitFunc := func() (admission.PluginInitializer, error) {
|
o.RecommendedOptions.ExtraAdmissionInitializers = func() ([]admission.PluginInitializer, error) {
|
||||||
client, err := clientset.NewForConfig(serverConfig.LoopbackClientConfig)
|
client, err := clientset.NewForConfig(serverConfig.LoopbackClientConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
informerFactory := informers.NewSharedInformerFactory(client, serverConfig.LoopbackClientConfig.Timeout)
|
informerFactory := informers.NewSharedInformerFactory(client, serverConfig.LoopbackClientConfig.Timeout)
|
||||||
o.SharedInformerFactory = informerFactory
|
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 {
|
if err := o.RecommendedOptions.ApplyTo(serverConfig, apiserver.Scheme); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user