From ba40a528e1c0a4a631c97e456ad075bfbb254732 Mon Sep 17 00:00:00 2001 From: Dominika Hodovska Date: Wed, 8 Jun 2016 15:20:37 +0200 Subject: [PATCH] PluginInitializer as a new part of NewFromPlugins method --- cmd/kube-apiserver/app/server.go | 5 ++++- federation/cmd/federation-apiserver/app/server.go | 5 ++++- pkg/admission/chain.go | 9 +++++++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index 7ea561f4a35..27683ea241c 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -250,7 +250,10 @@ func Run(s *options.APIServer) error { pluginInit := admission.NewPluginInitializer() pluginInit.SetNamespaceInformer(namespaceInformer) - admissionController := admission.NewFromPlugins(client, admissionControlPluginNames, s.AdmissionControlConfigFile) + admissionController, err := admission.NewFromPlugins(client, admissionControlPluginNames, s.AdmissionControlConfigFile, pluginInit) + if err != nil { + glog.Errorf("Failed to initialize plugins: %v", err) + } genericConfig := genericapiserver.NewConfig(s.ServerRunOptions) // TODO: Move the following to generic api server as well. diff --git a/federation/cmd/federation-apiserver/app/server.go b/federation/cmd/federation-apiserver/app/server.go index 43081c456fe..ce457d641b5 100644 --- a/federation/cmd/federation-apiserver/app/server.go +++ b/federation/cmd/federation-apiserver/app/server.go @@ -125,7 +125,10 @@ func Run(s *genericoptions.ServerRunOptions) error { pluginInit := admission.NewPluginInitializer() pluginInit.SetNamespaceInformer(namespaceInformer) - admissionController := admission.NewFromPlugins(client, admissionControlPluginNames, s.AdmissionControlConfigFile) + admissionController, err := admission.NewFromPlugins(client, admissionControlPluginNames, s.AdmissionControlConfigFile, pluginInit) + if err != nil { + glog.Errorf("Failed to initialize plugins: %v", err) + } genericConfig := genericapiserver.NewConfig(s) // TODO: Move the following to generic api server as well. genericConfig.StorageFactory = storageFactory diff --git a/pkg/admission/chain.go b/pkg/admission/chain.go index 41d40b67292..a43bf8bb5b6 100644 --- a/pkg/admission/chain.go +++ b/pkg/admission/chain.go @@ -23,7 +23,7 @@ type chainAdmissionHandler []Interface // NewFromPlugins returns an admission.Interface that will enforce admission control decisions of all // the given plugins. -func NewFromPlugins(client clientset.Interface, pluginNames []string, configFilePath string) Interface { +func NewFromPlugins(client clientset.Interface, pluginNames []string, configFilePath string, plugInit PluginInitializer) (Interface, error) { plugins := []Interface{} for _, pluginName := range pluginNames { plugin := InitPlugin(pluginName, client, configFilePath) @@ -31,7 +31,12 @@ func NewFromPlugins(client clientset.Interface, pluginNames []string, configFile plugins = append(plugins, plugin) } } - return chainAdmissionHandler(plugins) + plugInit.Initialize(plugins) + // ensure that plugins have been properly initialized + if err := Validate(plugins); err != nil { + return nil, err + } + return chainAdmissionHandler(plugins), nil } // NewChainHandler creates a new chain handler from an array of handlers. Used for testing.