From be7194e16622b161a6bad09f199801c2b59c7721 Mon Sep 17 00:00:00 2001 From: "zuoxiu.jm" <291271447@qq.com> Date: Thu, 27 Sep 2018 12:11:02 +0800 Subject: [PATCH] namespace autoprovision externalization --- .../admission/namespace/autoprovision/BUILD | 18 +++++++------ .../namespace/autoprovision/admission.go | 27 ++++++++++--------- .../namespace/autoprovision/admission_test.go | 15 ++++++----- 3 files changed, 32 insertions(+), 28 deletions(-) diff --git a/plugin/pkg/admission/namespace/autoprovision/BUILD b/plugin/pkg/admission/namespace/autoprovision/BUILD index 523d2ad335b..bf14b7465ce 100644 --- a/plugin/pkg/admission/namespace/autoprovision/BUILD +++ b/plugin/pkg/admission/namespace/autoprovision/BUILD @@ -12,13 +12,14 @@ go_library( importpath = "k8s.io/kubernetes/plugin/pkg/admission/namespace/autoprovision", deps = [ "//pkg/apis/core:go_default_library", - "//pkg/client/clientset_generated/internalclientset:go_default_library", - "//pkg/client/informers/informers_generated/internalversion:go_default_library", - "//pkg/client/listers/core/internalversion:go_default_library", - "//pkg/kubeapiserver/admission:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/admission/initializer:go_default_library", + "//staging/src/k8s.io/client-go/informers:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", ], ) @@ -28,15 +29,16 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", - "//pkg/client/clientset_generated/internalclientset:go_default_library", - "//pkg/client/clientset_generated/internalclientset/fake:go_default_library", - "//pkg/client/informers/informers_generated/internalversion:go_default_library", - "//pkg/kubeapiserver/admission:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/admission/initializer:go_default_library", + "//staging/src/k8s.io/client-go/informers:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", "//staging/src/k8s.io/client-go/testing:go_default_library", ], ) diff --git a/plugin/pkg/admission/namespace/autoprovision/admission.go b/plugin/pkg/admission/namespace/autoprovision/admission.go index 9e84a6cf2d4..8eb64b668b6 100644 --- a/plugin/pkg/admission/namespace/autoprovision/admission.go +++ b/plugin/pkg/admission/namespace/autoprovision/admission.go @@ -20,14 +20,15 @@ import ( "fmt" "io" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apiserver/pkg/admission" + genericadmissioninitializer "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/client-go/informers" + "k8s.io/client-go/kubernetes" + corev1listers "k8s.io/client-go/listers/core/v1" api "k8s.io/kubernetes/pkg/apis/core" - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion" - corelisters "k8s.io/kubernetes/pkg/client/listers/core/internalversion" - kubeapiserveradmission "k8s.io/kubernetes/pkg/kubeapiserver/admission" ) // PluginName indicates name of admission plugin. @@ -45,13 +46,13 @@ func Register(plugins *admission.Plugins) { // It is useful in deployments that do not want to restrict creation of a namespace prior to its usage. type Provision struct { *admission.Handler - client internalclientset.Interface - namespaceLister corelisters.NamespaceLister + client kubernetes.Interface + namespaceLister corev1listers.NamespaceLister } var _ admission.MutationInterface = &Provision{} -var _ = kubeapiserveradmission.WantsInternalKubeInformerFactory(&Provision{}) -var _ = kubeapiserveradmission.WantsInternalKubeClientSet(&Provision{}) +var _ = genericadmissioninitializer.WantsExternalKubeInformerFactory(&Provision{}) +var _ = genericadmissioninitializer.WantsExternalKubeClientSet(&Provision{}) // Admit makes an admission decision based on the request attributes func (p *Provision) Admit(a admission.Attributes) error { @@ -80,12 +81,12 @@ func (p *Provision) Admit(a admission.Attributes) error { return admission.NewForbidden(a, err) } - namespace := &api.Namespace{ + namespace := &corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ Name: a.GetNamespace(), Namespace: "", }, - Status: api.NamespaceStatus{}, + Status: corev1.NamespaceStatus{}, } _, err = p.client.Core().Namespaces().Create(namespace) @@ -104,13 +105,13 @@ func NewProvision() *Provision { } // SetInternalKubeClientSet implements the WantsInternalKubeClientSet interface. -func (p *Provision) SetInternalKubeClientSet(client internalclientset.Interface) { +func (p *Provision) SetExternalKubeClientSet(client kubernetes.Interface) { p.client = client } // SetInternalKubeInformerFactory implements the WantsInternalKubeInformerFactory interface. -func (p *Provision) SetInternalKubeInformerFactory(f informers.SharedInformerFactory) { - namespaceInformer := f.Core().InternalVersion().Namespaces() +func (p *Provision) SetExternalKubeInformerFactory(f informers.SharedInformerFactory) { + namespaceInformer := f.Core().V1().Namespaces() p.namespaceLister = namespaceInformer.Lister() p.SetReadyFunc(namespaceInformer.Informer().HasSynced) } diff --git a/plugin/pkg/admission/namespace/autoprovision/admission_test.go b/plugin/pkg/admission/namespace/autoprovision/admission_test.go index 748ef9f382c..8e5e0dca5f4 100644 --- a/plugin/pkg/admission/namespace/autoprovision/admission_test.go +++ b/plugin/pkg/admission/namespace/autoprovision/admission_test.go @@ -21,24 +21,25 @@ import ( "testing" "time" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apiserver/pkg/admission" + genericadmissioninitializer "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/client-go/informers" + clientset "k8s.io/client-go/kubernetes" + "k8s.io/client-go/kubernetes/fake" core "k8s.io/client-go/testing" api "k8s.io/kubernetes/pkg/apis/core" - clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" - informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion" - kubeadmission "k8s.io/kubernetes/pkg/kubeapiserver/admission" ) // newHandlerForTest returns the admission controller configured for testing. func newHandlerForTest(c clientset.Interface) (admission.MutationInterface, informers.SharedInformerFactory, error) { f := informers.NewSharedInformerFactory(c, 5*time.Minute) handler := NewProvision() - pluginInitializer := kubeadmission.NewPluginInitializer(c, f, nil, nil, nil) + pluginInitializer := genericadmissioninitializer.New(c, f, nil, nil) pluginInitializer.Initialize(handler) err := admission.ValidateInitialization(handler) return handler, f, err @@ -48,13 +49,13 @@ func newHandlerForTest(c clientset.Interface) (admission.MutationInterface, info func newMockClientForTest(namespaces []string) *fake.Clientset { mockClient := &fake.Clientset{} mockClient.AddReactor("list", "namespaces", func(action core.Action) (bool, runtime.Object, error) { - namespaceList := &api.NamespaceList{ + namespaceList := &corev1.NamespaceList{ ListMeta: metav1.ListMeta{ ResourceVersion: fmt.Sprintf("%d", len(namespaces)), }, } for i, ns := range namespaces { - namespaceList.Items = append(namespaceList.Items, api.Namespace{ + namespaceList.Items = append(namespaceList.Items, corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ Name: ns, ResourceVersion: fmt.Sprintf("%d", i),