diff --git a/pkg/kube/client.go b/pkg/kube/client.go index fd111c647..902ab5b1c 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -455,10 +455,17 @@ func (c *Client) Update(original, target ResourceList, force bool) (*Result, err } if err := deleteResource(info, metav1.DeletePropagationBackground); err != nil { c.Log("Failed to delete %q, err: %s", info.ObjectName(), err) + if !apierrors.IsNotFound(err) { + updateErrors = append(updateErrors, err.Error()) + } continue } res.Deleted = append(res.Deleted, info) } + + if len(updateErrors) != 0 { + return res, errors.Errorf(strings.Join(updateErrors, " && ")) + } return res, nil } diff --git a/pkg/kube/client_test.go b/pkg/kube/client_test.go index ff1335f0f..e10404ca1 100644 --- a/pkg/kube/client_test.go +++ b/pkg/kube/client_test.go @@ -209,7 +209,7 @@ func TestCreate(t *testing.T) { } func TestUpdate(t *testing.T) { - listA := newPodList("starfish", "otter", "squid") + listA := newPodList("starfish", "otter", "squid", "notfound") listB := newPodList("starfish", "otter", "dolphin") listC := newPodList("starfish", "otter", "dolphin") listB.Items[0].Spec.Containers[0].Ports = []v1.ContainerPort{{Name: "https", ContainerPort: 443}} @@ -264,6 +264,11 @@ func TestUpdate(t *testing.T) { return newResponse(200, &listB.Items[1]) case p == "/namespaces/default/pods/squid" && m == "GET": return newResponse(200, &listB.Items[2]) + case p == "/namespaces/default/pods/notfound" && m == "GET": + return newResponse(200, &listA.Items[3]) + case p == "/namespaces/default/pods/notfound" && m == "DELETE": + // got the item when GET, but not found when DELETE, it should not fail + return newResponse(404, notFoundBody()) default: t.Fatalf("unexpected request: %s %s", req.Method, req.URL.Path) return nil, nil @@ -317,6 +322,8 @@ func TestUpdate(t *testing.T) { "/namespaces/default/pods:POST", // retry due to 409 "/namespaces/default/pods/squid:GET", "/namespaces/default/pods/squid:DELETE", + "/namespaces/default/pods/notfound:GET", + "/namespaces/default/pods/notfound:DELETE", } if len(expectedActions) != len(actions) { t.Fatalf("unexpected number of requests, expected %d, got %d", len(expectedActions), len(actions))