diff --git a/test/e2e_federation/framework/cluster.go b/test/e2e_federation/framework/cluster.go index c93af924bb3..012dfb52af6 100644 --- a/test/e2e_federation/framework/cluster.go +++ b/test/e2e_federation/framework/cluster.go @@ -18,6 +18,7 @@ package framework import ( "fmt" + "strings" "time" "k8s.io/apimachinery/pkg/api/errors" @@ -231,3 +232,9 @@ func restConfigForCluster(clusterConf *clusterConfig) *restclient.Config { framework.ExpectNoError(err, fmt.Sprintf("Error creating client for cluster %q: %+v", clusterConf.name, err)) return restConfig } + +func GetZoneFromClusterName(clusterName string) string { + // Ref: https://github.com/kubernetes/kubernetes/blob/master/cluster/kube-util.sh#L55 + prefix := "federation-e2e-" + framework.TestContext.Provider + "-" + return strings.TrimPrefix(clusterName, prefix) +} diff --git a/test/e2e_federation/util.go b/test/e2e_federation/util.go index cdc65d9ce5d..7641ee2138c 100644 --- a/test/e2e_federation/util.go +++ b/test/e2e_federation/util.go @@ -27,9 +27,9 @@ import ( "k8s.io/apimachinery/pkg/util/wait" federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1" fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" + "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/test/e2e/common" "k8s.io/kubernetes/test/e2e/framework" fedframework "k8s.io/kubernetes/test/e2e_federation/framework" @@ -243,16 +243,18 @@ func cleanupServiceShardsAndProviderResources(namespace string, service *v1.Serv continue } + if cSvc.Spec.Type == v1.ServiceTypeLoadBalancer { + // In federation tests, e2e zone names are used to derive federation member cluster names + zone := fedframework.GetZoneFromClusterName(name) + serviceLBName := cloudprovider.GetLoadBalancerName(cSvc) + framework.Logf("cleaning cloud provider resource for service %q in namespace %q, in cluster %q", service.Name, namespace, name) + framework.CleanupServiceResources(serviceLBName, zone) + } + err = cleanupServiceShard(c.Clientset, name, namespace, cSvc, fedframework.FederatedDefaultTestTimeout) if err != nil { framework.Logf("Failed to delete service %q in namespace %q, in cluster %q: %v", service.Name, namespace, name, err) } - if service.Spec.Type == v1.ServiceTypeLoadBalancer { - err = cleanupServiceShardLoadBalancer(name, cSvc, fedframework.FederatedDefaultTestTimeout) - if err != nil { - framework.Logf("Failed to delete cloud provider resources for service %q in namespace %q, in cluster %q, err: %v", service.Name, namespace, name, err) - } - } } } @@ -270,35 +272,6 @@ func cleanupServiceShard(clientset *kubeclientset.Clientset, clusterName, namesp return err } -func cleanupServiceShardLoadBalancer(clusterName string, service *v1.Service, timeout time.Duration) error { - provider := framework.TestContext.CloudConfig.Provider - if provider == nil { - return fmt.Errorf("cloud provider undefined") - } - - internalSvc := &v1.Service{} - err := api.Scheme.Convert(service, internalSvc, nil) - if err != nil { - return fmt.Errorf("failed to convert versioned service object to internal type: %v", err) - } - - err = wait.PollImmediate(framework.Poll, timeout, func() (bool, error) { - lbi, supported := provider.LoadBalancer() - if !supported { - return false, fmt.Errorf("%q doesn't support load balancers", provider.ProviderName()) - } - err := lbi.EnsureLoadBalancerDeleted(clusterName, internalSvc) - if err != nil { - // Deletion failed with an error, try again. - framework.Logf("Failed to delete cloud provider resources for service %q in namespace %q, in cluster %q: %v", service.Name, service.Namespace, clusterName, err) - return false, nil - } - By(fmt.Sprintf("Cloud provider resources for Service %q in namespace %q in cluster %q deleted", service.Name, service.Namespace, clusterName)) - return true, nil - }) - return err -} - func podExitCodeDetector(f *fedframework.Framework, name, namespace string, code int32) func() error { // If we ever get any container logs, stash them here. logs := ""