From 7e772ee3eb6ca6670cdb2a6001d812880f2b30ef Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Wed, 21 Jun 2017 19:43:59 -0700 Subject: [PATCH] fed: Provide client config to adapter factory This will allow the namespace adapter to initialize a namespaced resource deleter. --- federation/pkg/federatedtypes/BUILD | 2 +- federation/pkg/federatedtypes/adapter.go | 3 ++- federation/pkg/federatedtypes/configmap.go | 3 ++- federation/pkg/federatedtypes/daemonset.go | 3 ++- federation/pkg/federatedtypes/deployment.go | 24 +++++++++---------- federation/pkg/federatedtypes/replicaset.go | 3 ++- federation/pkg/federatedtypes/secret.go | 3 ++- .../federation-controller/sync/controller.go | 2 +- test/e2e_federation/crud.go | 2 +- test/e2e_federation/framework/framework.go | 13 +++++++++- test/e2e_federation/framework/util.go | 9 ++----- test/e2e_federation/upgrades/simple.go | 2 +- test/integration/federation/crud_test.go | 2 +- 13 files changed, 41 insertions(+), 30 deletions(-) diff --git a/federation/pkg/federatedtypes/BUILD b/federation/pkg/federatedtypes/BUILD index 4615fc2546e..5d3eacf93d4 100644 --- a/federation/pkg/federatedtypes/BUILD +++ b/federation/pkg/federatedtypes/BUILD @@ -38,8 +38,8 @@ go_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/rest:go_default_library", ], ) diff --git a/federation/pkg/federatedtypes/adapter.go b/federation/pkg/federatedtypes/adapter.go index 9f0920c8205..2e59bb90603 100644 --- a/federation/pkg/federatedtypes/adapter.go +++ b/federation/pkg/federatedtypes/adapter.go @@ -20,6 +20,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" pkgruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" + restclient "k8s.io/client-go/rest" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" ) @@ -61,7 +62,7 @@ type FederatedTypeAdapter interface { // 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 +type AdapterFactory func(client federationclientset.Interface, config *restclient.Config) FederatedTypeAdapter // SetAnnotation sets the given key and value in the given object's ObjectMeta.Annotations map func SetAnnotation(adapter FederatedTypeAdapter, obj pkgruntime.Object, key, value string) { diff --git a/federation/pkg/federatedtypes/configmap.go b/federation/pkg/federatedtypes/configmap.go index 3cd1ea7152b..bc2c2ac3eff 100644 --- a/federation/pkg/federatedtypes/configmap.go +++ b/federation/pkg/federatedtypes/configmap.go @@ -22,6 +22,7 @@ import ( pkgruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" + restclient "k8s.io/client-go/rest" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" "k8s.io/kubernetes/federation/pkg/federation-controller/util" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" @@ -40,7 +41,7 @@ type ConfigMapAdapter struct { client federationclientset.Interface } -func NewConfigMapAdapter(client federationclientset.Interface) FederatedTypeAdapter { +func NewConfigMapAdapter(client federationclientset.Interface, config *restclient.Config) FederatedTypeAdapter { return &ConfigMapAdapter{client: client} } diff --git a/federation/pkg/federatedtypes/daemonset.go b/federation/pkg/federatedtypes/daemonset.go index 8e9d6dc4f6d..6216141f623 100644 --- a/federation/pkg/federatedtypes/daemonset.go +++ b/federation/pkg/federatedtypes/daemonset.go @@ -25,6 +25,7 @@ import ( pkgruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" + restclient "k8s.io/client-go/rest" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" "k8s.io/kubernetes/federation/pkg/federation-controller/util" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" @@ -43,7 +44,7 @@ type DaemonSetAdapter struct { client federationclientset.Interface } -func NewDaemonSetAdapter(client federationclientset.Interface) FederatedTypeAdapter { +func NewDaemonSetAdapter(client federationclientset.Interface, config *restclient.Config) FederatedTypeAdapter { return &DaemonSetAdapter{client: client} } diff --git a/federation/pkg/federatedtypes/deployment.go b/federation/pkg/federatedtypes/deployment.go index 72a007126ae..cea19239210 100644 --- a/federation/pkg/federatedtypes/deployment.go +++ b/federation/pkg/federatedtypes/deployment.go @@ -22,8 +22,8 @@ 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" + restclient "k8s.io/client-go/rest" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" fedutil "k8s.io/kubernetes/federation/pkg/federation-controller/util" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" @@ -44,7 +44,7 @@ type DeploymentAdapter struct { client federationclientset.Interface } -func NewDeploymentAdapter(client federationclientset.Interface) FederatedTypeAdapter { +func NewDeploymentAdapter(client federationclientset.Interface, config *restclient.Config) FederatedTypeAdapter { schedulingAdapter := schedulingAdapter{ preferencesAnnotationName: FedDeploymentPreferencesAnnotation, updateStatusFunc: func(obj pkgruntime.Object, status SchedulingStatus) error { @@ -91,9 +91,9 @@ func (a *DeploymentAdapter) Equivalent(obj1, obj2 pkgruntime.Object) bool { return fedutil.DeploymentEquivalent(deployment1, deployment2) } -func (a *DeploymentAdapter) NamespacedName(obj pkgruntime.Object) types.NamespacedName { +func (a *DeploymentAdapter) QualifiedName(obj pkgruntime.Object) QualifiedName { deployment := obj.(*extensionsv1.Deployment) - return types.NamespacedName{Namespace: deployment.Namespace, Name: deployment.Name} + return QualifiedName{Namespace: deployment.Namespace, Name: deployment.Name} } func (a *DeploymentAdapter) ObjectMeta(obj pkgruntime.Object) *metav1.ObjectMeta { @@ -105,12 +105,12 @@ func (a *DeploymentAdapter) FedCreate(obj pkgruntime.Object) (pkgruntime.Object, return a.client.Extensions().Deployments(deployment.Namespace).Create(deployment) } -func (a *DeploymentAdapter) FedDelete(namespacedName types.NamespacedName, options *metav1.DeleteOptions) error { - return a.client.Extensions().Deployments(namespacedName.Namespace).Delete(namespacedName.Name, options) +func (a *DeploymentAdapter) FedDelete(qualifiedName QualifiedName, options *metav1.DeleteOptions) error { + return a.client.Extensions().Deployments(qualifiedName.Namespace).Delete(qualifiedName.Name, options) } -func (a *DeploymentAdapter) FedGet(namespacedName types.NamespacedName) (pkgruntime.Object, error) { - return a.client.Extensions().Deployments(namespacedName.Namespace).Get(namespacedName.Name, metav1.GetOptions{}) +func (a *DeploymentAdapter) FedGet(qualifiedName QualifiedName) (pkgruntime.Object, error) { + return a.client.Extensions().Deployments(qualifiedName.Namespace).Get(qualifiedName.Name, metav1.GetOptions{}) } func (a *DeploymentAdapter) FedList(namespace string, options metav1.ListOptions) (pkgruntime.Object, error) { @@ -131,12 +131,12 @@ func (a *DeploymentAdapter) ClusterCreate(client kubeclientset.Interface, obj pk return client.Extensions().Deployments(deployment.Namespace).Create(deployment) } -func (a *DeploymentAdapter) ClusterDelete(client kubeclientset.Interface, nsName types.NamespacedName, options *metav1.DeleteOptions) error { - return client.Extensions().Deployments(nsName.Namespace).Delete(nsName.Name, options) +func (a *DeploymentAdapter) ClusterDelete(client kubeclientset.Interface, qualifiedName QualifiedName, options *metav1.DeleteOptions) error { + return client.Extensions().Deployments(qualifiedName.Namespace).Delete(qualifiedName.Name, options) } -func (a *DeploymentAdapter) ClusterGet(client kubeclientset.Interface, namespacedName types.NamespacedName) (pkgruntime.Object, error) { - return client.Extensions().Deployments(namespacedName.Namespace).Get(namespacedName.Name, metav1.GetOptions{}) +func (a *DeploymentAdapter) ClusterGet(client kubeclientset.Interface, qualifiedName QualifiedName) (pkgruntime.Object, error) { + return client.Extensions().Deployments(qualifiedName.Namespace).Get(qualifiedName.Name, metav1.GetOptions{}) } func (a *DeploymentAdapter) ClusterList(client kubeclientset.Interface, namespace string, options metav1.ListOptions) (pkgruntime.Object, error) { diff --git a/federation/pkg/federatedtypes/replicaset.go b/federation/pkg/federatedtypes/replicaset.go index 5157b2f1cff..6f0b3a909ab 100644 --- a/federation/pkg/federatedtypes/replicaset.go +++ b/federation/pkg/federatedtypes/replicaset.go @@ -23,6 +23,7 @@ import ( pkgruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" + restclient "k8s.io/client-go/rest" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" fedutil "k8s.io/kubernetes/federation/pkg/federation-controller/util" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" @@ -43,7 +44,7 @@ type ReplicaSetAdapter struct { client federationclientset.Interface } -func NewReplicaSetAdapter(client federationclientset.Interface) FederatedTypeAdapter { +func NewReplicaSetAdapter(client federationclientset.Interface, config *restclient.Config) FederatedTypeAdapter { schedulingAdapter := schedulingAdapter{ preferencesAnnotationName: FedReplicaSetPreferencesAnnotation, updateStatusFunc: func(obj pkgruntime.Object, status SchedulingStatus) error { diff --git a/federation/pkg/federatedtypes/secret.go b/federation/pkg/federatedtypes/secret.go index e94cfa54348..9208c96e293 100644 --- a/federation/pkg/federatedtypes/secret.go +++ b/federation/pkg/federatedtypes/secret.go @@ -22,6 +22,7 @@ import ( pkgruntime "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/watch" + restclient "k8s.io/client-go/rest" federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" "k8s.io/kubernetes/federation/pkg/federation-controller/util" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" @@ -40,7 +41,7 @@ type SecretAdapter struct { client federationclientset.Interface } -func NewSecretAdapter(client federationclientset.Interface) FederatedTypeAdapter { +func NewSecretAdapter(client federationclientset.Interface, config *restclient.Config) FederatedTypeAdapter { return &SecretAdapter{client: client} } diff --git a/federation/pkg/federation-controller/sync/controller.go b/federation/pkg/federation-controller/sync/controller.go index 921d754059f..9b7b3ca66b8 100644 --- a/federation/pkg/federation-controller/sync/controller.go +++ b/federation/pkg/federation-controller/sync/controller.go @@ -96,7 +96,7 @@ type FederationSyncController struct { func StartFederationSyncController(kind string, adapterFactory federatedtypes.AdapterFactory, config *restclient.Config, stopChan <-chan struct{}, minimizeLatency bool) { restclient.AddUserAgent(config, fmt.Sprintf("federation-%s-controller", kind)) client := federationclientset.NewForConfigOrDie(config) - adapter := adapterFactory(client) + adapter := adapterFactory(client, config) controller := newFederationSyncController(client, adapter) if minimizeLatency { controller.minimizeLatency() diff --git a/test/e2e_federation/crud.go b/test/e2e_federation/crud.go index 7536f0c2948..a4960d1877b 100644 --- a/test/e2e_federation/crud.go +++ b/test/e2e_federation/crud.go @@ -45,7 +45,7 @@ var _ = framework.KubeDescribe("Federated types [Feature:Federation][Experimenta if clusterClients == nil { clusterClients = f.GetClusterClients() } - adapter := fedType.AdapterFactory(f.FederationClientset) + adapter := fedType.AdapterFactory(f.FederationClientset, f.FederationConfig) crudTester := fedframework.NewFederatedTypeCRUDTester(adapter, clusterClients) obj := adapter.NewTestObject(f.FederationNamespace.Name) crudTester.CheckLifecycle(obj) diff --git a/test/e2e_federation/framework/framework.go b/test/e2e_federation/framework/framework.go index 04c12c18c9e..35f8fd22eb1 100644 --- a/test/e2e_federation/framework/framework.go +++ b/test/e2e_federation/framework/framework.go @@ -26,6 +26,8 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" + restclient "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/test/e2e/framework" @@ -44,7 +46,10 @@ type Framework struct { // should abort, the AfterSuite hook should run all Cleanup actions. cleanupHandle framework.CleanupActionHandle + FederationConfig *restclient.Config + FederationClientset *federation_clientset.Clientset + FederationNamespace *v1.Namespace } @@ -73,10 +78,16 @@ func (f *Framework) FederationBeforeEach() { // https://github.com/onsi/ginkgo/issues/222 f.cleanupHandle = framework.AddCleanupAction(f.FederationAfterEach) + if f.FederationConfig == nil { + By("Reading the federation configuration") + var err error + f.FederationConfig, err = LoadFederatedConfig(&clientcmd.ConfigOverrides{}) + Expect(err).NotTo(HaveOccurred()) + } if f.FederationClientset == nil { By("Creating a release 1.5 federation Clientset") var err error - f.FederationClientset, err = LoadFederationClientset() + f.FederationClientset, err = LoadFederationClientset(f.FederationConfig) Expect(err).NotTo(HaveOccurred()) } By("Waiting for federation-apiserver to be ready") diff --git a/test/e2e_federation/framework/util.go b/test/e2e_federation/framework/util.go index 0d9b1673867..fbf0b708c1f 100644 --- a/test/e2e_federation/framework/util.go +++ b/test/e2e_federation/framework/util.go @@ -65,12 +65,7 @@ func WaitForFederationApiserverReady(c *federation_clientset.Clientset) error { }) } -func LoadFederationClientset() (*federation_clientset.Clientset, error) { - config, err := LoadFederatedConfig(&clientcmd.ConfigOverrides{}) - if err != nil { - return nil, err - } - +func LoadFederationClientset(config *restclient.Config) (*federation_clientset.Clientset, error) { c, err := federation_clientset.NewForConfig(config) if err != nil { return nil, fmt.Errorf("error creating federation clientset: %v", err.Error()) @@ -83,7 +78,7 @@ func LoadFederatedConfig(overrides *clientcmd.ConfigOverrides) (*restclient.Conf if err != nil { return nil, fmt.Errorf("error creating federation client config: %v", err.Error()) } - cfg, err := clientcmd.NewDefaultClientConfig(*c, overrides).ClientConfig() + cfg, err := clientcmd.NewDefaultClientConfig(*c, &clientcmd.ConfigOverrides{}).ClientConfig() if cfg != nil { //TODO(colhom): this is only here because https://github.com/kubernetes/kubernetes/issues/25422 cfg.NegotiatedSerializer = api.Codecs diff --git a/test/e2e_federation/upgrades/simple.go b/test/e2e_federation/upgrades/simple.go index 8d51c59abe8..75854ed297d 100644 --- a/test/e2e_federation/upgrades/simple.go +++ b/test/e2e_federation/upgrades/simple.go @@ -38,7 +38,7 @@ type SimpleUpgradeTest struct { // Setup creates a resource and validates its propagation to member clusters func (ut *SimpleUpgradeTest) Setup(f *fedframework.Framework) { - adapter := ut.adapterFactory(f.FederationClientset) + adapter := ut.adapterFactory(f.FederationClientset, f.FederationConfig) clients := f.GetClusterClients() ut.crudTester = fedframework.NewFederatedTypeCRUDTester(adapter, clients) diff --git a/test/integration/federation/crud_test.go b/test/integration/federation/crud_test.go index e6d4e54387f..703eac9dd85 100644 --- a/test/integration/federation/crud_test.go +++ b/test/integration/federation/crud_test.go @@ -104,7 +104,7 @@ func initCRUDTest(t *testing.T, fedFixture *framework.FederationFixture, adapter fixture := framework.NewControllerFixture(t, kind, adapterFactory, config) client := fedFixture.APIFixture.NewClient(fmt.Sprintf("crud-test-%s", kind)) - adapter := adapterFactory(client) + adapter := adapterFactory(client, config) crudTester := framework.NewFederatedTypeCRUDTester(t, adapter, fedFixture.ClusterClients)