cluster type

This commit is contained in:
Matt Liggett 2016-07-01 09:50:57 -07:00
parent 5f01e8d335
commit 36c34af2fa

View File

@ -62,9 +62,13 @@ var FederatedServiceLabels = map[string]string{
"foo": "bar", "foo": "bar",
} }
type cluster struct {
*release_1_3.Clientset
}
var _ = framework.KubeDescribe("[Feature:Federation]", func() { var _ = framework.KubeDescribe("[Feature:Federation]", func() {
f := framework.NewDefaultFederatedFramework("federated-service") f := framework.NewDefaultFederatedFramework("federated-service")
var clusterClientSets []*release_1_3.Clientset var clusters []cluster
var clusterNamespaceCreated []bool // Did we need to create a new namespace in each of the above clusters? If so, we should delete it. var clusterNamespaceCreated []bool // Did we need to create a new namespace in each of the above clusters? If so, we should delete it.
var federationName string var federationName string
@ -106,7 +110,7 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
} }
framework.Logf("%d clusters are Ready", len(contexts)) framework.Logf("%d clusters are Ready", len(contexts))
clusterClientSets = make([]*release_1_3.Clientset, len(clusterList.Items)) clusters = make([]cluster, len(clusterList.Items))
for i, cluster := range clusterList.Items { for i, cluster := range clusterList.Items {
framework.Logf("Creating a clientset for the cluster %s", cluster.Name) framework.Logf("Creating a clientset for the cluster %s", cluster.Name)
@ -126,19 +130,19 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
cfg.QPS = KubeAPIQPS cfg.QPS = KubeAPIQPS
cfg.Burst = KubeAPIBurst cfg.Burst = KubeAPIBurst
clset := release_1_3.NewForConfigOrDie(restclient.AddUserAgent(cfg, UserAgentName)) clset := release_1_3.NewForConfigOrDie(restclient.AddUserAgent(cfg, UserAgentName))
clusterClientSets[i] = clset clusters[i].Clientset = clset
} }
clusterNamespaceCreated = make([]bool, len(clusterClientSets)) clusterNamespaceCreated = make([]bool, len(clusters))
for i, cs := range clusterClientSets { for i, c := range clusters {
// The e2e Framework created the required namespace in one of the clusters, but we need to create it in all the others, if it doesn't yet exist. // The e2e Framework created the required namespace in one of the clusters, but we need to create it in all the others, if it doesn't yet exist.
if _, err := cs.Core().Namespaces().Get(f.Namespace.Name); errors.IsNotFound(err) { if _, err := c.Clientset.Core().Namespaces().Get(f.Namespace.Name); errors.IsNotFound(err) {
ns := &v1.Namespace{ ns := &v1.Namespace{
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
Name: f.Namespace.Name, Name: f.Namespace.Name,
}, },
} }
_, err := cs.Core().Namespaces().Create(ns) _, err := c.Clientset.Core().Namespaces().Create(ns)
if err == nil { if err == nil {
clusterNamespaceCreated[i] = true clusterNamespaceCreated[i] = true
} }
@ -151,10 +155,10 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
}) })
AfterEach(func() { AfterEach(func() {
for i, cs := range clusterClientSets { for i, c := range clusters {
if clusterNamespaceCreated[i] { if clusterNamespaceCreated[i] {
if _, err := cs.Core().Namespaces().Get(f.Namespace.Name); !errors.IsNotFound(err) { if _, err := c.Clientset.Core().Namespaces().Get(f.Namespace.Name); !errors.IsNotFound(err) {
err := cs.Core().Namespaces().Delete(f.Namespace.Name, &api.DeleteOptions{}) err := c.Clientset.Core().Namespaces().Delete(f.Namespace.Name, &api.DeleteOptions{})
framework.ExpectNoError(err, "Couldn't delete the namespace %s in cluster [%d]: %v", f.Namespace.Name, i, err) framework.ExpectNoError(err, "Couldn't delete the namespace %s in cluster [%d]: %v", f.Namespace.Name, i, err)
} }
framework.Logf("Namespace %s deleted in cluster [%d]", f.Namespace.Name, i) framework.Logf("Namespace %s deleted in cluster [%d]", f.Namespace.Name, i)
@ -199,7 +203,7 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
err := f.FederationClientset_1_3.Services(f.Namespace.Name).Delete(service.Name, &api.DeleteOptions{}) err := f.FederationClientset_1_3.Services(f.Namespace.Name).Delete(service.Name, &api.DeleteOptions{})
framework.ExpectNoError(err, "Error deleting service %q in namespace %q", service.Name, f.Namespace.Name) framework.ExpectNoError(err, "Error deleting service %q in namespace %q", service.Name, f.Namespace.Name)
}() }()
waitForServiceShardsOrFail(f.Namespace.Name, service, clusterClientSets, nil) waitForServiceShardsOrFail(f.Namespace.Name, service, clusters, nil)
}) })
}) })
@ -212,15 +216,15 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
BeforeEach(func() { BeforeEach(func() {
framework.SkipUnlessFederated(f.Client) framework.SkipUnlessFederated(f.Client)
backendPods = createBackendPodsOrFail(clusterClientSets, f.Namespace.Name, FederatedServicePodName) backendPods = createBackendPodsOrFail(clusters, f.Namespace.Name, FederatedServicePodName)
service = createServiceOrFail(f.FederationClientset_1_3, f.Namespace.Name) service = createServiceOrFail(f.FederationClientset_1_3, f.Namespace.Name)
waitForServiceShardsOrFail(f.Namespace.Name, service, clusterClientSets, nil) waitForServiceShardsOrFail(f.Namespace.Name, service, clusters, nil)
}) })
AfterEach(func() { AfterEach(func() {
framework.SkipUnlessFederated(f.Client) framework.SkipUnlessFederated(f.Client)
if backendPods != nil { if backendPods != nil {
deleteBackendPodsOrFail(clusterClientSets, f.Namespace.Name, backendPods) deleteBackendPodsOrFail(clusters, f.Namespace.Name, backendPods)
backendPods = nil backendPods = nil
} else { } else {
By("No backend pods to delete. BackendPods is nil.") By("No backend pods to delete. BackendPods is nil.")
@ -257,7 +261,7 @@ var _ = framework.KubeDescribe("[Feature:Federation]", func() {
framework.SkipUnlessFederated(f.Client) framework.SkipUnlessFederated(f.Client)
// Delete all the backend pods from the shard which is local to the discovery pod. // Delete all the backend pods from the shard which is local to the discovery pod.
deleteBackendPodsOrFail([]*release_1_3.Clientset{f.Clientset_1_3}, f.Namespace.Name, []*v1.Pod{backendPods[0]}) deleteBackendPodsOrFail([]cluster{{f.Clientset_1_3}}, f.Namespace.Name, []*v1.Pod{backendPods[0]})
}) })
@ -345,19 +349,19 @@ func waitForServiceOrFail(clientset *release_1_3.Clientset, namespace string, se
If presentInCluster[n] is true, then wait for service shard to exist in the cluster specifid in clientsets[n] If presentInCluster[n] is true, then wait for service shard to exist in the cluster specifid in clientsets[n]
If presentInCluster[n] is false, then wait for service shard to not exist in the cluster specifid in clientsets[n] If presentInCluster[n] is false, then wait for service shard to not exist in the cluster specifid in clientsets[n]
*/ */
func waitForServiceShardsOrFail(namespace string, service *v1.Service, clientsets []*release_1_3.Clientset, presentInCluster []bool) { func waitForServiceShardsOrFail(namespace string, service *v1.Service, clusters []cluster, presentInCluster []bool) {
if presentInCluster != nil { if presentInCluster != nil {
Expect(len(presentInCluster)).To(Equal(len(clientsets)), "Internal error: Number of presence flags does not equal number of clients/clusters") Expect(len(presentInCluster)).To(Equal(len(clusters)), "Internal error: Number of presence flags does not equal number of clients/clusters")
} }
framework.Logf("Waiting for service %q in %d clusters", service.Name, len(clientsets)) framework.Logf("Waiting for service %q in %d clusters", service.Name, len(clusters))
for i, clientset := range clientsets { for i, c := range clusters {
var present bool // Should the service be present or absent in this cluster? var present bool // Should the service be present or absent in this cluster?
if presentInCluster == nil { if presentInCluster == nil {
present = true present = true
} else { } else {
present = presentInCluster[i] present = presentInCluster[i]
} }
waitForServiceOrFail(clientset, namespace, service, present, FederatedServiceTimeout) waitForServiceOrFail(c.Clientset, namespace, service, present, FederatedServiceTimeout)
} }
} }
@ -484,7 +488,7 @@ func discoverService(f *framework.Framework, name string, exists bool, podName s
createBackendPodsOrFail creates one pod in each cluster, and returns the created pods (in the same order as clusterClientSets). createBackendPodsOrFail creates one pod in each cluster, and returns the created pods (in the same order as clusterClientSets).
If creation of any pod fails, the test fails (possibly with a partially created set of pods). No retries are attempted. If creation of any pod fails, the test fails (possibly with a partially created set of pods). No retries are attempted.
*/ */
func createBackendPodsOrFail(clusterClientSets []*release_1_3.Clientset, namespace string, name string) []*v1.Pod { func createBackendPodsOrFail(clusters []cluster, namespace string, name string) []*v1.Pod {
pod := &v1.Pod{ pod := &v1.Pod{
ObjectMeta: v1.ObjectMeta{ ObjectMeta: v1.ObjectMeta{
Name: name, Name: name,
@ -501,10 +505,10 @@ func createBackendPodsOrFail(clusterClientSets []*release_1_3.Clientset, namespa
RestartPolicy: v1.RestartPolicyAlways, RestartPolicy: v1.RestartPolicyAlways,
}, },
} }
pods := make([]*v1.Pod, len(clusterClientSets)) pods := make([]*v1.Pod, len(clusters))
for i, client := range clusterClientSets { for i, c := range clusters {
By(fmt.Sprintf("Creating pod %q in namespace %q in cluster %d", pod.Name, namespace, i)) By(fmt.Sprintf("Creating pod %q in namespace %q in cluster %d", pod.Name, namespace, i))
createdPod, err := client.Core().Pods(namespace).Create(pod) createdPod, err := c.Clientset.Core().Pods(namespace).Create(pod)
framework.ExpectNoError(err, "Creating pod %q in namespace %q in cluster %d", name, namespace, i) framework.ExpectNoError(err, "Creating pod %q in namespace %q in cluster %d", name, namespace, i)
By(fmt.Sprintf("Successfully created pod %q in namespace %q in cluster %d: %v", pod.Name, namespace, i, *createdPod)) By(fmt.Sprintf("Successfully created pod %q in namespace %q in cluster %d: %v", pod.Name, namespace, i, *createdPod))
pods[i] = createdPod pods[i] = createdPod
@ -516,13 +520,13 @@ func createBackendPodsOrFail(clusterClientSets []*release_1_3.Clientset, namespa
deleteBackendPodsOrFail deletes one pod from each cluster (unless pods[n] is nil for that cluster) deleteBackendPodsOrFail deletes one pod from each cluster (unless pods[n] is nil for that cluster)
If deletion of any pod fails, the test fails (possibly with a partially deleted set of pods). No retries are attempted. If deletion of any pod fails, the test fails (possibly with a partially deleted set of pods). No retries are attempted.
*/ */
func deleteBackendPodsOrFail(clusterClientSets []*release_1_3.Clientset, namespace string, pods []*v1.Pod) { func deleteBackendPodsOrFail(clusters []cluster, namespace string, pods []*v1.Pod) {
if len(clusterClientSets) != len(pods) { if len(clusters) != len(pods) {
Fail(fmt.Sprintf("Internal error: number of clients (%d) does not equal number of pods (%d). One pod per client please.", len(clusterClientSets), len(pods))) Fail(fmt.Sprintf("Internal error: number of clients (%d) does not equal number of pods (%d). One pod per client please.", len(clusters), len(pods)))
} }
for i, client := range clusterClientSets { for i, c := range clusters {
if pods[i] != nil { if pods[i] != nil {
err := client.Core().Pods(namespace).Delete(pods[i].Name, api.NewDeleteOptions(0)) err := c.Clientset.Core().Pods(namespace).Delete(pods[i].Name, api.NewDeleteOptions(0))
if errors.IsNotFound(err) { if errors.IsNotFound(err) {
By(fmt.Sprintf("Pod %q in namespace %q in cluster %d does not exist. No need to delete it.", pods[i].Name, namespace, i)) By(fmt.Sprintf("Pod %q in namespace %q in cluster %d does not exist. No need to delete it.", pods[i].Name, namespace, i))
} else { } else {