wires ban flunder admission plugin to the sample server

This commit is contained in:
p0lyn0mial 2017-08-09 16:35:39 +02:00
parent c9d142d73d
commit 760f9d1c0b
5 changed files with 45 additions and 3 deletions

View File

@ -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
}

View File

@ -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",

View File

@ -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.

View File

@ -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",
],
)

View File

@ -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)
}