From 9f10756de3988828d960ee977b32248bdbbc7b33 Mon Sep 17 00:00:00 2001 From: Curt Bushko Date: Mon, 8 Jan 2024 14:38:21 -0500 Subject: [PATCH] Add acceptance test cleanup (#3375) Add acceptance test cleanup --- acceptance/framework/consul/helm_cluster.go | 106 ++++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/acceptance/framework/consul/helm_cluster.go b/acceptance/framework/consul/helm_cluster.go index d4542e736b..638e0e7c51 100644 --- a/acceptance/framework/consul/helm_cluster.go +++ b/acceptance/framework/consul/helm_cluster.go @@ -216,6 +216,7 @@ func (h *HelmCluster) Destroy(t *testing.T) { // Retry because sometimes certain resources (like PVC) take time to delete // in cloud providers. retry.RunWith(&retry.Counter{Wait: 2 * time.Second, Count: 600}, t, func(r *retry.R) { + // Force delete any pods that have h.releaseName in their name because sometimes // graceful termination takes a long time and since this is an uninstall // we don't care that they're stopped gracefully. @@ -231,6 +232,66 @@ func (h *HelmCluster) Destroy(t *testing.T) { } } + // Delete any deployments that have h.releaseName in their name. + deployments, err := h.kubernetesClient.AppsV1().Deployments(h.helmOptions.KubectlOptions.Namespace).List(context.Background(), metav1.ListOptions{LabelSelector: "release=" + h.releaseName}) + require.NoError(r, err) + for _, deployment := range deployments.Items { + if strings.Contains(deployment.Name, h.releaseName) { + err := h.kubernetesClient.AppsV1().Deployments(h.helmOptions.KubectlOptions.Namespace).Delete(context.Background(), deployment.Name, metav1.DeleteOptions{}) + if !errors.IsNotFound(err) { + require.NoError(r, err) + } + } + } + + // Delete any replicasets that have h.releaseName in their name. + replicasets, err := h.kubernetesClient.AppsV1().ReplicaSets(h.helmOptions.KubectlOptions.Namespace).List(context.Background(), metav1.ListOptions{LabelSelector: "release=" + h.releaseName}) + require.NoError(r, err) + for _, replicaset := range replicasets.Items { + if strings.Contains(replicaset.Name, h.releaseName) { + err := h.kubernetesClient.AppsV1().ReplicaSets(h.helmOptions.KubectlOptions.Namespace).Delete(context.Background(), replicaset.Name, metav1.DeleteOptions{}) + if !errors.IsNotFound(err) { + require.NoError(r, err) + } + } + } + + // Delete any statefulsets that have h.releaseName in their name. + statefulsets, err := h.kubernetesClient.AppsV1().StatefulSets(h.helmOptions.KubectlOptions.Namespace).List(context.Background(), metav1.ListOptions{LabelSelector: "release=" + h.releaseName}) + require.NoError(r, err) + for _, statefulset := range statefulsets.Items { + if strings.Contains(statefulset.Name, h.releaseName) { + err := h.kubernetesClient.AppsV1().StatefulSets(h.helmOptions.KubectlOptions.Namespace).Delete(context.Background(), statefulset.Name, metav1.DeleteOptions{}) + if !errors.IsNotFound(err) { + require.NoError(r, err) + } + } + } + + // Delete any daemonsets that have h.releaseName in their name. + daemonsets, err := h.kubernetesClient.AppsV1().DaemonSets(h.helmOptions.KubectlOptions.Namespace).List(context.Background(), metav1.ListOptions{LabelSelector: "release=" + h.releaseName}) + require.NoError(r, err) + for _, daemonset := range daemonsets.Items { + if strings.Contains(daemonset.Name, h.releaseName) { + err := h.kubernetesClient.AppsV1().DaemonSets(h.helmOptions.KubectlOptions.Namespace).Delete(context.Background(), daemonset.Name, metav1.DeleteOptions{}) + if !errors.IsNotFound(err) { + require.NoError(r, err) + } + } + } + + // Delete any services that have h.releaseName in their name. + services, err := h.kubernetesClient.CoreV1().Services(h.helmOptions.KubectlOptions.Namespace).List(context.Background(), metav1.ListOptions{LabelSelector: "release=" + h.releaseName}) + require.NoError(r, err) + for _, service := range services.Items { + if strings.Contains(service.Name, h.releaseName) { + err := h.kubernetesClient.CoreV1().Services(h.helmOptions.KubectlOptions.Namespace).Delete(context.Background(), service.Name, metav1.DeleteOptions{}) + if !errors.IsNotFound(err) { + require.NoError(r, err) + } + } + } + // Delete PVCs. err = h.kubernetesClient.CoreV1().PersistentVolumeClaims(h.helmOptions.KubectlOptions.Namespace).DeleteCollection(context.Background(), metav1.DeleteOptions{}, metav1.ListOptions{LabelSelector: "release=" + h.releaseName}) require.NoError(r, err) @@ -295,6 +356,51 @@ func (h *HelmCluster) Destroy(t *testing.T) { } } + // Verify that all deployments have been deleted. + deployments, err = h.kubernetesClient.AppsV1().Deployments(h.helmOptions.KubectlOptions.Namespace).List(context.Background(), metav1.ListOptions{LabelSelector: "release=" + h.releaseName}) + require.NoError(r, err) + for _, deployment := range deployments.Items { + if strings.Contains(deployment.Name, h.releaseName) { + r.Errorf("Found deployment which should have been deleted: %s", deployment.Name) + } + } + + // Verify that all replicasets have been deleted. + replicasets, err = h.kubernetesClient.AppsV1().ReplicaSets(h.helmOptions.KubectlOptions.Namespace).List(context.Background(), metav1.ListOptions{LabelSelector: "release=" + h.releaseName}) + require.NoError(r, err) + for _, replicaset := range replicasets.Items { + if strings.Contains(replicaset.Name, h.releaseName) { + r.Errorf("Found replicaset which should have been deleted: %s", replicaset.Name) + } + } + + // Verify that all statefulets have been deleted. + statefulsets, err = h.kubernetesClient.AppsV1().StatefulSets(h.helmOptions.KubectlOptions.Namespace).List(context.Background(), metav1.ListOptions{LabelSelector: "release=" + h.releaseName}) + require.NoError(r, err) + for _, statefulset := range statefulsets.Items { + if strings.Contains(statefulset.Name, h.releaseName) { + r.Errorf("Found statefulset which should have been deleted: %s", statefulset.Name) + } + } + + // Verify that all daemonsets have been deleted. + daemonsets, err = h.kubernetesClient.AppsV1().DaemonSets(h.helmOptions.KubectlOptions.Namespace).List(context.Background(), metav1.ListOptions{LabelSelector: "release=" + h.releaseName}) + require.NoError(r, err) + for _, daemonset := range daemonsets.Items { + if strings.Contains(daemonset.Name, h.releaseName) { + r.Errorf("Found daemonset which should have been deleted: %s", daemonset.Name) + } + } + + // Verify that all services have been deleted. + services, err = h.kubernetesClient.CoreV1().Services(h.helmOptions.KubectlOptions.Namespace).List(context.Background(), metav1.ListOptions{LabelSelector: "release=" + h.releaseName}) + require.NoError(r, err) + for _, service := range services.Items { + if strings.Contains(service.Name, h.releaseName) { + r.Errorf("Found service which should have been deleted: %s", service.Name) + } + } + // Verify all Consul Pods are deleted. pods, err = h.kubernetesClient.CoreV1().Pods(h.helmOptions.KubectlOptions.Namespace).List(context.Background(), metav1.ListOptions{LabelSelector: "release=" + h.releaseName}) require.NoError(r, err)