diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index f7879f29a0..025abc07d3 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -565,7 +565,6 @@ func buildGenericConfig( pluginInitializers, admissionPostStartHook, err = BuildAdmissionPluginInitializers( s, client, - sharedInformers, serviceResolver, webhookAuthResolverWrapper, ) @@ -591,7 +590,6 @@ func buildGenericConfig( func BuildAdmissionPluginInitializers( s *options.ServerRunOptions, client internalclientset.Interface, - sharedInformers informers.SharedInformerFactory, serviceResolver aggregatorapiserver.ServiceResolver, webhookAuthWrapper webhook.AuthenticationInfoResolverWrapper, ) ([]admission.PluginInitializer, genericapiserver.PostStartHookFunc, error) { @@ -618,7 +616,7 @@ func BuildAdmissionPluginInitializers( quotaConfiguration := quotainstall.NewQuotaConfigurationForAdmission() - kubePluginInitializer := kubeapiserveradmission.NewPluginInitializer(client, sharedInformers, cloudConfig, discoveryRESTMapper, quotaConfiguration) + kubePluginInitializer := kubeapiserveradmission.NewPluginInitializer(cloudConfig, discoveryRESTMapper, quotaConfiguration) webhookPluginInitializer := webhookinit.NewPluginInitializer(webhookAuthWrapper, serviceResolver) return []admission.PluginInitializer{webhookPluginInitializer, kubePluginInitializer}, admissionPostStartHook, nil diff --git a/pkg/kubeapiserver/admission/BUILD b/pkg/kubeapiserver/admission/BUILD index bfbd57058c..13ab3a1489 100644 --- a/pkg/kubeapiserver/admission/BUILD +++ b/pkg/kubeapiserver/admission/BUILD @@ -18,8 +18,6 @@ go_library( srcs = ["initializer.go"], importpath = "k8s.io/kubernetes/pkg/kubeapiserver/admission", deps = [ - "//pkg/client/clientset_generated/internalclientset:go_default_library", - "//pkg/client/informers/informers_generated/internalversion:go_default_library", "//pkg/quota/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", diff --git a/pkg/kubeapiserver/admission/initializer.go b/pkg/kubeapiserver/admission/initializer.go index d5751c4b61..731631e824 100644 --- a/pkg/kubeapiserver/admission/initializer.go +++ b/pkg/kubeapiserver/admission/initializer.go @@ -21,25 +21,11 @@ import ( "k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/authorization/authorizer" "k8s.io/apiserver/pkg/util/webhook" - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion" quota "k8s.io/kubernetes/pkg/quota/v1" ) // TODO add a `WantsToRun` which takes a stopCh. Might make it generic. -// WantsInternalKubeClientSet defines a function which sets ClientSet for admission plugins that need it -type WantsInternalKubeClientSet interface { - SetInternalKubeClientSet(internalclientset.Interface) - admission.InitializationValidator -} - -// WantsInternalKubeInformerFactory defines a function which sets InformerFactory for admission plugins that need it -type WantsInternalKubeInformerFactory interface { - SetInternalKubeInformerFactory(informers.SharedInformerFactory) - admission.InitializationValidator -} - // WantsCloudConfig defines a function which sets CloudConfig for admission plugins that need it. type WantsCloudConfig interface { SetCloudConfig([]byte) @@ -58,8 +44,6 @@ type WantsQuotaConfiguration interface { // PluginInitializer is used for initialization of the Kubernetes specific admission plugins. type PluginInitializer struct { - internalClient internalclientset.Interface - informers informers.SharedInformerFactory authorizer authorizer.Authorizer cloudConfig []byte restMapper meta.RESTMapper @@ -74,15 +58,11 @@ var _ admission.PluginInitializer = &PluginInitializer{} // TODO: switch these parameters to use the builder pattern or just make them // all public, this construction method is pointless boilerplate. func NewPluginInitializer( - internalClient internalclientset.Interface, - sharedInformers informers.SharedInformerFactory, cloudConfig []byte, restMapper meta.RESTMapper, quotaConfiguration quota.Configuration, ) *PluginInitializer { return &PluginInitializer{ - internalClient: internalClient, - informers: sharedInformers, cloudConfig: cloudConfig, restMapper: restMapper, quotaConfiguration: quotaConfiguration, @@ -92,14 +72,6 @@ func NewPluginInitializer( // Initialize checks the initialization interfaces implemented by each plugin // and provide the appropriate initialization data func (i *PluginInitializer) Initialize(plugin admission.Interface) { - if wants, ok := plugin.(WantsInternalKubeClientSet); ok { - wants.SetInternalKubeClientSet(i.internalClient) - } - - if wants, ok := plugin.(WantsInternalKubeInformerFactory); ok { - wants.SetInternalKubeInformerFactory(i.informers) - } - if wants, ok := plugin.(WantsCloudConfig); ok { wants.SetCloudConfig(i.cloudConfig) } diff --git a/pkg/kubeapiserver/admission/initializer_test.go b/pkg/kubeapiserver/admission/initializer_test.go index b88021d8a6..053623fb37 100644 --- a/pkg/kubeapiserver/admission/initializer_test.go +++ b/pkg/kubeapiserver/admission/initializer_test.go @@ -39,7 +39,7 @@ func (self *WantsCloudConfigAdmissionPlugin) SetCloudConfig(cloudConfig []byte) func TestCloudConfigAdmissionPlugin(t *testing.T) { cloudConfig := []byte("cloud-configuration") - initializer := NewPluginInitializer(nil, nil, cloudConfig, nil, nil) + initializer := NewPluginInitializer(cloudConfig, nil, nil) wantsCloudConfigAdmission := &WantsCloudConfigAdmissionPlugin{} initializer.Initialize(wantsCloudConfigAdmission) diff --git a/plugin/pkg/admission/gc/BUILD b/plugin/pkg/admission/gc/BUILD index 2f84e0cd0c..2d71285ed0 100644 --- a/plugin/pkg/admission/gc/BUILD +++ b/plugin/pkg/admission/gc/BUILD @@ -29,6 +29,7 @@ go_test( deps = [ "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/core:go_default_library", + "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/kubeapiserver/admission:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta/testrestmapper:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/plugin/pkg/admission/gc/gc_admission_test.go b/plugin/pkg/admission/gc/gc_admission_test.go index 753d4dc3c8..8241e0d528 100644 --- a/plugin/pkg/admission/gc/gc_admission_test.go +++ b/plugin/pkg/admission/gc/gc_admission_test.go @@ -31,6 +31,10 @@ import ( "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" kubeadmission "k8s.io/kubernetes/pkg/kubeapiserver/admission" + + // Manually initialize legacy scheme to make test rest mapper work with built-in resources. + // See issue #70192 for more details + _ "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" ) type fakeAuthorizer struct{} @@ -88,7 +92,7 @@ func newGCPermissionsEnforcement() (*gcPermissionsEnforcement, error) { } genericPluginInitializer := initializer.New(nil, nil, fakeAuthorizer{}, nil) - pluginInitializer := kubeadmission.NewPluginInitializer(nil, nil, nil, testrestmapper.TestOnlyStaticRESTMapper(legacyscheme.Scheme), nil) + pluginInitializer := kubeadmission.NewPluginInitializer(nil, testrestmapper.TestOnlyStaticRESTMapper(legacyscheme.Scheme), nil) initializersChain := admission.PluginInitializers{} initializersChain = append(initializersChain, genericPluginInitializer) initializersChain = append(initializersChain, pluginInitializer) diff --git a/plugin/pkg/admission/podnodeselector/BUILD b/plugin/pkg/admission/podnodeselector/BUILD index 46fc503480..c7ef764295 100644 --- a/plugin/pkg/admission/podnodeselector/BUILD +++ b/plugin/pkg/admission/podnodeselector/BUILD @@ -12,16 +12,17 @@ go_library( importpath = "k8s.io/kubernetes/plugin/pkg/admission/podnodeselector", 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", "//pkg/kubeapiserver/admission/util: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/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/yaml: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", "//vendor/github.com/golang/glog:go_default_library", ], ) @@ -32,13 +33,14 @@ 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/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels: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", ], ) diff --git a/plugin/pkg/admission/podnodeselector/admission.go b/plugin/pkg/admission/podnodeselector/admission.go index 3e06fec3a5..8dc1daa66c 100644 --- a/plugin/pkg/admission/podnodeselector/admission.go +++ b/plugin/pkg/admission/podnodeselector/admission.go @@ -23,16 +23,17 @@ import ( "github.com/golang/glog" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/util/yaml" "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" "k8s.io/kubernetes/pkg/kubeapiserver/admission/util" ) @@ -55,16 +56,14 @@ func Register(plugins *admission.Plugins) { // podNodeSelector is an implementation of admission.Interface. type podNodeSelector struct { *admission.Handler - client internalclientset.Interface - namespaceLister corelisters.NamespaceLister + client kubernetes.Interface + namespaceLister corev1listers.NamespaceLister // global default node selector and namespace whitelists in a cluster. clusterNodeSelectors map[string]string } -var _ admission.MutationInterface = &podNodeSelector{} -var _ admission.ValidationInterface = &podNodeSelector{} -var _ = kubeapiserveradmission.WantsInternalKubeClientSet(&podNodeSelector{}) -var _ = kubeapiserveradmission.WantsInternalKubeInformerFactory(&podNodeSelector{}) +var _ = genericadmissioninitializer.WantsExternalKubeClientSet(&podNodeSelector{}) +var _ = genericadmissioninitializer.WantsExternalKubeInformerFactory(&podNodeSelector{}) type pluginConfig struct { PodNodeSelectorPluginConfig map[string]string @@ -205,12 +204,12 @@ func NewPodNodeSelector(clusterNodeSelectors map[string]string) *podNodeSelector } } -func (a *podNodeSelector) SetInternalKubeClientSet(client internalclientset.Interface) { +func (a *podNodeSelector) SetExternalKubeClientSet(client kubernetes.Interface) { a.client = client } -func (p *podNodeSelector) SetInternalKubeInformerFactory(f informers.SharedInformerFactory) { - namespaceInformer := f.Core().InternalVersion().Namespaces() +func (p *podNodeSelector) SetExternalKubeInformerFactory(f informers.SharedInformerFactory) { + namespaceInformer := f.Core().V1().Namespaces() p.namespaceLister = namespaceInformer.Lister() p.SetReadyFunc(namespaceInformer.Informer().HasSynced) } @@ -225,7 +224,7 @@ func (p *podNodeSelector) ValidateInitialization() error { return nil } -func (p *podNodeSelector) defaultGetNamespace(name string) (*api.Namespace, error) { +func (p *podNodeSelector) defaultGetNamespace(name string) (*corev1.Namespace, error) { namespace, err := p.client.Core().Namespaces().Get(name, metav1.GetOptions{}) if err != nil { return nil, fmt.Errorf("namespace %s does not exist", name) @@ -233,7 +232,7 @@ func (p *podNodeSelector) defaultGetNamespace(name string) (*api.Namespace, erro return namespace, nil } -func (p *podNodeSelector) getNodeSelectorMap(namespace *api.Namespace) (labels.Set, error) { +func (p *podNodeSelector) getNodeSelectorMap(namespace *corev1.Namespace) (labels.Set, error) { selector := labels.Set{} labelsMap := labels.Set{} var err error diff --git a/plugin/pkg/admission/podnodeselector/admission_test.go b/plugin/pkg/admission/podnodeselector/admission_test.go index c48c795ef7..ba1d3f16a5 100644 --- a/plugin/pkg/admission/podnodeselector/admission_test.go +++ b/plugin/pkg/admission/podnodeselector/admission_test.go @@ -20,26 +20,27 @@ import ( "testing" "time" + corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apiserver/pkg/admission" + genericadmissioninitializer "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/client-go/informers" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/kubernetes/fake" 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" ) // TestPodAdmission verifies various scenarios involving pod/namespace/global node label selectors func TestPodAdmission(t *testing.T) { - namespace := &api.Namespace{ + namespace := &corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ Name: "testNamespace", Namespace: "", }, } - mockClient := &fake.Clientset{} + mockClient := fake.NewSimpleClientset(namespace) handler, informerFactory, err := newHandlerForTest(mockClient) if err != nil { t.Errorf("unexpected error initializing handler: %v", err) @@ -159,7 +160,7 @@ func TestPodAdmission(t *testing.T) { for _, test := range tests { if !test.ignoreTestNamespaceNodeSelector { namespace.ObjectMeta.Annotations = map[string]string{"scheduler.alpha.kubernetes.io/node-selector": test.namespaceNodeSelector} - informerFactory.Core().InternalVersion().Namespaces().Informer().GetStore().Update(namespace) + informerFactory.Core().V1().Namespaces().Informer().GetStore().Update(namespace) } handler.clusterNodeSelectors = make(map[string]string) handler.clusterNodeSelectors["clusterDefaultNodeSelector"] = test.defaultNodeSelector @@ -216,7 +217,15 @@ func TestHandles(t *testing.T) { } func TestIgnoreUpdatingInitializedPod(t *testing.T) { - mockClient := &fake.Clientset{} + namespaceNodeSelector := "infra=true" + namespace := &corev1.Namespace{ + ObjectMeta: metav1.ObjectMeta{ + Name: "testNamespace", + Namespace: "", + Annotations: map[string]string{"scheduler.alpha.kubernetes.io/node-selector": namespaceNodeSelector}, + }, + } + mockClient := fake.NewSimpleClientset(namespace) handler, informerFactory, err := newHandlerForTest(mockClient) if err != nil { t.Errorf("unexpected error initializing handler: %v", err) @@ -229,15 +238,7 @@ func TestIgnoreUpdatingInitializedPod(t *testing.T) { Spec: api.PodSpec{NodeSelector: podNodeSelector}, } // this conflicts with podNodeSelector - namespaceNodeSelector := "infra=true" - namespace := &api.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "testNamespace", - Namespace: "", - Annotations: map[string]string{"scheduler.alpha.kubernetes.io/node-selector": namespaceNodeSelector}, - }, - } - err = informerFactory.Core().InternalVersion().Namespaces().Informer().GetStore().Update(namespace) + err = informerFactory.Core().V1().Namespaces().Informer().GetStore().Update(namespace) if err != nil { t.Fatal(err) } @@ -250,10 +251,10 @@ func TestIgnoreUpdatingInitializedPod(t *testing.T) { } // newHandlerForTest returns the admission controller configured for testing. -func newHandlerForTest(c clientset.Interface) (*podNodeSelector, informers.SharedInformerFactory, error) { +func newHandlerForTest(c kubernetes.Interface) (*podNodeSelector, informers.SharedInformerFactory, error) { f := informers.NewSharedInformerFactory(c, 5*time.Minute) handler := NewPodNodeSelector(nil) - 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 diff --git a/plugin/pkg/admission/podtolerationrestriction/BUILD b/plugin/pkg/admission/podtolerationrestriction/BUILD index 5ad9563065..d565216338 100644 --- a/plugin/pkg/admission/podtolerationrestriction/BUILD +++ b/plugin/pkg/admission/podtolerationrestriction/BUILD @@ -12,17 +12,18 @@ 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", "//pkg/scheduler/api:go_default_library", "//pkg/util/tolerations:go_default_library", "//plugin/pkg/admission/podtolerationrestriction/apis/podtolerationrestriction:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource: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/apiserver/pkg/util/feature: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", ], ) @@ -37,10 +38,6 @@ go_library( "//pkg/apis/core:go_default_library", "//pkg/apis/core/helper/qos:go_default_library", "//pkg/apis/core/v1: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", "//pkg/kubeapiserver/admission/util:go_default_library", "//pkg/scheduler/api:go_default_library", "//pkg/util/tolerations:go_default_library", @@ -54,6 +51,10 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer: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", "//vendor/github.com/golang/glog:go_default_library", ], ) diff --git a/plugin/pkg/admission/podtolerationrestriction/admission.go b/plugin/pkg/admission/podtolerationrestriction/admission.go index 75feaeb8da..6e75d8dc2b 100644 --- a/plugin/pkg/admission/podtolerationrestriction/admission.go +++ b/plugin/pkg/admission/podtolerationrestriction/admission.go @@ -24,16 +24,17 @@ import ( "github.com/golang/glog" "k8s.io/api/core/v1" + 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" qoshelper "k8s.io/kubernetes/pkg/apis/core/helper/qos" k8s_api_v1 "k8s.io/kubernetes/pkg/apis/core/v1" - clientset "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" "k8s.io/kubernetes/pkg/kubeapiserver/admission/util" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" "k8s.io/kubernetes/pkg/util/tolerations" @@ -61,12 +62,13 @@ const ( var _ admission.MutationInterface = &podTolerationsPlugin{} var _ admission.ValidationInterface = &podTolerationsPlugin{} -var _ = kubeapiserveradmission.WantsInternalKubeInformerFactory(&podTolerationsPlugin{}) +var _ = genericadmissioninitializer.WantsExternalKubeInformerFactory(&podTolerationsPlugin{}) +var _ = genericadmissioninitializer.WantsExternalKubeClientSet(&podTolerationsPlugin{}) type podTolerationsPlugin struct { *admission.Handler - client clientset.Interface - namespaceLister corelisters.NamespaceLister + client kubernetes.Interface + namespaceLister corev1listers.NamespaceLister pluginConfig *pluginapi.Configuration } @@ -200,12 +202,12 @@ func NewPodTolerationsPlugin(pluginConfig *pluginapi.Configuration) *podTolerati } } -func (a *podTolerationsPlugin) SetInternalKubeClientSet(client clientset.Interface) { +func (a *podTolerationsPlugin) SetExternalKubeClientSet(client kubernetes.Interface) { a.client = client } -func (p *podTolerationsPlugin) SetInternalKubeInformerFactory(f informers.SharedInformerFactory) { - namespaceInformer := f.Core().InternalVersion().Namespaces() +func (p *podTolerationsPlugin) SetExternalKubeInformerFactory(f informers.SharedInformerFactory) { + namespaceInformer := f.Core().V1().Namespaces() p.namespaceLister = namespaceInformer.Lister() p.SetReadyFunc(namespaceInformer.Informer().HasSynced) @@ -222,11 +224,11 @@ func (p *podTolerationsPlugin) ValidateInitialization() error { } // in exceptional cases, this can result in two live calls, but once the cache catches up, that will stop. -func (p *podTolerationsPlugin) getNamespace(nsName string) (*api.Namespace, error) { +func (p *podTolerationsPlugin) getNamespace(nsName string) (*corev1.Namespace, error) { namespace, err := p.namespaceLister.Get(nsName) if errors.IsNotFound(err) { // in case of latency in our caches, make a call direct to storage to verify that it truly exists or not - namespace, err = p.client.Core().Namespaces().Get(nsName, metav1.GetOptions{}) + namespace, err = p.client.CoreV1().Namespaces().Get(nsName, metav1.GetOptions{}) if err != nil { if errors.IsNotFound(err) { return nil, err @@ -262,7 +264,7 @@ func (p *podTolerationsPlugin) getNamespaceTolerationsWhitelist(nsName string) ( // unset (nil), extractNSTolerations returns nil. If the value to these // keys are set to empty, an empty toleration is returned, otherwise // configured tolerations are returned. -func extractNSTolerations(ns *api.Namespace, key string) ([]api.Toleration, error) { +func extractNSTolerations(ns *corev1.Namespace, key string) ([]api.Toleration, error) { // if a namespace does not have any annotations if len(ns.Annotations) == 0 { return nil, nil diff --git a/plugin/pkg/admission/podtolerationrestriction/admission_test.go b/plugin/pkg/admission/podtolerationrestriction/admission_test.go index 45df727c07..688c0671c8 100644 --- a/plugin/pkg/admission/podtolerationrestriction/admission_test.go +++ b/plugin/pkg/admission/podtolerationrestriction/admission_test.go @@ -21,15 +21,16 @@ import ( "testing" "time" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apiserver/pkg/admission" + genericadmissioninitializer "k8s.io/apiserver/pkg/admission/initializer" utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/client-go/informers" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/kubernetes/fake" 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" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" "k8s.io/kubernetes/pkg/util/tolerations" pluginapi "k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction/apis/podtolerationrestriction" @@ -216,7 +217,7 @@ func TestPodAdmission(t *testing.T) { } for _, test := range tests { t.Run(test.testName, func(t *testing.T) { - namespace := &api.Namespace{ + namespace := &corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ Name: "testNamespace", Namespace: "", @@ -335,14 +336,14 @@ func TestIgnoreUpdatingInitializedPod(t *testing.T) { if err != nil { t.Errorf("error in marshalling namespace tolerations %v", namespaceTolerations) } - namespace := &api.Namespace{ + namespace := &corev1.Namespace{ ObjectMeta: metav1.ObjectMeta{ Name: "testNamespace", Namespace: "", }, } namespace.Annotations = map[string]string{NSDefaultTolerations: string(tolerationsStr)} - err = informerFactory.Core().InternalVersion().Namespaces().Informer().GetStore().Update(namespace) + err = informerFactory.Core().V1().Namespaces().Informer().GetStore().Update(namespace) if err != nil { t.Fatal(err) } @@ -355,7 +356,7 @@ func TestIgnoreUpdatingInitializedPod(t *testing.T) { } // newHandlerForTest returns the admission controller configured for testing. -func newHandlerForTest(c clientset.Interface) (*podTolerationsPlugin, informers.SharedInformerFactory, error) { +func newHandlerForTest(c kubernetes.Interface) (*podTolerationsPlugin, informers.SharedInformerFactory, error) { f := informers.NewSharedInformerFactory(c, 5*time.Minute) pluginConfig, err := loadConfiguration(nil) // must not fail @@ -363,7 +364,7 @@ func newHandlerForTest(c clientset.Interface) (*podTolerationsPlugin, informers. return nil, nil, err } handler := NewPodTolerationsPlugin(pluginConfig) - 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 diff --git a/plugin/pkg/admission/storage/persistentvolume/resize/BUILD b/plugin/pkg/admission/storage/persistentvolume/resize/BUILD index 2c2db2da16..80368f05a4 100644 --- a/plugin/pkg/admission/storage/persistentvolume/resize/BUILD +++ b/plugin/pkg/admission/storage/persistentvolume/resize/BUILD @@ -12,14 +12,14 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", - "//pkg/apis/storage:go_default_library", - "//pkg/client/informers/informers_generated/internalversion:go_default_library", "//pkg/controller:go_default_library", + "//staging/src/k8s.io/api/storage/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource: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/runtime/schema:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", + "//staging/src/k8s.io/client-go/informers:go_default_library", ], ) @@ -30,11 +30,10 @@ go_library( deps = [ "//pkg/apis/core:go_default_library", "//pkg/apis/core/helper:go_default_library", - "//pkg/client/informers/informers_generated/internalversion:go_default_library", - "//pkg/client/listers/core/internalversion:go_default_library", - "//pkg/client/listers/storage/internalversion:go_default_library", - "//pkg/kubeapiserver/admission: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/listers/storage/v1:go_default_library", ], ) diff --git a/plugin/pkg/admission/storage/persistentvolume/resize/admission.go b/plugin/pkg/admission/storage/persistentvolume/resize/admission.go index 10398b1edd..3a945ea9dc 100644 --- a/plugin/pkg/admission/storage/persistentvolume/resize/admission.go +++ b/plugin/pkg/admission/storage/persistentvolume/resize/admission.go @@ -21,12 +21,11 @@ import ( "io" "k8s.io/apiserver/pkg/admission" + genericadmissioninitializer "k8s.io/apiserver/pkg/admission/initializer" + "k8s.io/client-go/informers" + storagev1listers "k8s.io/client-go/listers/storage/v1" api "k8s.io/kubernetes/pkg/apis/core" apihelper "k8s.io/kubernetes/pkg/apis/core/helper" - informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion" - pvlister "k8s.io/kubernetes/pkg/client/listers/core/internalversion" - storagelisters "k8s.io/kubernetes/pkg/client/listers/storage/internalversion" - kubeapiserveradmission "k8s.io/kubernetes/pkg/kubeapiserver/admission" ) const ( @@ -44,13 +43,12 @@ func Register(plugins *admission.Plugins) { var _ admission.Interface = &persistentVolumeClaimResize{} var _ admission.ValidationInterface = &persistentVolumeClaimResize{} -var _ = kubeapiserveradmission.WantsInternalKubeInformerFactory(&persistentVolumeClaimResize{}) +var _ = genericadmissioninitializer.WantsExternalKubeInformerFactory(&persistentVolumeClaimResize{}) type persistentVolumeClaimResize struct { *admission.Handler - pvLister pvlister.PersistentVolumeLister - scLister storagelisters.StorageClassLister + scLister storagev1listers.StorageClassLister } func newPlugin() *persistentVolumeClaimResize { @@ -59,21 +57,14 @@ func newPlugin() *persistentVolumeClaimResize { } } -func (pvcr *persistentVolumeClaimResize) SetInternalKubeInformerFactory(f informers.SharedInformerFactory) { - pvcInformer := f.Core().InternalVersion().PersistentVolumes() - pvcr.pvLister = pvcInformer.Lister() - scInformer := f.Storage().InternalVersion().StorageClasses() +func (pvcr *persistentVolumeClaimResize) SetExternalKubeInformerFactory(f informers.SharedInformerFactory) { + scInformer := f.Storage().V1().StorageClasses() pvcr.scLister = scInformer.Lister() - pvcr.SetReadyFunc(func() bool { - return pvcInformer.Informer().HasSynced() && scInformer.Informer().HasSynced() - }) + pvcr.SetReadyFunc(scInformer.Informer().HasSynced) } // ValidateInitialization ensures lister is set. func (pvcr *persistentVolumeClaimResize) ValidateInitialization() error { - if pvcr.pvLister == nil { - return fmt.Errorf("missing persistent volume lister") - } if pvcr.scLister == nil { return fmt.Errorf("missing storageclass lister") } diff --git a/plugin/pkg/admission/storage/persistentvolume/resize/admission_test.go b/plugin/pkg/admission/storage/persistentvolume/resize/admission_test.go index 2f3d77140b..0eed48a5c5 100644 --- a/plugin/pkg/admission/storage/persistentvolume/resize/admission_test.go +++ b/plugin/pkg/admission/storage/persistentvolume/resize/admission_test.go @@ -21,14 +21,14 @@ import ( "strings" "testing" + storagev1 "k8s.io/api/storage/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apiserver/pkg/admission" + "k8s.io/client-go/informers" api "k8s.io/kubernetes/pkg/apis/core" - "k8s.io/kubernetes/pkg/apis/storage" - informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion" "k8s.io/kubernetes/pkg/controller" ) @@ -44,7 +44,7 @@ func TestPVCResizeAdmission(t *testing.T) { goldClassName := "gold" trueVal := true falseVar := false - goldClass := &storage.StorageClass{ + goldClass := &storagev1.StorageClass{ TypeMeta: metav1.TypeMeta{ Kind: "StorageClass", }, @@ -55,7 +55,7 @@ func TestPVCResizeAdmission(t *testing.T) { AllowVolumeExpansion: &trueVal, } silverClassName := "silver" - silverClass := &storage.StorageClass{ + silverClass := &storagev1.StorageClass{ TypeMeta: metav1.TypeMeta{ Kind: "StorageClass", }, @@ -237,40 +237,16 @@ func TestPVCResizeAdmission(t *testing.T) { ctrl := newPlugin() informerFactory := informers.NewSharedInformerFactory(nil, controller.NoResyncPeriodFunc()) - ctrl.SetInternalKubeInformerFactory(informerFactory) + ctrl.SetExternalKubeInformerFactory(informerFactory) err := ctrl.ValidateInitialization() if err != nil { t.Fatalf("neither pv lister nor storageclass lister can be nil") } - pv1 := &api.PersistentVolume{ - ObjectMeta: metav1.ObjectMeta{Name: "volume1"}, - Spec: api.PersistentVolumeSpec{ - PersistentVolumeSource: api.PersistentVolumeSource{ - Glusterfs: &api.GlusterfsVolumeSource{ - EndpointsName: "http://localhost:8080/", - Path: "/heketi", - ReadOnly: false, - }, - }, - StorageClassName: goldClassName, - }, - } - - pvs := []*api.PersistentVolume{} - pvs = append(pvs, pv1) - - for _, pv := range pvs { - err := informerFactory.Core().InternalVersion().PersistentVolumes().Informer().GetStore().Add(pv) - if err != nil { - fmt.Println("add pv error: ", err) - } - } - - scs := []*storage.StorageClass{} + scs := []*storagev1.StorageClass{} scs = append(scs, goldClass, silverClass) for _, sc := range scs { - err := informerFactory.Storage().InternalVersion().StorageClasses().Informer().GetStore().Add(sc) + err := informerFactory.Storage().V1().StorageClasses().Informer().GetStore().Add(sc) if err != nil { fmt.Println("add storageclass error: ", err) } @@ -281,8 +257,6 @@ func TestPVCResizeAdmission(t *testing.T) { attributes := admission.NewAttributesRecord(tc.newObj, tc.oldObj, schema.GroupVersionKind{}, metav1.NamespaceDefault, "foo", tc.resource, tc.subresource, operation, false, nil) err := ctrl.Validate(attributes) - fmt.Println(tc.name) - fmt.Println(err) if !tc.checkError(err) { t.Errorf("%v: unexpected err: %v", tc.name, err) } diff --git a/test/integration/scheduler/BUILD b/test/integration/scheduler/BUILD index c78e0218e4..0956657c99 100644 --- a/test/integration/scheduler/BUILD +++ b/test/integration/scheduler/BUILD @@ -25,13 +25,10 @@ go_test( "//cmd/kube-scheduler/app:go_default_library", "//cmd/kube-scheduler/app/config:go_default_library", "//pkg/api/legacyscheme:go_default_library", - "//pkg/client/clientset_generated/internalclientset:go_default_library", - "//pkg/client/informers/informers_generated/internalversion:go_default_library", "//pkg/controller/nodelifecycle:go_default_library", "//pkg/controller/volume/persistentvolume:go_default_library", "//pkg/controller/volume/persistentvolume/options:go_default_library", "//pkg/features:go_default_library", - "//pkg/kubeapiserver/admission:go_default_library", "//pkg/scheduler:go_default_library", "//pkg/scheduler/algorithm:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library", diff --git a/test/integration/scheduler/taint_test.go b/test/integration/scheduler/taint_test.go index 493c8e8544..89189fc155 100644 --- a/test/integration/scheduler/taint_test.go +++ b/test/integration/scheduler/taint_test.go @@ -28,11 +28,10 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/client-go/informers" + "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" - "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - internalinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion" "k8s.io/kubernetes/pkg/controller/nodelifecycle" - kubeadmission "k8s.io/kubernetes/pkg/kubeapiserver/admission" "k8s.io/kubernetes/pkg/scheduler/algorithmprovider" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" "k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction" @@ -77,14 +76,14 @@ func TestTaintNodeByCondition(t *testing.T) { context := initTestMaster(t, "default", admission) // Build clientset and informers for controllers. - internalClientset := internalclientset.NewForConfigOrDie(&restclient.Config{ + externalClientset := kubernetes.NewForConfigOrDie(&restclient.Config{ QPS: -1, Host: context.httpServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: &schema.GroupVersion{Group: "", Version: "v1"}}}) - internalInformers := internalinformers.NewSharedInformerFactory(internalClientset, time.Second) + externalInformers := informers.NewSharedInformerFactory(externalClientset, time.Second) - kubeadmission.WantsInternalKubeClientSet(admission).SetInternalKubeClientSet(internalClientset) - kubeadmission.WantsInternalKubeInformerFactory(admission).SetInternalKubeInformerFactory(internalInformers) + admission.SetExternalKubeClientSet(externalClientset) + admission.SetExternalKubeInformerFactory(externalInformers) controllerCh := make(chan struct{}) defer close(controllerCh) @@ -124,8 +123,8 @@ func TestTaintNodeByCondition(t *testing.T) { go nc.Run(controllerCh) // Waiting for all controller sync. - internalInformers.Start(controllerCh) - internalInformers.WaitForCacheSync(controllerCh) + externalInformers.Start(controllerCh) + externalInformers.WaitForCacheSync(controllerCh) informers.Start(controllerCh) informers.WaitForCacheSync(controllerCh)