From 3e4236d5458c6194cd5eba4bc21145758d3aa049 Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Mon, 27 Mar 2017 09:34:49 -0700 Subject: [PATCH 1/4] fed: Add type adapter registration to simplify maintenance --- federation/pkg/typeadapters/adapter.go | 36 +++++++++++++++++-- federation/pkg/typeadapters/secret.go | 14 ++++---- .../federation/framework/secret.go | 2 +- 3 files changed, 43 insertions(+), 9 deletions(-) diff --git a/federation/pkg/typeadapters/adapter.go b/federation/pkg/typeadapters/adapter.go index b5799666a6c..a0f8b1ae0c9 100644 --- a/federation/pkg/typeadapters/adapter.go +++ b/federation/pkg/typeadapters/adapter.go @@ -17,6 +17,8 @@ limitations under the License. package typeadapters import ( + "fmt" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" pkgruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" @@ -29,8 +31,6 @@ import ( // federated type. Code written to this interface can then target any // type for which an implementation of this interface exists. type FederatedTypeAdapter interface { - SetClient(client federationclientset.Interface) - Kind() string ObjectType() pkgruntime.Object IsExpectedType(obj interface{}) bool @@ -57,3 +57,35 @@ type FederatedTypeAdapter interface { NewTestObject(namespace string) pkgruntime.Object } + +// AdapterFactory defines the function signature for factory methods +// that create FederatedTypeAdapters. Such methods should be +// registered with RegisterAdapterFactory to ensure the type adapter +// is discoverable. +type AdapterFactory func(client federationclientset.Interface) FederatedTypeAdapter + +var typeAdapterRegistry = make(map[string]AdapterFactory) + +// RegisterAdapterFactory ensures that the given kind and adapter +// factory will be returned in the results of the AdapterFactories +// method. +func RegisterAdapterFactory(kind string, factory AdapterFactory) { + _, ok := typeAdapterRegistry[kind] + if ok { + // TODO Is panicking ok given that this is part of a type-registration mechanism + panic(fmt.Sprintf("An adapter has already been registered for federated type %q", kind)) + } + typeAdapterRegistry[kind] = factory +} + +// AdapterFactories returns a mapping of federated kind +// (e.g. "secret") to the factory method that will create an adapter +// for that type. +func AdapterFactories() map[string]AdapterFactory { + // Return a copy to avoid accidental mutation + result := make(map[string]AdapterFactory) + for key, value := range typeAdapterRegistry { + result[key] = value + } + return result +} diff --git a/federation/pkg/typeadapters/secret.go b/federation/pkg/typeadapters/secret.go index aae439c611e..1d467405163 100644 --- a/federation/pkg/typeadapters/secret.go +++ b/federation/pkg/typeadapters/secret.go @@ -27,20 +27,22 @@ import ( kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" ) +const secretKind = "secret" + +func init() { + RegisterAdapterFactory(secretKind, NewSecretAdapter) +} + type SecretAdapter struct { client federationclientset.Interface } -func NewSecretAdapter(client federationclientset.Interface) *SecretAdapter { +func NewSecretAdapter(client federationclientset.Interface) FederatedTypeAdapter { return &SecretAdapter{client: client} } -func (a *SecretAdapter) SetClient(client federationclientset.Interface) { - a.client = client -} - func (a *SecretAdapter) Kind() string { - return "secret" + return secretKind } func (a *SecretAdapter) ObjectType() pkgruntime.Object { diff --git a/test/integration/federation/framework/secret.go b/test/integration/federation/framework/secret.go index ab2d143da9a..f24c364b05a 100644 --- a/test/integration/federation/framework/secret.go +++ b/test/integration/federation/framework/secret.go @@ -26,7 +26,7 @@ import ( ) type SecretFixture struct { - adapter *typeadapters.SecretAdapter + adapter typeadapters.FederatedTypeAdapter stopChan chan struct{} } From 6f061f7962509572e1676c110390cc2618fbcb72 Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Thu, 6 Apr 2017 19:57:31 -0700 Subject: [PATCH 2/4] fed: Update crud integration test to use the the adapter registry --- .../secret/secret_controller.go | 12 ++--- federation/pkg/typeadapters/secret.go | 6 +-- test/integration/federation/BUILD | 1 + test/integration/federation/crud_test.go | 26 ++++++---- test/integration/federation/framework/BUILD | 1 - .../federation/framework/controller.go | 34 ++++++------- .../federation/framework/secret.go | 49 ------------------- 7 files changed, 42 insertions(+), 87 deletions(-) delete mode 100644 test/integration/federation/framework/secret.go diff --git a/federation/pkg/federation-controller/secret/secret_controller.go b/federation/pkg/federation-controller/secret/secret_controller.go index 7f7dce885c1..ce83d41d43d 100644 --- a/federation/pkg/federation-controller/secret/secret_controller.go +++ b/federation/pkg/federation-controller/secret/secret_controller.go @@ -95,7 +95,7 @@ type FederationSyncController struct { // StartSecretController starts a new secret controller func StartSecretController(config *restclient.Config, stopChan <-chan struct{}, minimizeLatency bool) { - startFederationSyncController(&typeadapters.SecretAdapter{}, config, stopChan, minimizeLatency) + StartFederationSyncController(typeadapters.SecretKind, typeadapters.NewSecretAdapter, config, stopChan, minimizeLatency) } // newSecretController returns a new secret controller @@ -103,16 +103,16 @@ func newSecretController(client federationclientset.Interface) *FederationSyncCo return newFederationSyncController(client, typeadapters.NewSecretAdapter(client)) } -// startFederationSyncController starts a new sync controller for the given type adapter -func startFederationSyncController(adapter typeadapters.FederatedTypeAdapter, config *restclient.Config, stopChan <-chan struct{}, minimizeLatency bool) { - restclient.AddUserAgent(config, fmt.Sprintf("%s-controller", adapter.Kind())) +// StartFederationSyncController starts a new sync controller for a type adapter +func StartFederationSyncController(kind string, adapterFactory typeadapters.AdapterFactory, config *restclient.Config, stopChan <-chan struct{}, minimizeLatency bool) { + restclient.AddUserAgent(config, fmt.Sprintf("%s-controller", kind)) client := federationclientset.NewForConfigOrDie(config) - adapter.SetClient(client) + adapter := adapterFactory(client) controller := newFederationSyncController(client, adapter) if minimizeLatency { controller.minimizeLatency() } - glog.Infof(fmt.Sprintf("Starting federated sync controller for %s resources", adapter.Kind())) + glog.Infof(fmt.Sprintf("Starting federated sync controller for %s resources", kind)) controller.Run(stopChan) } diff --git a/federation/pkg/typeadapters/secret.go b/federation/pkg/typeadapters/secret.go index 1d467405163..6d2c391bb62 100644 --- a/federation/pkg/typeadapters/secret.go +++ b/federation/pkg/typeadapters/secret.go @@ -27,10 +27,10 @@ import ( kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" ) -const secretKind = "secret" +const SecretKind = "secret" func init() { - RegisterAdapterFactory(secretKind, NewSecretAdapter) + RegisterAdapterFactory(SecretKind, NewSecretAdapter) } type SecretAdapter struct { @@ -42,7 +42,7 @@ func NewSecretAdapter(client federationclientset.Interface) FederatedTypeAdapter } func (a *SecretAdapter) Kind() string { - return secretKind + return SecretKind } func (a *SecretAdapter) ObjectType() pkgruntime.Object { diff --git a/test/integration/federation/BUILD b/test/integration/federation/BUILD index 23c93e90acc..a4a47992a91 100644 --- a/test/integration/federation/BUILD +++ b/test/integration/federation/BUILD @@ -16,6 +16,7 @@ go_test( tags = ["automanaged"], deps = [ "//federation/apis/federation/v1beta1:go_default_library", + "//federation/pkg/typeadapters:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/apis/autoscaling/v1:go_default_library", "//pkg/apis/batch/v1:go_default_library", diff --git a/test/integration/federation/crud_test.go b/test/integration/federation/crud_test.go index ce058b5e4c2..3e335e70a17 100644 --- a/test/integration/federation/crud_test.go +++ b/test/integration/federation/crud_test.go @@ -17,10 +17,12 @@ limitations under the License. package federation import ( + "fmt" "testing" "github.com/pborman/uuid" + "k8s.io/kubernetes/federation/pkg/typeadapters" "k8s.io/kubernetes/test/integration/federation/framework" ) @@ -30,15 +32,15 @@ func TestFederationCRUD(t *testing.T) { fedFixture.SetUp(t) defer fedFixture.TearDown(t) - controllerFixtures := []framework.ControllerFixture{ - &framework.SecretFixture{}, - } - for _, fixture := range controllerFixtures { - t.Run(fixture.Kind(), func(t *testing.T) { - framework.SetUpControllerFixture(t, fedFixture.APIFixture, fixture) + for kind, adapterFactory := range typeadapters.AdapterFactories() { + t.Run(kind, func(t *testing.T) { + config := fedFixture.APIFixture.NewConfig() + fixture := framework.NewControllerFixture(t, kind, adapterFactory, config) defer fixture.TearDown(t) - adapter := fixture.Adapter() + client := fedFixture.APIFixture.NewClient(fmt.Sprintf("crud-test-%s", kind)) + adapter := adapterFactory(client) + crudtester := framework.NewFederatedTypeCRUDTester(t, adapter, fedFixture.ClusterClients) obj := adapter.NewTestObject(uuid.New()) crudtester.CheckLifecycle(obj) @@ -52,13 +54,17 @@ func TestFederationCRUD(t *testing.T) { "Resources should not be deleted from underlying clusters when OrphanDependents is true": &orphanedDependents, "Resources should not be deleted from underlying clusters when OrphanDependents is nil": nil, } + kind := typeadapters.SecretKind + adapterFactory := typeadapters.NewSecretAdapter for testName, orphanDependents := range testCases { t.Run(testName, func(t *testing.T) { - fixture := &framework.SecretFixture{} - framework.SetUpControllerFixture(t, fedFixture.APIFixture, fixture) + config := fedFixture.APIFixture.NewConfig() + fixture := framework.NewControllerFixture(t, kind, adapterFactory, config) defer fixture.TearDown(t) - adapter := fixture.Adapter() + client := fedFixture.APIFixture.NewClient(fmt.Sprintf("deletion-test-%s", kind)) + adapter := adapterFactory(client) + crudtester := framework.NewFederatedTypeCRUDTester(t, adapter, fedFixture.ClusterClients) obj := adapter.NewTestObject(uuid.New()) updatedObj := crudtester.CheckCreate(obj) diff --git a/test/integration/federation/framework/BUILD b/test/integration/federation/framework/BUILD index e601b5c8b2f..6f05a241c0a 100644 --- a/test/integration/federation/framework/BUILD +++ b/test/integration/federation/framework/BUILD @@ -14,7 +14,6 @@ go_library( "controller.go", "crudtester.go", "federation.go", - "secret.go", "util.go", ], tags = ["automanaged"], diff --git a/test/integration/federation/framework/controller.go b/test/integration/federation/framework/controller.go index ce4633a845b..817f695585d 100644 --- a/test/integration/federation/framework/controller.go +++ b/test/integration/federation/framework/controller.go @@ -17,30 +17,28 @@ limitations under the License. package framework import ( - "fmt" "testing" restclient "k8s.io/client-go/rest" - federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" + secretcontroller "k8s.io/kubernetes/federation/pkg/federation-controller/secret" "k8s.io/kubernetes/federation/pkg/typeadapters" ) -// ControllerFixture defines operations for managing a federation -// controller. Tests written to this interface can then target any -// controller for which an implementation of this interface exists. -type ControllerFixture interface { - TestFixture - - SetUp(t *testing.T, testClient federationclientset.Interface, config *restclient.Config) - - Kind() string - - Adapter() typeadapters.FederatedTypeAdapter +// ControllerFixture manages a federation controller for testing. +type ControllerFixture struct { + stopChan chan struct{} } -// SetUpControllerFixture configures the given resource fixture to target the provided api fixture -func SetUpControllerFixture(t *testing.T, apiFixture *FederationAPIFixture, controllerFixture ControllerFixture) { - client := apiFixture.NewClient(fmt.Sprintf("test-%s", controllerFixture.Kind())) - config := apiFixture.NewConfig() - controllerFixture.SetUp(t, client, config) +// NewControllerFixture initializes a new controller fixture +func NewControllerFixture(t *testing.T, kind string, adapterFactory typeadapters.AdapterFactory, config *restclient.Config) *ControllerFixture { + f := &ControllerFixture{ + stopChan: make(chan struct{}), + } + // TODO the generic controller doesn't belong in the secretcontroller package + secretcontroller.StartFederationSyncController(kind, adapterFactory, config, f.stopChan, true) + return f +} + +func (f *ControllerFixture) TearDown(t *testing.T) { + close(f.stopChan) } diff --git a/test/integration/federation/framework/secret.go b/test/integration/federation/framework/secret.go deleted file mode 100644 index f24c364b05a..00000000000 --- a/test/integration/federation/framework/secret.go +++ /dev/null @@ -1,49 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package framework - -import ( - "testing" - - restclient "k8s.io/client-go/rest" - federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" - secretcontroller "k8s.io/kubernetes/federation/pkg/federation-controller/secret" - "k8s.io/kubernetes/federation/pkg/typeadapters" -) - -type SecretFixture struct { - adapter typeadapters.FederatedTypeAdapter - stopChan chan struct{} -} - -func (f *SecretFixture) SetUp(t *testing.T, client federationclientset.Interface, config *restclient.Config) { - f.adapter = typeadapters.NewSecretAdapter(client) - f.stopChan = make(chan struct{}) - secretcontroller.StartSecretController(config, f.stopChan, true) -} - -func (f *SecretFixture) TearDown(t *testing.T) { - close(f.stopChan) -} -func (f *SecretFixture) Kind() string { - adapter := &typeadapters.SecretAdapter{} - return adapter.Kind() -} - -func (f *SecretFixture) Adapter() typeadapters.FederatedTypeAdapter { - return f.adapter -} From 1ebffa7112328cb9006d536723e45c269e20619c Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Thu, 6 Apr 2017 20:58:22 -0700 Subject: [PATCH 3/4] fed: adapter registry -> type registry to enable ctlr mgr use --- .../federation-controller-manager/app/BUILD | 1 + .../app/controllermanager.go | 8 ++- .../pkg/federation-controller/secret/BUILD | 3 +- .../secret/secret_controller.go | 17 ------ .../secret/secret_controller_test.go | 3 +- federation/pkg/typeadapters/BUILD | 2 + federation/pkg/typeadapters/adapter.go | 28 --------- federation/pkg/typeadapters/registry.go | 59 +++++++++++++++++++ federation/pkg/typeadapters/secret.go | 8 ++- test/integration/federation/crud_test.go | 7 ++- 10 files changed, 81 insertions(+), 55 deletions(-) create mode 100644 federation/pkg/typeadapters/registry.go diff --git a/federation/cmd/federation-controller-manager/app/BUILD b/federation/cmd/federation-controller-manager/app/BUILD index 276a4084f65..bb360d6ae10 100644 --- a/federation/cmd/federation-controller-manager/app/BUILD +++ b/federation/cmd/federation-controller-manager/app/BUILD @@ -31,6 +31,7 @@ go_library( "//federation/pkg/federation-controller/replicaset:go_default_library", "//federation/pkg/federation-controller/secret:go_default_library", "//federation/pkg/federation-controller/service:go_default_library", + "//federation/pkg/typeadapters:go_default_library", "//pkg/util/configz:go_default_library", "//pkg/version:go_default_library", "//vendor/github.com/golang/glog:go_default_library", diff --git a/federation/cmd/federation-controller-manager/app/controllermanager.go b/federation/cmd/federation-controller-manager/app/controllermanager.go index b41d24a32d2..b9dde8a764e 100644 --- a/federation/cmd/federation-controller-manager/app/controllermanager.go +++ b/federation/cmd/federation-controller-manager/app/controllermanager.go @@ -45,6 +45,7 @@ import ( replicasetcontroller "k8s.io/kubernetes/federation/pkg/federation-controller/replicaset" secretcontroller "k8s.io/kubernetes/federation/pkg/federation-controller/secret" servicecontroller "k8s.io/kubernetes/federation/pkg/federation-controller/service" + "k8s.io/kubernetes/federation/pkg/typeadapters" "k8s.io/kubernetes/pkg/util/configz" "k8s.io/kubernetes/pkg/version" @@ -159,8 +160,11 @@ func StartControllers(s *options.CMServer, restClientCfg *restclient.Config) err namespaceController.Run(wait.NeverStop) } - if controllerEnabled(s.Controllers, serverResources, secretcontroller.ControllerName, secretcontroller.RequiredResources, true) { - secretcontroller.StartSecretController(restClientCfg, stopChan, minimizeLatency) + for kind, federatedType := range typeadapters.FederatedTypes() { + if controllerEnabled(s.Controllers, serverResources, federatedType.ControllerName, federatedType.RequiredResources, true) { + // TODO the generic controller doesn't belong in the secretcontroller package + secretcontroller.StartFederationSyncController(kind, federatedType.AdapterFactory, restClientCfg, stopChan, minimizeLatency) + } } if controllerEnabled(s.Controllers, serverResources, configmapcontroller.ControllerName, configmapcontroller.RequiredResources, true) { diff --git a/federation/pkg/federation-controller/secret/BUILD b/federation/pkg/federation-controller/secret/BUILD index deef7e7e2c3..d0c6656cfc7 100644 --- a/federation/pkg/federation-controller/secret/BUILD +++ b/federation/pkg/federation-controller/secret/BUILD @@ -20,14 +20,12 @@ go_library( "//federation/pkg/federation-controller/util/eventsink:go_default_library", "//federation/pkg/typeadapters:go_default_library", "//pkg/api:go_default_library", - "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/controller:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", "//vendor/k8s.io/client-go/pkg/api/v1:go_default_library", @@ -49,6 +47,7 @@ go_test( "//federation/pkg/federation-controller/util:go_default_library", "//federation/pkg/federation-controller/util/deletionhelper:go_default_library", "//federation/pkg/federation-controller/util/test:go_default_library", + "//federation/pkg/typeadapters:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/clientset/fake:go_default_library", diff --git a/federation/pkg/federation-controller/secret/secret_controller.go b/federation/pkg/federation-controller/secret/secret_controller.go index ce83d41d43d..428f7cbe83c 100644 --- a/federation/pkg/federation-controller/secret/secret_controller.go +++ b/federation/pkg/federation-controller/secret/secret_controller.go @@ -24,7 +24,6 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" pkgruntime "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/watch" clientv1 "k8s.io/client-go/pkg/api/v1" @@ -39,7 +38,6 @@ import ( "k8s.io/kubernetes/federation/pkg/federation-controller/util/eventsink" "k8s.io/kubernetes/federation/pkg/typeadapters" "k8s.io/kubernetes/pkg/api" - apiv1 "k8s.io/kubernetes/pkg/api/v1" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/controller" @@ -48,11 +46,6 @@ import ( const ( allClustersKey = "ALL_CLUSTERS" - ControllerName = "secrets" -) - -var ( - RequiredResources = []schema.GroupVersionResource{apiv1.SchemeGroupVersion.WithResource("secrets")} ) // FederationSyncController synchronizes the state of a federated type @@ -93,16 +86,6 @@ type FederationSyncController struct { adapter typeadapters.FederatedTypeAdapter } -// StartSecretController starts a new secret controller -func StartSecretController(config *restclient.Config, stopChan <-chan struct{}, minimizeLatency bool) { - StartFederationSyncController(typeadapters.SecretKind, typeadapters.NewSecretAdapter, config, stopChan, minimizeLatency) -} - -// newSecretController returns a new secret controller -func newSecretController(client federationclientset.Interface) *FederationSyncController { - return newFederationSyncController(client, typeadapters.NewSecretAdapter(client)) -} - // StartFederationSyncController starts a new sync controller for a type adapter func StartFederationSyncController(kind string, adapterFactory typeadapters.AdapterFactory, config *restclient.Config, stopChan <-chan struct{}, minimizeLatency bool) { restclient.AddUserAgent(config, fmt.Sprintf("%s-controller", kind)) diff --git a/federation/pkg/federation-controller/secret/secret_controller_test.go b/federation/pkg/federation-controller/secret/secret_controller_test.go index 3bfeb4848c4..6177d037fd8 100644 --- a/federation/pkg/federation-controller/secret/secret_controller_test.go +++ b/federation/pkg/federation-controller/secret/secret_controller_test.go @@ -31,6 +31,7 @@ import ( "k8s.io/kubernetes/federation/pkg/federation-controller/util" "k8s.io/kubernetes/federation/pkg/federation-controller/util/deletionhelper" . "k8s.io/kubernetes/federation/pkg/federation-controller/util/test" + "k8s.io/kubernetes/federation/pkg/typeadapters" apiv1 "k8s.io/kubernetes/pkg/api/v1" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" fakekubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" @@ -66,7 +67,7 @@ func TestSecretController(t *testing.T) { RegisterFakeList(secrets, &cluster2Client.Fake, &apiv1.SecretList{Items: []apiv1.Secret{}}) cluster2CreateChan := RegisterFakeCopyOnCreate(secrets, &cluster2Client.Fake, cluster2Watch) - secretController := newSecretController(fakeClient) + secretController := newFederationSyncController(fakeClient, typeadapters.NewSecretAdapter(fakeClient)) informerClientFactory := func(cluster *federationapi.Cluster) (kubeclientset.Interface, error) { switch cluster.Name { case cluster1.Name: diff --git a/federation/pkg/typeadapters/BUILD b/federation/pkg/typeadapters/BUILD index 20fa286feb8..4ec1f9ebefa 100644 --- a/federation/pkg/typeadapters/BUILD +++ b/federation/pkg/typeadapters/BUILD @@ -11,6 +11,7 @@ go_library( name = "go_default_library", srcs = [ "adapter.go", + "registry.go", "secret.go", ], tags = ["automanaged"], @@ -21,6 +22,7 @@ go_library( "//pkg/client/clientset_generated/clientset:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/watch:go_default_library", ], diff --git a/federation/pkg/typeadapters/adapter.go b/federation/pkg/typeadapters/adapter.go index a0f8b1ae0c9..41089efcf22 100644 --- a/federation/pkg/typeadapters/adapter.go +++ b/federation/pkg/typeadapters/adapter.go @@ -17,8 +17,6 @@ limitations under the License. package typeadapters import ( - "fmt" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" pkgruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" @@ -63,29 +61,3 @@ type FederatedTypeAdapter interface { // registered with RegisterAdapterFactory to ensure the type adapter // is discoverable. type AdapterFactory func(client federationclientset.Interface) FederatedTypeAdapter - -var typeAdapterRegistry = make(map[string]AdapterFactory) - -// RegisterAdapterFactory ensures that the given kind and adapter -// factory will be returned in the results of the AdapterFactories -// method. -func RegisterAdapterFactory(kind string, factory AdapterFactory) { - _, ok := typeAdapterRegistry[kind] - if ok { - // TODO Is panicking ok given that this is part of a type-registration mechanism - panic(fmt.Sprintf("An adapter has already been registered for federated type %q", kind)) - } - typeAdapterRegistry[kind] = factory -} - -// AdapterFactories returns a mapping of federated kind -// (e.g. "secret") to the factory method that will create an adapter -// for that type. -func AdapterFactories() map[string]AdapterFactory { - // Return a copy to avoid accidental mutation - result := make(map[string]AdapterFactory) - for key, value := range typeAdapterRegistry { - result[key] = value - } - return result -} diff --git a/federation/pkg/typeadapters/registry.go b/federation/pkg/typeadapters/registry.go new file mode 100644 index 00000000000..f27a0fe5a9f --- /dev/null +++ b/federation/pkg/typeadapters/registry.go @@ -0,0 +1,59 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package typeadapters + +import ( + "fmt" + + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// FederatedType configures federation for a kubernetes type +type FederatedType struct { + Kind string + ControllerName string + RequiredResources []schema.GroupVersionResource + AdapterFactory AdapterFactory +} + +var typeRegistry = make(map[string]FederatedType) + +// RegisterFederatedType ensures that configuration for the given kind will be returned by the FederatedTypes method. +func RegisterFederatedType(kind, controllerName string, requiredResources []schema.GroupVersionResource, factory AdapterFactory) { + _, ok := typeRegistry[kind] + if ok { + // TODO Is panicking ok given that this is part of a type-registration mechanism + panic(fmt.Sprintf("Federated type %q has already been registered", kind)) + } + typeRegistry[kind] = FederatedType{ + Kind: kind, + ControllerName: controllerName, + RequiredResources: requiredResources, + AdapterFactory: factory, + } +} + +// FederatedTypes returns a mapping of kind (e.g. "secret") to the +// type information required to configure its federation. +func FederatedTypes() map[string]FederatedType { + // TODO copy RequiredResources to avoid accidental mutation + result := make(map[string]FederatedType) + for key, value := range typeRegistry { + result[key] = value + } + return result +} diff --git a/federation/pkg/typeadapters/secret.go b/federation/pkg/typeadapters/secret.go index 6d2c391bb62..1209d5f5890 100644 --- a/federation/pkg/typeadapters/secret.go +++ b/federation/pkg/typeadapters/secret.go @@ -19,6 +19,7 @@ package typeadapters import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" pkgruntime "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/watch" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" @@ -27,10 +28,13 @@ import ( kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" ) -const SecretKind = "secret" +const ( + SecretKind = "secret" + SecretControllerName = "secrets" +) func init() { - RegisterAdapterFactory(SecretKind, NewSecretAdapter) + RegisterFederatedType(SecretKind, SecretControllerName, []schema.GroupVersionResource{apiv1.SchemeGroupVersion.WithResource(SecretControllerName)}, NewSecretAdapter) } type SecretAdapter struct { diff --git a/test/integration/federation/crud_test.go b/test/integration/federation/crud_test.go index 3e335e70a17..33c61693409 100644 --- a/test/integration/federation/crud_test.go +++ b/test/integration/federation/crud_test.go @@ -32,14 +32,15 @@ func TestFederationCRUD(t *testing.T) { fedFixture.SetUp(t) defer fedFixture.TearDown(t) - for kind, adapterFactory := range typeadapters.AdapterFactories() { + federatedTypes := typeadapters.FederatedTypes() + for kind, fedType := range federatedTypes { t.Run(kind, func(t *testing.T) { config := fedFixture.APIFixture.NewConfig() - fixture := framework.NewControllerFixture(t, kind, adapterFactory, config) + fixture := framework.NewControllerFixture(t, kind, fedType.AdapterFactory, config) defer fixture.TearDown(t) client := fedFixture.APIFixture.NewClient(fmt.Sprintf("crud-test-%s", kind)) - adapter := adapterFactory(client) + adapter := fedType.AdapterFactory(client) crudtester := framework.NewFederatedTypeCRUDTester(t, adapter, fedFixture.ClusterClients) obj := adapter.NewTestObject(uuid.New()) From 2c75aeed02314f8248c6845af9c9444e217a3db1 Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Thu, 6 Apr 2017 21:09:56 -0700 Subject: [PATCH 4/4] fed: mv pkg/typeadapters pkg/federatedtypes --- federation/BUILD | 2 +- federation/cmd/federation-controller-manager/app/BUILD | 2 +- .../app/controllermanager.go | 4 ++-- federation/pkg/{typeadapters => federatedtypes}/BUILD | 2 +- .../pkg/{typeadapters => federatedtypes}/adapter.go | 8 ++++---- .../pkg/{typeadapters => federatedtypes}/crudtester/BUILD | 2 +- .../crudtester/crudtester.go | 6 +++--- .../pkg/{typeadapters => federatedtypes}/registry.go | 2 +- federation/pkg/{typeadapters => federatedtypes}/secret.go | 2 +- federation/pkg/federation-controller/secret/BUILD | 4 ++-- .../pkg/federation-controller/secret/secret_controller.go | 8 ++++---- .../secret/secret_controller_test.go | 4 ++-- test/integration/federation/BUILD | 2 +- test/integration/federation/crud_test.go | 8 ++++---- test/integration/federation/framework/BUILD | 4 ++-- test/integration/federation/framework/controller.go | 4 ++-- test/integration/federation/framework/crudtester.go | 6 +++--- 17 files changed, 35 insertions(+), 35 deletions(-) rename federation/pkg/{typeadapters => federatedtypes}/BUILD (95%) rename federation/pkg/{typeadapters => federatedtypes}/adapter.go (93%) rename federation/pkg/{typeadapters => federatedtypes}/crudtester/BUILD (93%) rename federation/pkg/{typeadapters => federatedtypes}/crudtester/crudtester.go (95%) rename federation/pkg/{typeadapters => federatedtypes}/registry.go (98%) rename federation/pkg/{typeadapters => federatedtypes}/secret.go (99%) diff --git a/federation/BUILD b/federation/BUILD index d2f17e9e70e..a8c446f3644 100644 --- a/federation/BUILD +++ b/federation/BUILD @@ -27,9 +27,9 @@ filegroup( "//federation/cmd/kubefed:all-srcs", "//federation/develop:all-srcs", "//federation/pkg/dnsprovider:all-srcs", + "//federation/pkg/federatedtypes:all-srcs", "//federation/pkg/federation-controller:all-srcs", "//federation/pkg/kubefed:all-srcs", - "//federation/pkg/typeadapters:all-srcs", "//federation/registry/cluster:all-srcs", ], tags = ["automanaged"], diff --git a/federation/cmd/federation-controller-manager/app/BUILD b/federation/cmd/federation-controller-manager/app/BUILD index bb360d6ae10..757a9168777 100644 --- a/federation/cmd/federation-controller-manager/app/BUILD +++ b/federation/cmd/federation-controller-manager/app/BUILD @@ -22,6 +22,7 @@ go_library( "//federation/pkg/dnsprovider/providers/aws/route53:go_default_library", "//federation/pkg/dnsprovider/providers/coredns:go_default_library", "//federation/pkg/dnsprovider/providers/google/clouddns:go_default_library", + "//federation/pkg/federatedtypes:go_default_library", "//federation/pkg/federation-controller/cluster:go_default_library", "//federation/pkg/federation-controller/configmap:go_default_library", "//federation/pkg/federation-controller/daemonset:go_default_library", @@ -31,7 +32,6 @@ go_library( "//federation/pkg/federation-controller/replicaset:go_default_library", "//federation/pkg/federation-controller/secret:go_default_library", "//federation/pkg/federation-controller/service:go_default_library", - "//federation/pkg/typeadapters:go_default_library", "//pkg/util/configz:go_default_library", "//pkg/version:go_default_library", "//vendor/github.com/golang/glog:go_default_library", diff --git a/federation/cmd/federation-controller-manager/app/controllermanager.go b/federation/cmd/federation-controller-manager/app/controllermanager.go index b9dde8a764e..fdaa667ea7a 100644 --- a/federation/cmd/federation-controller-manager/app/controllermanager.go +++ b/federation/cmd/federation-controller-manager/app/controllermanager.go @@ -36,6 +36,7 @@ import ( federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" "k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/options" "k8s.io/kubernetes/federation/pkg/dnsprovider" + "k8s.io/kubernetes/federation/pkg/federatedtypes" clustercontroller "k8s.io/kubernetes/federation/pkg/federation-controller/cluster" configmapcontroller "k8s.io/kubernetes/federation/pkg/federation-controller/configmap" daemonsetcontroller "k8s.io/kubernetes/federation/pkg/federation-controller/daemonset" @@ -45,7 +46,6 @@ import ( replicasetcontroller "k8s.io/kubernetes/federation/pkg/federation-controller/replicaset" secretcontroller "k8s.io/kubernetes/federation/pkg/federation-controller/secret" servicecontroller "k8s.io/kubernetes/federation/pkg/federation-controller/service" - "k8s.io/kubernetes/federation/pkg/typeadapters" "k8s.io/kubernetes/pkg/util/configz" "k8s.io/kubernetes/pkg/version" @@ -160,7 +160,7 @@ func StartControllers(s *options.CMServer, restClientCfg *restclient.Config) err namespaceController.Run(wait.NeverStop) } - for kind, federatedType := range typeadapters.FederatedTypes() { + for kind, federatedType := range federatedtypes.FederatedTypes() { if controllerEnabled(s.Controllers, serverResources, federatedType.ControllerName, federatedType.RequiredResources, true) { // TODO the generic controller doesn't belong in the secretcontroller package secretcontroller.StartFederationSyncController(kind, federatedType.AdapterFactory, restClientCfg, stopChan, minimizeLatency) diff --git a/federation/pkg/typeadapters/BUILD b/federation/pkg/federatedtypes/BUILD similarity index 95% rename from federation/pkg/typeadapters/BUILD rename to federation/pkg/federatedtypes/BUILD index 4ec1f9ebefa..977d6384360 100644 --- a/federation/pkg/typeadapters/BUILD +++ b/federation/pkg/federatedtypes/BUILD @@ -39,7 +39,7 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", - "//federation/pkg/typeadapters/crudtester:all-srcs", + "//federation/pkg/federatedtypes/crudtester:all-srcs", ], tags = ["automanaged"], ) diff --git a/federation/pkg/typeadapters/adapter.go b/federation/pkg/federatedtypes/adapter.go similarity index 93% rename from federation/pkg/typeadapters/adapter.go rename to federation/pkg/federatedtypes/adapter.go index 41089efcf22..c3ea3b2b635 100644 --- a/federation/pkg/typeadapters/adapter.go +++ b/federation/pkg/federatedtypes/adapter.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package typeadapters +package federatedtypes import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -57,7 +57,7 @@ type FederatedTypeAdapter interface { } // AdapterFactory defines the function signature for factory methods -// that create FederatedTypeAdapters. Such methods should be -// registered with RegisterAdapterFactory to ensure the type adapter -// is discoverable. +// that create instances of FederatedTypeAdapter. Such methods should +// be registered with RegisterAdapterFactory to ensure the type +// adapter is discoverable. type AdapterFactory func(client federationclientset.Interface) FederatedTypeAdapter diff --git a/federation/pkg/typeadapters/crudtester/BUILD b/federation/pkg/federatedtypes/crudtester/BUILD similarity index 93% rename from federation/pkg/typeadapters/crudtester/BUILD rename to federation/pkg/federatedtypes/crudtester/BUILD index 403043d6005..032353aa3c3 100644 --- a/federation/pkg/typeadapters/crudtester/BUILD +++ b/federation/pkg/federatedtypes/crudtester/BUILD @@ -12,7 +12,7 @@ go_library( srcs = ["crudtester.go"], tags = ["automanaged"], deps = [ - "//federation/pkg/typeadapters:go_default_library", + "//federation/pkg/federatedtypes:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/federation/pkg/typeadapters/crudtester/crudtester.go b/federation/pkg/federatedtypes/crudtester/crudtester.go similarity index 95% rename from federation/pkg/typeadapters/crudtester/crudtester.go rename to federation/pkg/federatedtypes/crudtester/crudtester.go index 0ba8341a4ca..f8ca4ef17e6 100644 --- a/federation/pkg/typeadapters/crudtester/crudtester.go +++ b/federation/pkg/federatedtypes/crudtester/crudtester.go @@ -23,7 +23,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" pkgruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/kubernetes/federation/pkg/typeadapters" + "k8s.io/kubernetes/federation/pkg/federatedtypes" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" ) @@ -44,7 +44,7 @@ type TestLogger interface { // members of a federation. type FederatedTypeCRUDTester struct { tl TestLogger - adapter typeadapters.FederatedTypeAdapter + adapter federatedtypes.FederatedTypeAdapter kind string clusterClients []clientset.Interface waitInterval time.Duration @@ -54,7 +54,7 @@ type FederatedTypeCRUDTester struct { clusterWaitTimeout time.Duration } -func NewFederatedTypeCRUDTester(testLogger TestLogger, adapter typeadapters.FederatedTypeAdapter, clusterClients []clientset.Interface, waitInterval, clusterWaitTimeout time.Duration) *FederatedTypeCRUDTester { +func NewFederatedTypeCRUDTester(testLogger TestLogger, adapter federatedtypes.FederatedTypeAdapter, clusterClients []clientset.Interface, waitInterval, clusterWaitTimeout time.Duration) *FederatedTypeCRUDTester { return &FederatedTypeCRUDTester{ tl: testLogger, adapter: adapter, diff --git a/federation/pkg/typeadapters/registry.go b/federation/pkg/federatedtypes/registry.go similarity index 98% rename from federation/pkg/typeadapters/registry.go rename to federation/pkg/federatedtypes/registry.go index f27a0fe5a9f..720b32a8546 100644 --- a/federation/pkg/typeadapters/registry.go +++ b/federation/pkg/federatedtypes/registry.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package typeadapters +package federatedtypes import ( "fmt" diff --git a/federation/pkg/typeadapters/secret.go b/federation/pkg/federatedtypes/secret.go similarity index 99% rename from federation/pkg/typeadapters/secret.go rename to federation/pkg/federatedtypes/secret.go index 1209d5f5890..5bf1e9808c2 100644 --- a/federation/pkg/typeadapters/secret.go +++ b/federation/pkg/federatedtypes/secret.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package typeadapters +package federatedtypes import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" diff --git a/federation/pkg/federation-controller/secret/BUILD b/federation/pkg/federation-controller/secret/BUILD index d0c6656cfc7..dc7a90306d5 100644 --- a/federation/pkg/federation-controller/secret/BUILD +++ b/federation/pkg/federation-controller/secret/BUILD @@ -15,10 +15,10 @@ go_library( deps = [ "//federation/apis/federation/v1beta1:go_default_library", "//federation/client/clientset_generated/federation_clientset:go_default_library", + "//federation/pkg/federatedtypes:go_default_library", "//federation/pkg/federation-controller/util:go_default_library", "//federation/pkg/federation-controller/util/deletionhelper:go_default_library", "//federation/pkg/federation-controller/util/eventsink:go_default_library", - "//federation/pkg/typeadapters:go_default_library", "//pkg/api:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/controller:go_default_library", @@ -44,10 +44,10 @@ go_test( deps = [ "//federation/apis/federation/v1beta1:go_default_library", "//federation/client/clientset_generated/federation_clientset/fake:go_default_library", + "//federation/pkg/federatedtypes:go_default_library", "//federation/pkg/federation-controller/util:go_default_library", "//federation/pkg/federation-controller/util/deletionhelper:go_default_library", "//federation/pkg/federation-controller/util/test:go_default_library", - "//federation/pkg/typeadapters:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/clientset_generated/clientset/fake:go_default_library", diff --git a/federation/pkg/federation-controller/secret/secret_controller.go b/federation/pkg/federation-controller/secret/secret_controller.go index 428f7cbe83c..cec765f4281 100644 --- a/federation/pkg/federation-controller/secret/secret_controller.go +++ b/federation/pkg/federation-controller/secret/secret_controller.go @@ -33,10 +33,10 @@ import ( "k8s.io/client-go/util/flowcontrol" federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" + "k8s.io/kubernetes/federation/pkg/federatedtypes" "k8s.io/kubernetes/federation/pkg/federation-controller/util" "k8s.io/kubernetes/federation/pkg/federation-controller/util/deletionhelper" "k8s.io/kubernetes/federation/pkg/federation-controller/util/eventsink" - "k8s.io/kubernetes/federation/pkg/typeadapters" "k8s.io/kubernetes/pkg/api" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/controller" @@ -83,11 +83,11 @@ type FederationSyncController struct { smallDelay time.Duration updateTimeout time.Duration - adapter typeadapters.FederatedTypeAdapter + adapter federatedtypes.FederatedTypeAdapter } // StartFederationSyncController starts a new sync controller for a type adapter -func StartFederationSyncController(kind string, adapterFactory typeadapters.AdapterFactory, config *restclient.Config, stopChan <-chan struct{}, minimizeLatency bool) { +func StartFederationSyncController(kind string, adapterFactory federatedtypes.AdapterFactory, config *restclient.Config, stopChan <-chan struct{}, minimizeLatency bool) { restclient.AddUserAgent(config, fmt.Sprintf("%s-controller", kind)) client := federationclientset.NewForConfigOrDie(config) adapter := adapterFactory(client) @@ -100,7 +100,7 @@ func StartFederationSyncController(kind string, adapterFactory typeadapters.Adap } // newFederationSyncController returns a new sync controller for the given client and type adapter -func newFederationSyncController(client federationclientset.Interface, adapter typeadapters.FederatedTypeAdapter) *FederationSyncController { +func newFederationSyncController(client federationclientset.Interface, adapter federatedtypes.FederatedTypeAdapter) *FederationSyncController { broadcaster := record.NewBroadcaster() broadcaster.StartRecordingToSink(eventsink.NewFederatedEventSink(client)) recorder := broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: fmt.Sprintf("federated-%v-controller", adapter.Kind())}) diff --git a/federation/pkg/federation-controller/secret/secret_controller_test.go b/federation/pkg/federation-controller/secret/secret_controller_test.go index 6177d037fd8..ff70f224d88 100644 --- a/federation/pkg/federation-controller/secret/secret_controller_test.go +++ b/federation/pkg/federation-controller/secret/secret_controller_test.go @@ -28,10 +28,10 @@ import ( "k8s.io/apimachinery/pkg/util/wait" federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1" fakefedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset/fake" + "k8s.io/kubernetes/federation/pkg/federatedtypes" "k8s.io/kubernetes/federation/pkg/federation-controller/util" "k8s.io/kubernetes/federation/pkg/federation-controller/util/deletionhelper" . "k8s.io/kubernetes/federation/pkg/federation-controller/util/test" - "k8s.io/kubernetes/federation/pkg/typeadapters" apiv1 "k8s.io/kubernetes/pkg/api/v1" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" fakekubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/fake" @@ -67,7 +67,7 @@ func TestSecretController(t *testing.T) { RegisterFakeList(secrets, &cluster2Client.Fake, &apiv1.SecretList{Items: []apiv1.Secret{}}) cluster2CreateChan := RegisterFakeCopyOnCreate(secrets, &cluster2Client.Fake, cluster2Watch) - secretController := newFederationSyncController(fakeClient, typeadapters.NewSecretAdapter(fakeClient)) + secretController := newFederationSyncController(fakeClient, federatedtypes.NewSecretAdapter(fakeClient)) informerClientFactory := func(cluster *federationapi.Cluster) (kubeclientset.Interface, error) { switch cluster.Name { case cluster1.Name: diff --git a/test/integration/federation/BUILD b/test/integration/federation/BUILD index a4a47992a91..a989983eb1c 100644 --- a/test/integration/federation/BUILD +++ b/test/integration/federation/BUILD @@ -16,7 +16,7 @@ go_test( tags = ["automanaged"], deps = [ "//federation/apis/federation/v1beta1:go_default_library", - "//federation/pkg/typeadapters:go_default_library", + "//federation/pkg/federatedtypes:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/apis/autoscaling/v1:go_default_library", "//pkg/apis/batch/v1:go_default_library", diff --git a/test/integration/federation/crud_test.go b/test/integration/federation/crud_test.go index 33c61693409..58cf44da0e7 100644 --- a/test/integration/federation/crud_test.go +++ b/test/integration/federation/crud_test.go @@ -22,7 +22,7 @@ import ( "github.com/pborman/uuid" - "k8s.io/kubernetes/federation/pkg/typeadapters" + "k8s.io/kubernetes/federation/pkg/federatedtypes" "k8s.io/kubernetes/test/integration/federation/framework" ) @@ -32,7 +32,7 @@ func TestFederationCRUD(t *testing.T) { fedFixture.SetUp(t) defer fedFixture.TearDown(t) - federatedTypes := typeadapters.FederatedTypes() + federatedTypes := federatedtypes.FederatedTypes() for kind, fedType := range federatedTypes { t.Run(kind, func(t *testing.T) { config := fedFixture.APIFixture.NewConfig() @@ -55,8 +55,8 @@ func TestFederationCRUD(t *testing.T) { "Resources should not be deleted from underlying clusters when OrphanDependents is true": &orphanedDependents, "Resources should not be deleted from underlying clusters when OrphanDependents is nil": nil, } - kind := typeadapters.SecretKind - adapterFactory := typeadapters.NewSecretAdapter + kind := federatedtypes.SecretKind + adapterFactory := federatedtypes.NewSecretAdapter for testName, orphanDependents := range testCases { t.Run(testName, func(t *testing.T) { config := fedFixture.APIFixture.NewConfig() diff --git a/test/integration/federation/framework/BUILD b/test/integration/federation/framework/BUILD index 6f05a241c0a..b6414bd873e 100644 --- a/test/integration/federation/framework/BUILD +++ b/test/integration/federation/framework/BUILD @@ -22,10 +22,10 @@ go_library( "//federation/client/clientset_generated/federation_clientset:go_default_library", "//federation/cmd/federation-apiserver/app:go_default_library", "//federation/cmd/federation-apiserver/app/options:go_default_library", + "//federation/pkg/federatedtypes:go_default_library", + "//federation/pkg/federatedtypes/crudtester:go_default_library", "//federation/pkg/federation-controller/cluster:go_default_library", "//federation/pkg/federation-controller/secret:go_default_library", - "//federation/pkg/typeadapters:go_default_library", - "//federation/pkg/typeadapters/crudtester:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/master:go_default_library", "//test/integration/framework:go_default_library", diff --git a/test/integration/federation/framework/controller.go b/test/integration/federation/framework/controller.go index 817f695585d..c2a08873db6 100644 --- a/test/integration/federation/framework/controller.go +++ b/test/integration/federation/framework/controller.go @@ -20,8 +20,8 @@ import ( "testing" restclient "k8s.io/client-go/rest" + "k8s.io/kubernetes/federation/pkg/federatedtypes" secretcontroller "k8s.io/kubernetes/federation/pkg/federation-controller/secret" - "k8s.io/kubernetes/federation/pkg/typeadapters" ) // ControllerFixture manages a federation controller for testing. @@ -30,7 +30,7 @@ type ControllerFixture struct { } // NewControllerFixture initializes a new controller fixture -func NewControllerFixture(t *testing.T, kind string, adapterFactory typeadapters.AdapterFactory, config *restclient.Config) *ControllerFixture { +func NewControllerFixture(t *testing.T, kind string, adapterFactory federatedtypes.AdapterFactory, config *restclient.Config) *ControllerFixture { f := &ControllerFixture{ stopChan: make(chan struct{}), } diff --git a/test/integration/federation/framework/crudtester.go b/test/integration/federation/framework/crudtester.go index e90ae722fb2..4e5d988b35f 100644 --- a/test/integration/federation/framework/crudtester.go +++ b/test/integration/federation/framework/crudtester.go @@ -20,8 +20,8 @@ import ( "testing" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/kubernetes/federation/pkg/typeadapters" - "k8s.io/kubernetes/federation/pkg/typeadapters/crudtester" + "k8s.io/kubernetes/federation/pkg/federatedtypes" + "k8s.io/kubernetes/federation/pkg/federatedtypes/crudtester" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" ) @@ -41,7 +41,7 @@ func (l *IntegrationLogger) Fatal(msg string) { l.t.Fatal(msg) } -func NewFederatedTypeCRUDTester(t *testing.T, adapter typeadapters.FederatedTypeAdapter, clusterClients []clientset.Interface) *crudtester.FederatedTypeCRUDTester { +func NewFederatedTypeCRUDTester(t *testing.T, adapter federatedtypes.FederatedTypeAdapter, clusterClients []clientset.Interface) *crudtester.FederatedTypeCRUDTester { logger := &IntegrationLogger{t} return crudtester.NewFederatedTypeCRUDTester(logger, adapter, clusterClients, DefaultWaitInterval, wait.ForeverTestTimeout) }