From 760f9d1c0b55d1fb2484811dd313bb3dd5550f81 Mon Sep 17 00:00:00 2001 From: p0lyn0mial Date: Wed, 9 Aug 2017 16:35:39 +0200 Subject: [PATCH] wires ban flunder admission plugin to the sample server --- .../admission/plugin/banflunder/admission.go | 12 +++++++- .../sample-apiserver/pkg/apiserver/BUILD | 1 + .../pkg/apiserver/apiserver.go | 3 ++ .../sample-apiserver/pkg/cmd/server/BUILD | 4 +++ .../sample-apiserver/pkg/cmd/server/start.go | 28 +++++++++++++++++-- 5 files changed, 45 insertions(+), 3 deletions(-) diff --git a/staging/src/k8s.io/sample-apiserver/pkg/admission/plugin/banflunder/admission.go b/staging/src/k8s.io/sample-apiserver/pkg/admission/plugin/banflunder/admission.go index 8e021f120f2..8e7d51acea8 100644 --- a/staging/src/k8s.io/sample-apiserver/pkg/admission/plugin/banflunder/admission.go +++ b/staging/src/k8s.io/sample-apiserver/pkg/admission/plugin/banflunder/admission.go @@ -18,6 +18,7 @@ package banflunder import ( "fmt" + "io" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/labels" @@ -28,6 +29,13 @@ import ( listers "k8s.io/sample-apiserver/pkg/client/listers_generated/wardle/internalversion" ) +// Register registers a plugin +func Register(plugins *admission.Plugins) { + plugins.Register("BanFlunder", func(config io.Reader) (admission.Interface, error) { + return New() + }) +} + type disallowFlunder struct { *admission.Handler lister listers.FischerLister @@ -80,5 +88,7 @@ func (d *disallowFlunder) Validate() error { // New creates a new ban flunder admission plugin func New() (admission.Interface, error) { - return &disallowFlunder{}, nil + return &disallowFlunder{ + Handler: admission.NewHandler(admission.Create), + }, nil } diff --git a/staging/src/k8s.io/sample-apiserver/pkg/apiserver/BUILD b/staging/src/k8s.io/sample-apiserver/pkg/apiserver/BUILD index 03838d80f93..1f06d83ce04 100644 --- a/staging/src/k8s.io/sample-apiserver/pkg/apiserver/BUILD +++ b/staging/src/k8s.io/sample-apiserver/pkg/apiserver/BUILD @@ -33,6 +33,7 @@ go_library( "//vendor/k8s.io/sample-apiserver/pkg/apis/wardle:go_default_library", "//vendor/k8s.io/sample-apiserver/pkg/apis/wardle/install:go_default_library", "//vendor/k8s.io/sample-apiserver/pkg/apis/wardle/v1alpha1:go_default_library", + "//vendor/k8s.io/sample-apiserver/pkg/client/informers_generated/internalversion:go_default_library", "//vendor/k8s.io/sample-apiserver/pkg/registry:go_default_library", "//vendor/k8s.io/sample-apiserver/pkg/registry/wardle/fischer:go_default_library", "//vendor/k8s.io/sample-apiserver/pkg/registry/wardle/flunder:go_default_library", diff --git a/staging/src/k8s.io/sample-apiserver/pkg/apiserver/apiserver.go b/staging/src/k8s.io/sample-apiserver/pkg/apiserver/apiserver.go index 41e1d94aba5..33ebf143c6a 100644 --- a/staging/src/k8s.io/sample-apiserver/pkg/apiserver/apiserver.go +++ b/staging/src/k8s.io/sample-apiserver/pkg/apiserver/apiserver.go @@ -30,6 +30,7 @@ import ( "k8s.io/sample-apiserver/pkg/apis/wardle" "k8s.io/sample-apiserver/pkg/apis/wardle/install" "k8s.io/sample-apiserver/pkg/apis/wardle/v1alpha1" + informers "k8s.io/sample-apiserver/pkg/client/informers_generated/internalversion" wardleregistry "k8s.io/sample-apiserver/pkg/registry" fischerstorage "k8s.io/sample-apiserver/pkg/registry/wardle/fischer" flunderstorage "k8s.io/sample-apiserver/pkg/registry/wardle/flunder" @@ -62,6 +63,8 @@ func init() { type Config struct { GenericConfig *genericapiserver.Config + // SharedInformerFactory provides shared informers for resources + SharedInformerFactory informers.SharedInformerFactory } // WardleServer contains state for a Kubernetes cluster master/api server. diff --git a/staging/src/k8s.io/sample-apiserver/pkg/cmd/server/BUILD b/staging/src/k8s.io/sample-apiserver/pkg/cmd/server/BUILD index ae62e2206ea..4aa1847420d 100644 --- a/staging/src/k8s.io/sample-apiserver/pkg/cmd/server/BUILD +++ b/staging/src/k8s.io/sample-apiserver/pkg/cmd/server/BUILD @@ -15,8 +15,12 @@ go_library( "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/apiserver/pkg/server:go_default_library", "//vendor/k8s.io/apiserver/pkg/server/options:go_default_library", + "//vendor/k8s.io/sample-apiserver/pkg/admission/plugin/banflunder:go_default_library", + "//vendor/k8s.io/sample-apiserver/pkg/admission/wardleinitializer:go_default_library", "//vendor/k8s.io/sample-apiserver/pkg/apis/wardle/v1alpha1:go_default_library", "//vendor/k8s.io/sample-apiserver/pkg/apiserver:go_default_library", + "//vendor/k8s.io/sample-apiserver/pkg/client/clientset_generated/internalclientset:go_default_library", + "//vendor/k8s.io/sample-apiserver/pkg/client/informers_generated/internalversion:go_default_library", ], ) diff --git a/staging/src/k8s.io/sample-apiserver/pkg/cmd/server/start.go b/staging/src/k8s.io/sample-apiserver/pkg/cmd/server/start.go index 3ed49adb52c..3e4075c271f 100644 --- a/staging/src/k8s.io/sample-apiserver/pkg/cmd/server/start.go +++ b/staging/src/k8s.io/sample-apiserver/pkg/cmd/server/start.go @@ -25,8 +25,12 @@ import ( genericapiserver "k8s.io/apiserver/pkg/server" genericoptions "k8s.io/apiserver/pkg/server/options" + "k8s.io/sample-apiserver/pkg/admission/plugin/banflunder" + "k8s.io/sample-apiserver/pkg/admission/wardleinitializer" "k8s.io/sample-apiserver/pkg/apis/wardle/v1alpha1" "k8s.io/sample-apiserver/pkg/apiserver" + clientset "k8s.io/sample-apiserver/pkg/client/clientset_generated/internalclientset" + informers "k8s.io/sample-apiserver/pkg/client/informers_generated/internalversion" ) const defaultEtcdPathPrefix = "/registry/wardle.kubernetes.io" @@ -88,6 +92,9 @@ func (o *WardleServerOptions) Complete() error { } func (o WardleServerOptions) Config() (*apiserver.Config, error) { + // register admission plugins + banflunder.Register(o.Admission.Plugins) + // TODO have a "real" external address if err := o.RecommendedOptions.SecureServing.MaybeDefaultWithSelfSignedCerts("localhost", nil, []net.IP{net.ParseIP("127.0.0.1")}); err != nil { return nil, fmt.Errorf("error creating self-signed certificates: %v", err) @@ -98,12 +105,23 @@ func (o WardleServerOptions) Config() (*apiserver.Config, error) { return nil, err } - if err := o.Admission.ApplyTo(serverConfig); err != nil { + client, err := clientset.NewForConfig(serverConfig.LoopbackClientConfig) + if err != nil { + return nil, err + } + informerFactory := informers.NewSharedInformerFactory(client, serverConfig.LoopbackClientConfig.Timeout) + admissionInitializer, err := wardleinitializer.New(informerFactory) + if err != nil { + return nil, err + } + + if err := o.Admission.ApplyTo(serverConfig, admissionInitializer); err != nil { return nil, err } config := &apiserver.Config{ - GenericConfig: serverConfig, + GenericConfig: serverConfig, + SharedInformerFactory: informerFactory, } return config, nil } @@ -118,5 +136,11 @@ func (o WardleServerOptions) RunWardleServer(stopCh <-chan struct{}) error { if err != nil { return err } + + server.GenericAPIServer.AddPostStartHook("start-sample-server-informers", func(context genericapiserver.PostStartHookContext) error { + config.SharedInformerFactory.Start(context.StopCh) + return nil + }) + return server.GenericAPIServer.PrepareRun().Run(stopCh) }