From bc85db3a196d1f372e91528056dcdcb434903bb9 Mon Sep 17 00:00:00 2001 From: Pavel Eremeev Date: Sat, 16 Mar 2019 15:22:57 +0000 Subject: [PATCH 1/2] refactor(*): make "not found" error message user-friendly Signed-off-by: Pavel Eremeev --- pkg/kube/client.go | 10 ++++++++-- pkg/kube/client_test.go | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/pkg/kube/client.go b/pkg/kube/client.go index 955c75ab1..3830c4eef 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -333,9 +333,15 @@ func (c *Client) Update(namespace string, originalReader, targetReader io.Reader } originalInfo := original.Get(info) + + // Resource exists in the current cluster state, but not in the current helm configuration + // See: https://github.com/helm/helm/issues/1193 for more info if originalInfo == nil { - kind := info.Mapping.GroupVersionKind.Kind - return fmt.Errorf("no %s with the name %q found", kind, info.Name) + return fmt.Errorf( + "%s %q is not managed by Helm; delete the resource from the current cluster state to let Helm manage it", + info.Mapping.GroupVersionKind.Kind, + info.Name, + ) } if err := updateResource(c, info, originalInfo.Object, force, recreate); err != nil { diff --git a/pkg/kube/client_test.go b/pkg/kube/client_test.go index 89e630bb3..5bd9449b7 100644 --- a/pkg/kube/client_test.go +++ b/pkg/kube/client_test.go @@ -224,6 +224,43 @@ func TestUpdate(t *testing.T) { } } +func TestUpdateNonManagedResourceError(t *testing.T) { + actual := newPodList("starfish") + current := newPodList() + target := newPodList("starfish") + + tf := cmdtesting.NewTestFactory() + defer tf.Cleanup() + + tf.UnstructuredClient = &fake.RESTClient{ + NegotiatedSerializer: unstructuredSerializer, + Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { + p, m := req.URL.Path, req.Method + t.Logf("got request %s %s", p, m) + switch { + case p == "/namespaces/default/pods/starfish" && m == "GET": + return newResponse(200, &actual.Items[0]) + default: + t.Fatalf("unexpected request: %s %s", req.Method, req.URL.Path) + return nil, nil + } + }), + } + + c := &Client{ + Factory: tf, + Log: nopLogger, + } + + if err := c.Update(v1.NamespaceDefault, objBody(¤t), objBody(&target), false, false, 0, false); err != nil { + if err.Error() != "Pod \"starfish\" is not managed by Helm; delete the resource from the current cluster state to let Helm manage it" { + t.Fatal(err) + } + } else { + t.Fatalf("error expected") + } +} + func TestBuild(t *testing.T) { tests := []struct { name string From 535f9cece5c4147c74a88106f83690b197806dfa Mon Sep 17 00:00:00 2001 From: Pavel Eremeev Date: Mon, 25 Mar 2019 12:02:44 +0000 Subject: [PATCH 2/2] refactor(*): update error message Signed-off-by: Pavel Eremeev --- pkg/kube/client.go | 9 ++++++--- pkg/kube/client_test.go | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/pkg/kube/client.go b/pkg/kube/client.go index 3830c4eef..37c1d53e4 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -334,11 +334,14 @@ func (c *Client) Update(namespace string, originalReader, targetReader io.Reader originalInfo := original.Get(info) - // Resource exists in the current cluster state, but not in the current helm configuration - // See: https://github.com/helm/helm/issues/1193 for more info + // The resource already exists in the cluster, but it wasn't defined in the previous release. + // In this case, we consider it to be a resource that was previously un-managed by the release and error out, + // asking for the user to intervene. + // + // See https://github.com/helm/helm/issues/1193 for more info. if originalInfo == nil { return fmt.Errorf( - "%s %q is not managed by Helm; delete the resource from the current cluster state to let Helm manage it", + "kind %s with the name %q already exists in the cluster and wasn't defined in the previous release. Before upgrading, please either delete the resource from the cluster or remove it from the chart", info.Mapping.GroupVersionKind.Kind, info.Name, ) diff --git a/pkg/kube/client_test.go b/pkg/kube/client_test.go index 5bd9449b7..401ac7e58 100644 --- a/pkg/kube/client_test.go +++ b/pkg/kube/client_test.go @@ -253,7 +253,7 @@ func TestUpdateNonManagedResourceError(t *testing.T) { } if err := c.Update(v1.NamespaceDefault, objBody(¤t), objBody(&target), false, false, 0, false); err != nil { - if err.Error() != "Pod \"starfish\" is not managed by Helm; delete the resource from the current cluster state to let Helm manage it" { + if err.Error() != "kind Pod with the name \"starfish\" already exists in the cluster and wasn't defined in the previous release. Before upgrading, please either delete the resource from the cluster or remove it from the chart" { t.Fatal(err) } } else {