allow apiservers to override the list of decorators

pull/564/head
David Eads 2019-02-18 14:24:14 -05:00
parent 9891824352
commit ad740bbba5
2 changed files with 6 additions and 2 deletions

View File

@ -138,6 +138,7 @@ func TestAddFlags(t *testing.T) {
EnablePlugins: []string{"AlwaysDeny"}, EnablePlugins: []string{"AlwaysDeny"},
ConfigFile: "/admission-control-config", ConfigFile: "/admission-control-config",
Plugins: s.Admission.GenericAdmission.Plugins, Plugins: s.Admission.GenericAdmission.Plugins,
Decorators: s.Admission.GenericAdmission.Decorators,
}, },
}, },
Etcd: &apiserveroptions.EtcdOptions{ Etcd: &apiserveroptions.EtcdOptions{

View File

@ -61,6 +61,8 @@ type AdmissionOptions struct {
ConfigFile string ConfigFile string
// Plugins contains all registered plugins. // Plugins contains all registered plugins.
Plugins *admission.Plugins Plugins *admission.Plugins
// Decorators is a list of admission decorator to wrap around the admission plugins
Decorators admission.Decorators
} }
// NewAdmissionOptions creates a new instance of AdmissionOptions // NewAdmissionOptions creates a new instance of AdmissionOptions
@ -74,6 +76,7 @@ type AdmissionOptions struct {
func NewAdmissionOptions() *AdmissionOptions { func NewAdmissionOptions() *AdmissionOptions {
options := &AdmissionOptions{ options := &AdmissionOptions{
Plugins: admission.NewPlugins(), Plugins: admission.NewPlugins(),
Decorators: admission.Decorators{admission.DecoratorFunc(admissionmetrics.WithControllerMetrics)},
// This list is mix of mutating admission plugins and validating // This list is mix of mutating admission plugins and validating
// admission plugins. The apiserver always runs the validating ones // admission plugins. The apiserver always runs the validating ones
// after all the mutating ones, so their relative order in this list // after all the mutating ones, so their relative order in this list
@ -147,7 +150,7 @@ func (a *AdmissionOptions) ApplyTo(
pluginInitializers = append(pluginInitializers, genericInitializer) pluginInitializers = append(pluginInitializers, genericInitializer)
initializersChain = append(initializersChain, pluginInitializers...) initializersChain = append(initializersChain, pluginInitializers...)
admissionChain, err := a.Plugins.NewFromPlugins(pluginNames, pluginsConfigProvider, initializersChain, admission.DecoratorFunc(admissionmetrics.WithControllerMetrics)) admissionChain, err := a.Plugins.NewFromPlugins(pluginNames, pluginsConfigProvider, initializersChain, a.Decorators)
if err != nil { if err != nil {
return err return err
} }