mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 22:17:14 +00:00
fed: Refactor e2e backend pod management for maintainability
This change separates backend pod management from cluster management
This commit is contained in:
parent
25da547399
commit
b2bdc9235e
@ -53,7 +53,6 @@ type ClusterMap map[string]*Cluster
|
|||||||
type Cluster struct {
|
type Cluster struct {
|
||||||
Name string
|
Name string
|
||||||
*kubeclientset.Clientset
|
*kubeclientset.Clientset
|
||||||
BackendPod *v1.Pod // The backend pod, if one's been created.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// can not be moved to util, as By and Expect must be put in Ginkgo test unit
|
// can not be moved to util, as By and Expect must be put in Ginkgo test unit
|
||||||
|
@ -221,10 +221,12 @@ var _ = framework.KubeDescribe("Federated ingresses [Feature:Federation]", func(
|
|||||||
|
|
||||||
var _ = Describe("Ingress connectivity and DNS", func() {
|
var _ = Describe("Ingress connectivity and DNS", func() {
|
||||||
|
|
||||||
|
var backendPods BackendPodMap
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
fedframework.SkipUnlessFederated(f.ClientSet)
|
fedframework.SkipUnlessFederated(f.ClientSet)
|
||||||
// create backend pod
|
// create backend pod
|
||||||
createBackendPodsOrFail(clusters, ns, FederatedIngressServicePodName)
|
backendPods = createBackendPodsOrFail(clusters, ns, FederatedIngressServicePodName)
|
||||||
// create ingress object
|
// create ingress object
|
||||||
jig.ing = createIngressOrFail(f.FederationClientset, ns, service.Name, FederatedIngressTLSSecretName)
|
jig.ing = createIngressOrFail(f.FederationClientset, ns, service.Name, FederatedIngressTLSSecretName)
|
||||||
// wait for ingress objects sync
|
// wait for ingress objects sync
|
||||||
@ -233,7 +235,9 @@ var _ = framework.KubeDescribe("Federated ingresses [Feature:Federation]", func(
|
|||||||
})
|
})
|
||||||
|
|
||||||
AfterEach(func() {
|
AfterEach(func() {
|
||||||
deleteBackendPodsOrFail(clusters, ns)
|
deleteBackendPodsOrFail(clusters, backendPods)
|
||||||
|
backendPods = nil
|
||||||
|
|
||||||
if jig.ing != nil {
|
if jig.ing != nil {
|
||||||
By(fmt.Sprintf("Deleting ingress %v on all clusters", jig.ing.Name))
|
By(fmt.Sprintf("Deleting ingress %v on all clusters", jig.ing.Name))
|
||||||
orphanDependents := false
|
orphanDependents := false
|
||||||
|
@ -146,6 +146,7 @@ var _ = framework.KubeDescribe("Federated Services [Feature:Federation]", func()
|
|||||||
var (
|
var (
|
||||||
service *v1.Service
|
service *v1.Service
|
||||||
serviceShard *v1.Service
|
serviceShard *v1.Service
|
||||||
|
backendPods BackendPodMap
|
||||||
)
|
)
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
@ -153,7 +154,7 @@ var _ = framework.KubeDescribe("Federated Services [Feature:Federation]", func()
|
|||||||
|
|
||||||
nsName := f.FederationNamespace.Name
|
nsName := f.FederationNamespace.Name
|
||||||
|
|
||||||
createBackendPodsOrFail(clusters, nsName, FederatedServicePodName)
|
backendPods = createBackendPodsOrFail(clusters, nsName, FederatedServicePodName)
|
||||||
|
|
||||||
service = createServiceOrFail(f.FederationClientset, nsName, FederatedServiceName)
|
service = createServiceOrFail(f.FederationClientset, nsName, FederatedServiceName)
|
||||||
obj, err := api.Scheme.DeepCopy(service)
|
obj, err := api.Scheme.DeepCopy(service)
|
||||||
@ -191,7 +192,8 @@ var _ = framework.KubeDescribe("Federated Services [Feature:Federation]", func()
|
|||||||
fedframework.SkipUnlessFederated(f.ClientSet)
|
fedframework.SkipUnlessFederated(f.ClientSet)
|
||||||
|
|
||||||
nsName := f.FederationNamespace.Name
|
nsName := f.FederationNamespace.Name
|
||||||
deleteBackendPodsOrFail(clusters, nsName)
|
deleteBackendPodsOrFail(clusters, backendPods)
|
||||||
|
backendPods = nil
|
||||||
|
|
||||||
if service != nil {
|
if service != nil {
|
||||||
deleteServiceOrFail(f.FederationClientset, nsName, service.Name, nil)
|
deleteServiceOrFail(f.FederationClientset, nsName, service.Name, nil)
|
||||||
@ -245,7 +247,7 @@ var _ = framework.KubeDescribe("Federated Services [Feature:Federation]", func()
|
|||||||
fedframework.SkipUnlessFederated(f.ClientSet)
|
fedframework.SkipUnlessFederated(f.ClientSet)
|
||||||
|
|
||||||
// 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.
|
||||||
deleteOneBackendPodOrFail(clusters[primaryClusterName])
|
deleteOneBackendPodOrFail(clusters[primaryClusterName], backendPods[primaryClusterName])
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -337,9 +337,12 @@ func discoverService(f *fedframework.Framework, name string, exists bool, podNam
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// createBackendPodsOrFail creates one pod in each cluster, and returns the created pods (in the same order as clusterClientSets).
|
// BackendPodMap maps a cluster name to a backend pod created in that cluster
|
||||||
// If creation of any pod fails, the test fails (possibly with a partially created set of pods). No retries are attempted.
|
type BackendPodMap map[string]*v1.Pod
|
||||||
func createBackendPodsOrFail(clusters fedframework.ClusterMap, namespace string, name string) {
|
|
||||||
|
// createBackendPodsOrFail creates one pod in each cluster, and returns the created pods. If creation of any pod fails,
|
||||||
|
// the test fails (possibly with a partially created set of pods). No retries are attempted.
|
||||||
|
func createBackendPodsOrFail(clusters fedframework.ClusterMap, namespace string, name string) BackendPodMap {
|
||||||
pod := &v1.Pod{
|
pod := &v1.Pod{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: name,
|
Name: name,
|
||||||
@ -356,19 +359,20 @@ func createBackendPodsOrFail(clusters fedframework.ClusterMap, namespace string,
|
|||||||
RestartPolicy: v1.RestartPolicyAlways,
|
RestartPolicy: v1.RestartPolicyAlways,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
podMap := make(BackendPodMap)
|
||||||
for name, c := range clusters {
|
for name, c := range clusters {
|
||||||
By(fmt.Sprintf("Creating pod %q in namespace %q in cluster %q", pod.Name, namespace, name))
|
By(fmt.Sprintf("Creating pod %q in namespace %q in cluster %q", pod.Name, namespace, name))
|
||||||
createdPod, err := c.Clientset.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 %q", name, namespace, name)
|
framework.ExpectNoError(err, "Creating pod %q in namespace %q in cluster %q", name, namespace, name)
|
||||||
By(fmt.Sprintf("Successfully created pod %q in namespace %q in cluster %q: %v", pod.Name, namespace, name, *createdPod))
|
By(fmt.Sprintf("Successfully created pod %q in namespace %q in cluster %q: %v", pod.Name, namespace, name, *createdPod))
|
||||||
c.BackendPod = createdPod
|
podMap[name] = createdPod
|
||||||
}
|
}
|
||||||
|
return podMap
|
||||||
}
|
}
|
||||||
|
|
||||||
// deleteOneBackendPodOrFail deletes exactly one backend pod which must not be nil
|
// deleteOneBackendPodOrFail deletes exactly one backend pod which must not be nil
|
||||||
// The test fails if there are any errors.
|
// The test fails if there are any errors.
|
||||||
func deleteOneBackendPodOrFail(c *fedframework.Cluster) {
|
func deleteOneBackendPodOrFail(c *fedframework.Cluster, pod *v1.Pod) {
|
||||||
pod := c.BackendPod
|
|
||||||
Expect(pod).ToNot(BeNil())
|
Expect(pod).ToNot(BeNil())
|
||||||
err := c.Clientset.Core().Pods(pod.Namespace).Delete(pod.Name, metav1.NewDeleteOptions(0))
|
err := c.Clientset.Core().Pods(pod.Namespace).Delete(pod.Name, metav1.NewDeleteOptions(0))
|
||||||
msgFmt := fmt.Sprintf("Deleting Pod %q in namespace %q in cluster %q %%v", pod.Name, pod.Namespace, c.Name)
|
msgFmt := fmt.Sprintf("Deleting Pod %q in namespace %q in cluster %q %%v", pod.Name, pod.Namespace, c.Name)
|
||||||
@ -382,11 +386,13 @@ func deleteOneBackendPodOrFail(c *fedframework.Cluster) {
|
|||||||
|
|
||||||
// deleteBackendPodsOrFail deletes one pod from each cluster that has one.
|
// deleteBackendPodsOrFail deletes one pod from each cluster that has one.
|
||||||
// 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(clusters fedframework.ClusterMap, namespace string) {
|
func deleteBackendPodsOrFail(clusters fedframework.ClusterMap, backendPods BackendPodMap) {
|
||||||
|
if backendPods == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
for name, c := range clusters {
|
for name, c := range clusters {
|
||||||
if c.BackendPod != nil {
|
if pod, ok := backendPods[name]; ok {
|
||||||
deleteOneBackendPodOrFail(c)
|
deleteOneBackendPodOrFail(c, pod)
|
||||||
c.BackendPod = nil
|
|
||||||
} else {
|
} else {
|
||||||
By(fmt.Sprintf("No backend pod to delete for cluster %q", name))
|
By(fmt.Sprintf("No backend pod to delete for cluster %q", name))
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user