@@ -15,36 +15,28 @@ func TestDeleteAPI(t *testing.T) {
1515 }
1616
1717 // delete any api-server pods
18- for i , pod := range apiPods .Items {
19- err := client .CoreV1 ().Pods ("kube-system" ).Delete (pod .ObjectMeta .Name , & metav1.DeleteOptions {})
20- if err != nil {
21- // TODO: if HA we should be able to successfully
22- // delete all. Until then just log if we can't delete
23- // something that isn't the first pod.
24- if i == 0 {
25- t .Fatalf ("error deleting api-server pod: %v" , err )
26- } else {
27- t .Logf ("error deleting api-server pod: %v" , err )
28- }
18+ deletedPods := make (map [string ]struct {})
19+ for _ , pod := range apiPods .Items {
20+ if err := client .CoreV1 ().Pods ("kube-system" ).Delete (pod .ObjectMeta .Name , & metav1.DeleteOptions {}); err != nil {
21+ t .Fatalf ("error deleting api-server pod: %v" , err )
2922 }
23+ deletedPods [pod .ObjectMeta .Name ] = struct {}{}
3024 }
3125
32- // wait for api-server to go down by waiting until listing pods returns
33- // errors. This is potentially error prone, but without waiting for the
34- // apiserver to go down the next step will return sucess before the
35- // apiserver is ever destroyed.
36- waitDestroy := func () error {
37- // only checking api being down , specific function not important
38- _ , err := client . Discovery (). ServerVersion ()
39-
40- if err == nil {
41- return fmt . Errorf ( "waiting for apiserver to go down: %v" , err )
26+ // wait for pods to be completely deleted.
27+ if err := retry ( 100 , 1 * time . Second , func () error {
28+ remainingPods , err := client . CoreV1 (). Pods ( "kube-system" ). List (metav1. ListOptions { LabelSelector : "k8s-app=kube-apiserver" })
29+ if err != nil {
30+ return fmt . Errorf ( " error checking for remaining apiserver pods: %v" , err )
31+ }
32+ for _ , pod := range remainingPods . Items {
33+ if _ , ok := deletedPods [ pod . ObjectMeta . Name ]; ok {
34+ return fmt . Errorf ( "pod %s is still not deleted" , pod . ObjectMeta . Name )
35+ }
4236 }
4337 return nil
44- }
45-
46- if err := retry (100 , 500 * time .Millisecond , waitDestroy ); err != nil {
47- t .Fatal (err )
38+ }); err != nil {
39+ t .Fatalf ("error waiting for apiserver pods to be deleted: %v" , err )
4840 }
4941
5042 // wait until api server is back up
0 commit comments