Merge pull request #30397 from madhusudancs/fed-e2e-switch-release_1_4-client

Automatic merge from submit-queue

Remove unversioned federation client, clientset and versioned release_1_3 clientset and all their accesses in e2e tests. Switch everything to federation release_1_4 external client.

cc @kubernetes/sig-cluster-federation

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.kubernetes.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.kubernetes.io/reviews/kubernetes/kubernetes/30397)
<!-- Reviewable:end -->
This commit is contained in:
Kubernetes Submit Queue 2016-08-11 17:41:43 -07:00 committed by GitHub
commit 53331f7a60
5 changed files with 44 additions and 115 deletions

View File

@ -23,8 +23,8 @@ import (
"strconv"
"time"
"k8s.io/kubernetes/federation/apis/federation"
"k8s.io/kubernetes/federation/client/clientset_generated/federation_release_1_3"
federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1"
"k8s.io/kubernetes/federation/client/clientset_generated/federation_release_1_4"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/errors"
"k8s.io/kubernetes/pkg/api/v1"
@ -94,11 +94,11 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
createClusterObjectOrFail(f, &context)
}
var clusterList *federation.ClusterList
var clusterList *federationapi.ClusterList
By("Obtaining a list of all the clusters")
if err := wait.PollImmediate(framework.Poll, FederatedServiceTimeout, func() (bool, error) {
var err error
clusterList, err = f.FederationClientset.Federation().Clusters().List(api.ListOptions{})
clusterList, err = f.FederationClientset_1_4.Federation().Clusters().List(api.ListOptions{})
if err != nil {
return false, err
}
@ -174,10 +174,10 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
}
// Delete the registered clusters in the federation API server.
clusterList, err := f.FederationClientset.Federation().Clusters().List(api.ListOptions{})
clusterList, err := f.FederationClientset_1_4.Federation().Clusters().List(api.ListOptions{})
framework.ExpectNoError(err, "Error listing clusters")
for _, cluster := range clusterList.Items {
err := f.FederationClientset.Federation().Clusters().Delete(cluster.Name, &api.DeleteOptions{})
err := f.FederationClientset_1_4.Federation().Clusters().Delete(cluster.Name, &api.DeleteOptions{})
framework.ExpectNoError(err, "Error deleting cluster %q", cluster.Name)
}
})
@ -195,20 +195,20 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
It("should succeed", func() {
framework.SkipUnlessFederated(f.Client)
service := createServiceOrFail(f.FederationClientset_1_3, f.Namespace.Name)
service := createServiceOrFail(f.FederationClientset_1_4, f.Namespace.Name)
By(fmt.Sprintf("Creation of service %q in namespace %q succeeded. Deleting service.", service.Name, f.Namespace.Name))
// Cleanup
err := f.FederationClientset_1_3.Services(f.Namespace.Name).Delete(service.Name, &api.DeleteOptions{})
err := f.FederationClientset_1_4.Services(f.Namespace.Name).Delete(service.Name, &api.DeleteOptions{})
framework.ExpectNoError(err, "Error deleting service %q in namespace %q", service.Name, service.Namespace)
By(fmt.Sprintf("Deletion of service %q in namespace %q succeeded.", service.Name, f.Namespace.Name))
})
It("should create matching services in underlying clusters", func() {
framework.SkipUnlessFederated(f.Client)
service := createServiceOrFail(f.FederationClientset_1_3, f.Namespace.Name)
service := createServiceOrFail(f.FederationClientset_1_4, f.Namespace.Name)
defer func() { // Cleanup
By(fmt.Sprintf("Deleting service %q in namespace %q", service.Name, f.Namespace.Name))
err := f.FederationClientset_1_3.Services(f.Namespace.Name).Delete(service.Name, &api.DeleteOptions{})
err := f.FederationClientset_1_4.Services(f.Namespace.Name).Delete(service.Name, &api.DeleteOptions{})
framework.ExpectNoError(err, "Error deleting service %q in namespace %q", service.Name, f.Namespace.Name)
}()
waitForServiceShardsOrFail(f.Namespace.Name, service, clusters)
@ -224,7 +224,7 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
BeforeEach(func() {
framework.SkipUnlessFederated(f.Client)
createBackendPodsOrFail(clusters, f.Namespace.Name, FederatedServicePodName)
service = createServiceOrFail(f.FederationClientset_1_3, f.Namespace.Name)
service = createServiceOrFail(f.FederationClientset_1_4, f.Namespace.Name)
waitForServiceShardsOrFail(f.Namespace.Name, service, clusters)
})
@ -233,7 +233,7 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
deleteBackendPodsOrFail(clusters, f.Namespace.Name)
if service != nil {
deleteServiceOrFail(f.FederationClientset_1_3, f.Namespace.Name, service.Name)
deleteServiceOrFail(f.FederationClientset_1_4, f.Namespace.Name, service.Name)
service = nil
} else {
By("No service to delete. Service is nil")
@ -356,9 +356,9 @@ func waitForServiceShardsOrFail(namespace string, service *v1.Service, clusters
}
}
func createServiceOrFail(clientset *federation_release_1_3.Clientset, namespace string) *v1.Service {
func createService(clientset *federation_release_1_4.Clientset, namespace string) (*v1.Service, error) {
if clientset == nil || len(namespace) == 0 {
Fail(fmt.Sprintf("Internal error: invalid parameters passed to deleteServiceOrFail: clientset: %v, namespace: %v", clientset, namespace))
return nil, fmt.Errorf("Internal error: invalid parameters passed to deleteServiceOrFail: clientset: %v, namespace: %v", clientset, namespace)
}
By(fmt.Sprintf("Creating federated service %q in namespace %q", FederatedServiceName, namespace))
@ -379,13 +379,17 @@ func createServiceOrFail(clientset *federation_release_1_3.Clientset, namespace
},
}
By(fmt.Sprintf("Trying to create service %q in namespace %q", service.Name, namespace))
_, err := clientset.Services(namespace).Create(service)
return clientset.Services(namespace).Create(service)
}
func createServiceOrFail(clientset *federation_release_1_4.Clientset, namespace string) *v1.Service {
service, err := createService(clientset, namespace)
framework.ExpectNoError(err, "Creating service %q in namespace %q", service.Name, namespace)
By(fmt.Sprintf("Successfully created federated service %q in namespace %q", FederatedServiceName, namespace))
return service
}
func deleteServiceOrFail(clientset *federation_release_1_3.Clientset, namespace string, serviceName string) {
func deleteServiceOrFail(clientset *federation_release_1_4.Clientset, namespace string, serviceName string) {
if clientset == nil || len(namespace) == 0 || len(serviceName) == 0 {
Fail(fmt.Sprintf("Internal error: invalid parameters passed to deleteServiceOrFail: clientset: %v, namespace: %v, service: %v", clientset, namespace, serviceName))
}

View File

@ -21,9 +21,10 @@ import (
"time"
. "github.com/onsi/ginkgo"
federationapi "k8s.io/kubernetes/federation/apis/federation"
"k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset"
federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1"
"k8s.io/kubernetes/federation/client/clientset_generated/federation_release_1_4"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/util/wait"
"k8s.io/kubernetes/test/e2e/framework"
@ -40,10 +41,10 @@ var _ = framework.KubeDescribe("Federation apiserver [Feature:Federation]", func
// Delete registered clusters.
// This is if a test failed, it should not affect other tests.
clusterList, err := f.FederationClientset.Federation().Clusters().List(api.ListOptions{})
clusterList, err := f.FederationClientset_1_4.Federation().Clusters().List(api.ListOptions{})
Expect(err).NotTo(HaveOccurred())
for _, cluster := range clusterList.Items {
err := f.FederationClientset.Federation().Clusters().Delete(cluster.Name, &api.DeleteOptions{})
err := f.FederationClientset_1_4.Federation().Clusters().Delete(cluster.Name, &api.DeleteOptions{})
Expect(err).NotTo(HaveOccurred())
}
})
@ -68,14 +69,14 @@ var _ = framework.KubeDescribe("Federation apiserver [Feature:Federation]", func
framework.Logf("Deleting %d clusters", len(contexts))
for _, context := range contexts {
framework.Logf("Deleting cluster object: %s (%s, secret: %s)", context.Name, context.Cluster.Cluster.Server, context.Name)
err := f.FederationClientset.Federation().Clusters().Delete(context.Name, &api.DeleteOptions{})
err := f.FederationClientset_1_4.Federation().Clusters().Delete(context.Name, &api.DeleteOptions{})
framework.ExpectNoError(err, fmt.Sprintf("unexpected error in deleting cluster %s: %+v", context.Name, err))
framework.Logf("Successfully deleted cluster object: %s (%s, secret: %s)", context.Name, context.Cluster.Cluster.Server, context.Name)
}
// There should not be any remaining cluster.
framework.Logf("Verifying that zero clusters remain")
clusterList, err := f.FederationClientset.Federation().Clusters().List(api.ListOptions{})
clusterList, err := f.FederationClientset_1_4.Federation().Clusters().List(api.ListOptions{})
Expect(err).NotTo(HaveOccurred())
if len(clusterList.Items) != 0 {
framework.Failf("there should not have been any remaining clusters. Found: %+v", clusterList)
@ -86,14 +87,14 @@ var _ = framework.KubeDescribe("Federation apiserver [Feature:Federation]", func
})
// Verify that the cluster is marked ready.
func isReady(clusterName string, clientset *federation_internalclientset.Clientset) error {
func isReady(clusterName string, clientset *federation_release_1_4.Clientset) error {
return wait.PollImmediate(time.Second, 5*time.Minute, func() (bool, error) {
c, err := clientset.Federation().Clusters().Get(clusterName)
if err != nil {
return false, err
}
for _, condition := range c.Status.Conditions {
if condition.Type == federationapi.ClusterReady && condition.Status == api.ConditionTrue {
if condition.Type == federationapi.ClusterReady && condition.Status == v1.ConditionTrue {
return true, nil
}
}

View File

@ -19,15 +19,15 @@ package e2e
import (
"fmt"
federationapi "k8s.io/kubernetes/federation/apis/federation"
"k8s.io/kubernetes/pkg/api"
federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/test/e2e/framework"
)
func createClusterObjectOrFail(f *framework.Framework, context *framework.E2EContext) {
framework.Logf("Creating cluster object: %s (%s, secret: %s)", context.Name, context.Cluster.Cluster.Server, context.Name)
cluster := federationapi.Cluster{
ObjectMeta: api.ObjectMeta{
ObjectMeta: v1.ObjectMeta{
Name: context.Name,
},
Spec: federationapi.ClusterSpec{
@ -37,7 +37,7 @@ func createClusterObjectOrFail(f *framework.Framework, context *framework.E2ECon
ServerAddress: context.Cluster.Cluster.Server,
},
},
SecretRef: &api.LocalObjectReference{
SecretRef: &v1.LocalObjectReference{
// Note: Name must correlate with federation build script secret name,
// which currently matches the cluster name.
// See federation/cluster/common.sh:132
@ -45,18 +45,18 @@ func createClusterObjectOrFail(f *framework.Framework, context *framework.E2ECon
},
},
}
_, err := f.FederationClientset.Federation().Clusters().Create(&cluster)
_, err := f.FederationClientset_1_4.Federation().Clusters().Create(&cluster)
framework.ExpectNoError(err, fmt.Sprintf("creating cluster: %+v", err))
framework.Logf("Successfully created cluster object: %s (%s, secret: %s)", context.Name, context.Cluster.Cluster.Server, context.Name)
}
func clusterIsReadyOrFail(f *framework.Framework, context *framework.E2EContext) {
c, err := f.FederationClientset.Federation().Clusters().Get(context.Name)
c, err := f.FederationClientset_1_4.Federation().Clusters().Get(context.Name)
framework.ExpectNoError(err, fmt.Sprintf("get cluster: %+v", err))
if c.ObjectMeta.Name != context.Name {
framework.Failf("cluster name does not match input context: actual=%+v, expected=%+v", c, context)
}
err = isReady(context.Name, f.FederationClientset)
err = isReady(context.Name, f.FederationClientset_1_4)
framework.ExpectNoError(err, fmt.Sprintf("unexpected error in verifying if cluster %s is ready: %+v", context.Name, err))
framework.Logf("Cluster %s is Ready", context.Name)
}

View File

@ -29,9 +29,6 @@ import (
release_1_4 "k8s.io/client-go/1.4/kubernetes"
"k8s.io/client-go/1.4/pkg/util/sets"
clientreporestclient "k8s.io/client-go/1.4/rest"
"k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset"
unversionedfederation "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned"
"k8s.io/kubernetes/federation/client/clientset_generated/federation_release_1_3"
"k8s.io/kubernetes/federation/client/clientset_generated/federation_release_1_4"
"k8s.io/kubernetes/pkg/api"
apierrs "k8s.io/kubernetes/pkg/api/errors"
@ -64,12 +61,7 @@ type Framework struct {
Clientset_1_3 *release_1_3.Clientset
StagingClient *release_1_4.Clientset
// TODO(mml): Remove this. We should generally use the versioned clientset.
FederationClientset *federation_internalclientset.Clientset
FederationClientset_1_3 *federation_release_1_3.Clientset
FederationClientset_1_4 *federation_release_1_4.Clientset
// TODO: remove FederationClient, all the client access must be through FederationClientset
FederationClient *unversionedfederation.FederationClient
Namespace *api.Namespace // Every test has at least one namespace
namespacesToDelete []*api.Namespace // Some tests have more than one.
@ -195,22 +187,10 @@ func (f *Framework) BeforeEach() {
}
if f.federated {
if f.FederationClient == nil {
By("Creating a federated kubernetes client")
if f.FederationClientset_1_4 == nil {
By("Creating a release 1.4 federation Clientset")
var err error
f.FederationClient, err = LoadFederationClient()
Expect(err).NotTo(HaveOccurred())
}
if f.FederationClientset == nil {
By("Creating an unversioned federation Clientset")
var err error
f.FederationClientset, err = LoadFederationClientset()
Expect(err).NotTo(HaveOccurred())
}
if f.FederationClientset_1_3 == nil {
By("Creating a release 1.3 federation Clientset")
var err error
f.FederationClientset_1_3, err = LoadFederationClientset_1_3()
f.FederationClientset_1_4, err = LoadFederationClientset_1_4()
Expect(err).NotTo(HaveOccurred())
}
if f.FederationClientset_1_4 == nil {
@ -220,7 +200,7 @@ func (f *Framework) BeforeEach() {
Expect(err).NotTo(HaveOccurred())
}
By("Waiting for federation-apiserver to be ready")
err := WaitForFederationApiserverReady(f.FederationClientset)
err := WaitForFederationApiserverReady(f.FederationClientset_1_4)
Expect(err).NotTo(HaveOccurred())
By("federation-apiserver is ready")
}
@ -300,15 +280,11 @@ func (f *Framework) AfterEach() {
if f.federated {
defer func() {
if f.FederationClient == nil {
Logf("Warning: framework is marked federated, but has no federation client")
if f.FederationClientset_1_4 == nil {
Logf("Warning: framework is marked federated, but has no federation 1.4 clientset")
return
}
if f.FederationClientset == nil {
Logf("Warning: framework is marked federated, but has no federation clientset")
return
}
if err := f.FederationClient.Clusters().DeleteCollection(nil, api.ListOptions{}); err != nil {
if err := f.FederationClientset_1_4.Federation().Clusters().DeleteCollection(nil, api.ListOptions{}); err != nil {
Logf("Error: failed to delete Clusters: %+v", err)
}
}()

View File

@ -38,9 +38,6 @@ import (
"sync"
"time"
"k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset"
unversionedfederation "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned"
"k8s.io/kubernetes/federation/client/clientset_generated/federation_release_1_3"
"k8s.io/kubernetes/federation/client/clientset_generated/federation_release_1_4"
"k8s.io/kubernetes/pkg/api"
apierrs "k8s.io/kubernetes/pkg/api/errors"
@ -875,7 +872,7 @@ func WaitForDefaultServiceAccountInNamespace(c *client.Client, namespace string)
// WaitForFederationApiserverReady waits for the federation apiserver to be ready.
// It tests the readiness by sending a GET request and expecting a non error response.
func WaitForFederationApiserverReady(c *federation_internalclientset.Clientset) error {
func WaitForFederationApiserverReady(c *federation_release_1_4.Clientset) error {
return wait.PollImmediate(time.Second, 1*time.Minute, func() (bool, error) {
_, err := c.Federation().Clusters().List(api.ListOptions{})
if err != nil {
@ -1757,36 +1754,6 @@ func setTimeouts(cs ...*http.Client) {
}
}
func LoadFederationClientset() (*federation_internalclientset.Clientset, error) {
config, err := LoadFederatedConfig()
if err != nil {
return nil, err
}
c, err := federation_internalclientset.NewForConfig(config)
if err != nil {
return nil, fmt.Errorf("error creating federation clientset: %v", err.Error())
}
// Set timeout for each client in the set.
setTimeouts(c.DiscoveryClient.Client, c.FederationClient.Client, c.CoreClient.Client)
return c, nil
}
func LoadFederationClientset_1_3() (*federation_release_1_3.Clientset, error) {
config, err := LoadFederatedConfig()
if err != nil {
return nil, err
}
c, err := federation_release_1_3.NewForConfig(config)
if err != nil {
return nil, fmt.Errorf("error creating federation clientset: %v", err.Error())
}
// Set timeout for each client in the set.
setTimeouts(c.DiscoveryClient.Client, c.FederationClient.Client, c.CoreClient.Client)
return c, nil
}
func LoadFederationClientset_1_4() (*federation_release_1_4.Clientset, error) {
config, err := LoadFederatedConfig()
if err != nil {
@ -1802,25 +1769,6 @@ func LoadFederationClientset_1_4() (*federation_release_1_4.Clientset, error) {
return c, nil
}
func loadFederationClientFromConfig(config *restclient.Config) (*unversionedfederation.FederationClient, error) {
c, err := unversionedfederation.NewForConfig(config)
if err != nil {
return nil, fmt.Errorf("error creating client: %v", err.Error())
}
if c.Client.Timeout == 0 {
c.Client.Timeout = SingleCallTimeout
}
return c, nil
}
func LoadFederationClient() (*unversionedfederation.FederationClient, error) {
config, err := LoadFederatedConfig()
if err != nil {
return nil, err
}
return loadFederationClientFromConfig(config)
}
func LoadClient() (*client.Client, error) {
config, err := LoadConfig()
if err != nil {