mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +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 {
|
||||
Name string
|
||||
*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
|
||||
|
@ -221,10 +221,12 @@ var _ = framework.KubeDescribe("Federated ingresses [Feature:Federation]", func(
|
||||
|
||||
var _ = Describe("Ingress connectivity and DNS", func() {
|
||||
|
||||
var backendPods BackendPodMap
|
||||
|
||||
BeforeEach(func() {
|
||||
fedframework.SkipUnlessFederated(f.ClientSet)
|
||||
// create backend pod
|
||||
createBackendPodsOrFail(clusters, ns, FederatedIngressServicePodName)
|
||||
backendPods = createBackendPodsOrFail(clusters, ns, FederatedIngressServicePodName)
|
||||
// create ingress object
|
||||
jig.ing = createIngressOrFail(f.FederationClientset, ns, service.Name, FederatedIngressTLSSecretName)
|
||||
// wait for ingress objects sync
|
||||
@ -233,7 +235,9 @@ var _ = framework.KubeDescribe("Federated ingresses [Feature:Federation]", func(
|
||||
})
|
||||
|
||||
AfterEach(func() {
|
||||
deleteBackendPodsOrFail(clusters, ns)
|
||||
deleteBackendPodsOrFail(clusters, backendPods)
|
||||
backendPods = nil
|
||||
|
||||
if jig.ing != nil {
|
||||
By(fmt.Sprintf("Deleting ingress %v on all clusters", jig.ing.Name))
|
||||
orphanDependents := false
|
||||
|
@ -146,6 +146,7 @@ var _ = framework.KubeDescribe("Federated Services [Feature:Federation]", func()
|
||||
var (
|
||||
service *v1.Service
|
||||
serviceShard *v1.Service
|
||||
backendPods BackendPodMap
|
||||
)
|
||||
|
||||
BeforeEach(func() {
|
||||
@ -153,7 +154,7 @@ var _ = framework.KubeDescribe("Federated Services [Feature:Federation]", func()
|
||||
|
||||
nsName := f.FederationNamespace.Name
|
||||
|
||||
createBackendPodsOrFail(clusters, nsName, FederatedServicePodName)
|
||||
backendPods = createBackendPodsOrFail(clusters, nsName, FederatedServicePodName)
|
||||
|
||||
service = createServiceOrFail(f.FederationClientset, nsName, FederatedServiceName)
|
||||
obj, err := api.Scheme.DeepCopy(service)
|
||||
@ -191,7 +192,8 @@ var _ = framework.KubeDescribe("Federated Services [Feature:Federation]", func()
|
||||
fedframework.SkipUnlessFederated(f.ClientSet)
|
||||
|
||||
nsName := f.FederationNamespace.Name
|
||||
deleteBackendPodsOrFail(clusters, nsName)
|
||||
deleteBackendPodsOrFail(clusters, backendPods)
|
||||
backendPods = nil
|
||||
|
||||
if service != nil {
|
||||
deleteServiceOrFail(f.FederationClientset, nsName, service.Name, nil)
|
||||
@ -245,7 +247,7 @@ var _ = framework.KubeDescribe("Federated Services [Feature:Federation]", func()
|
||||
fedframework.SkipUnlessFederated(f.ClientSet)
|
||||
|
||||
// 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).
|
||||
// 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 maps a cluster name to a backend pod created in that cluster
|
||||
type BackendPodMap map[string]*v1.Pod
|
||||
|
||||
// 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{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: name,
|
||||
@ -356,19 +359,20 @@ func createBackendPodsOrFail(clusters fedframework.ClusterMap, namespace string,
|
||||
RestartPolicy: v1.RestartPolicyAlways,
|
||||
},
|
||||
}
|
||||
podMap := make(BackendPodMap)
|
||||
for name, c := range clusters {
|
||||
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)
|
||||
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))
|
||||
c.BackendPod = createdPod
|
||||
podMap[name] = createdPod
|
||||
}
|
||||
return podMap
|
||||
}
|
||||
|
||||
// deleteOneBackendPodOrFail deletes exactly one backend pod which must not be nil
|
||||
// The test fails if there are any errors.
|
||||
func deleteOneBackendPodOrFail(c *fedframework.Cluster) {
|
||||
pod := c.BackendPod
|
||||
func deleteOneBackendPodOrFail(c *fedframework.Cluster, pod *v1.Pod) {
|
||||
Expect(pod).ToNot(BeNil())
|
||||
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)
|
||||
@ -382,11 +386,13 @@ func deleteOneBackendPodOrFail(c *fedframework.Cluster) {
|
||||
|
||||
// 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.
|
||||
func deleteBackendPodsOrFail(clusters fedframework.ClusterMap, namespace string) {
|
||||
func deleteBackendPodsOrFail(clusters fedframework.ClusterMap, backendPods BackendPodMap) {
|
||||
if backendPods == nil {
|
||||
return
|
||||
}
|
||||
for name, c := range clusters {
|
||||
if c.BackendPod != nil {
|
||||
deleteOneBackendPodOrFail(c)
|
||||
c.BackendPod = nil
|
||||
if pod, ok := backendPods[name]; ok {
|
||||
deleteOneBackendPodOrFail(c, pod)
|
||||
} else {
|
||||
By(fmt.Sprintf("No backend pod to delete for cluster %q", name))
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user