Merge pull request #34652 from quinton-hoole/2016-10-12-fix-fed-e2e-resource-leak

Automatic merge from submit-queue

Fix leaking ingress resources in federated ingress e2e test.

Originally the federated ingresses were being deleted, but due to the lack of cascading deletion, the cluster ingresses were never being deleted, leading to leaked GCE loadbalancer resources.  This fixes that.
This commit is contained in:
Kubernetes Submit Queue 2016-10-12 22:30:12 -07:00 committed by GitHub
commit 726c2e7c2a

View File

@ -64,7 +64,7 @@ var _ = framework.KubeDescribe("Federated ingresses [Feature:Federation]", func(
It("should be created and deleted successfully", func() {
framework.SkipUnlessFederated(f.Client)
framework.SkipUnlessProviderIs("gce", "gke") // TODO: Federated ingress is not yet supported on non-GCP platforms.
nsName := f.FederationNamespace.Name
ingress := createIngressOrFail(f.FederationClientset_1_5, nsName)
By(fmt.Sprintf("Creation of ingress %q in namespace %q succeeded. Deleting ingress.", ingress.Name, nsName))
@ -86,6 +86,7 @@ var _ = framework.KubeDescribe("Federated ingresses [Feature:Federation]", func(
// register clusters in federation apiserver
BeforeEach(func() {
framework.SkipUnlessFederated(f.Client)
framework.SkipUnlessProviderIs("gce", "gke") // TODO: Federated ingress is not yet supported on non-GCP platforms.
if federationName = os.Getenv("FEDERATION_NAME"); federationName == "" {
federationName = DefaultFederationName
}
@ -104,7 +105,11 @@ var _ = framework.KubeDescribe("Federated ingresses [Feature:Federation]", func(
defer func() { // Cleanup
By(fmt.Sprintf("Deleting ingress %q in namespace %q", ingress.Name, ns))
err := f.FederationClientset_1_5.Ingresses(ns).Delete(ingress.Name, &v1.DeleteOptions{})
framework.ExpectNoError(err, "Error deleting ingress %q in namespace %q", ingress.Name, ns)
framework.ExpectNoError(err, "Error deleting ingress %q/%q in federation", ns, ingress.Name)
for clusterName, cluster := range clusters {
err := cluster.Ingresses(ns).Delete(ingress.Name, &v1.DeleteOptions{})
framework.ExpectNoError(err, "Error deleting ingress %q/%q in cluster %q", ns, ingress.Name, clusterName)
}
}()
// wait for ingress shards being created
waitForIngressShardsOrFail(ns, ingress, clusters)
@ -143,6 +148,9 @@ var _ = framework.KubeDescribe("Federated ingresses [Feature:Federation]", func(
}
if jig.ing != nil {
deleteIngressOrFail(f.FederationClientset_1_5, ns, jig.ing.Name)
for clusterName, cluster := range clusters {
deleteClusterIngressOrFail(clusterName, cluster.Clientset, ns, jig.ing.Name)
}
jig.ing = nil
} else {
By("No ingress to delete. Ingress is nil")
@ -268,6 +276,15 @@ func deleteIngressOrFail(clientset *fedclientset.Clientset, namespace string, in
framework.ExpectNoError(err, "Error deleting ingress %q from namespace %q", ingressName, namespace)
}
// TODO: quinton: This is largely a cut 'n paste of the above. Yuck! Refactor as soon as we have a common interface implmented by both fedclientset.Clientset and kubeclientset.Clientset
func deleteClusterIngressOrFail(clusterName string, clientset *kubeclientset.Clientset, namespace string, ingressName string) {
if clientset == nil || len(namespace) == 0 || len(ingressName) == 0 {
Fail(fmt.Sprintf("Internal error: invalid parameters passed to deleteClusterIngressOrFail: cluster: %q, clientset: %v, namespace: %v, ingress: %v", clusterName, clientset, namespace, ingressName))
}
err := clientset.Ingresses(namespace).Delete(ingressName, v1.NewDeleteOptions(0))
framework.ExpectNoError(err, "Error deleting cluster ingress %q/%q from cluster %q", namespace, ingressName, clusterName)
}
func createIngressOrFail(clientset *fedclientset.Clientset, namespace string) *v1beta1.Ingress {
if clientset == nil || len(namespace) == 0 {
Fail(fmt.Sprintf("Internal error: invalid parameters passed to createIngressOrFail: clientset: %v, namespace: %v", clientset, namespace))