From d1250529cac0ef21d6958b8e5c661bd32d996cb3 Mon Sep 17 00:00:00 2001 From: dayeguilaiye <979014041@qq.com> Date: Mon, 24 Feb 2025 21:25:54 +0800 Subject: [PATCH 1/2] fix(helm): return errors if delete resources failed when upgrading --- pkg/kube/client.go | 10 +++++++++- pkg/kube/client_test.go | 9 ++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/pkg/kube/client.go b/pkg/kube/client.go index f67008f0d..20018a5a4 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -447,11 +447,19 @@ 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) } - return res, nil + + if len(updateErrors) != 0 { + return res, errors.Errorf(strings.Join(updateErrors, " && ")) + } else { + return res, nil + } } // Delete deletes Kubernetes resources specified in the resources list with diff --git a/pkg/kube/client_test.go b/pkg/kube/client_test.go index 55aa5d8ed..7159408b3 100644 --- a/pkg/kube/client_test.go +++ b/pkg/kube/client_test.go @@ -101,7 +101,7 @@ func newTestClient(t *testing.T) *Client { } 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}} @@ -151,6 +151,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 @@ -202,6 +207,8 @@ func TestUpdate(t *testing.T) { "/namespaces/default/pods:POST", "/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)) From 11c028a0717ec6f28ef8d400856c9165ad0bd99c Mon Sep 17 00:00:00 2001 From: dayeguilaiye <979014041@qq.com> Date: Mon, 24 Feb 2025 21:40:18 +0800 Subject: [PATCH 2/2] fix(helm): fix style problem --- pkg/kube/client.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/kube/client.go b/pkg/kube/client.go index a6994e7b7..902ab5b1c 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -465,9 +465,8 @@ func (c *Client) Update(original, target ResourceList, force bool) (*Result, err if len(updateErrors) != 0 { return res, errors.Errorf(strings.Join(updateErrors, " && ")) - } else { - return res, nil } + return res, nil } // Delete deletes Kubernetes resources specified in the resources list with