From c886c4bb6b961d33c06f748d611d0ce36321d389 Mon Sep 17 00:00:00 2001 From: Justin Barrick Date: Thu, 25 Oct 2018 21:36:20 -0700 Subject: [PATCH] Update resources that already exist instead of failing. Fixes #3189 This patch updates resources that already exist when running helm install or helm upgrade. Previously, Helm would fail with an error: ``` Error: release jdeploy5 failed: services "deploytest" already exists ``` After this patch, the resources will be updated instead of failing the release. Signed-off-by: Justin Barrick --- pkg/kube/client.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pkg/kube/client.go b/pkg/kube/client.go index 6509a1583..e32ca7a2d 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -99,7 +99,17 @@ func (c *Client) Create(namespace string, reader io.Reader, timeout int64, shoul return buildErr } c.Log("creating %d resource(s)", len(infos)) - if err := perform(infos, createResource); err != nil { + if err := perform(infos, func(info *resource.Info) error { + err := createResource(info) + if err != nil { + if errors.IsAlreadyExists(err) { + c.Log("Resource already exists, updating: %s", err) + return updateResource(c, info, info.Object, true, false) + } + return err + } + return nil + }); err != nil { return err } if shouldWait {