diff --git a/pkg/action/install.go b/pkg/action/install.go index f14875368..859f4dfee 100644 --- a/pkg/action/install.go +++ b/pkg/action/install.go @@ -225,20 +225,22 @@ func (i *Install) Run(chrt *chart.Chart, vals map[string]interface{}) (*release. return nil, errors.Wrap(err, "unable to build kubernetes objects from release manifest") } - // Bail out here if it is a dry run - if i.DryRun { - rel.Info.Description = "Dry run complete" - return rel, nil - } - // Install requires an extra validation step of checking that resources // don't already exist before we actually create resources. If we continue // forward and create the release object with resources that already exist, // we'll end up in a state where we will delete those resources upon // deleting the release because the manifest will be pointing at that // resource - if err := existingResourceConflict(resources); err != nil { - return nil, errors.Wrap(err, "rendered manifests contain a resource that already exists. Unable to continue with install") + if !i.ClientOnly { + if err := existingResourceConflict(resources); err != nil { + return nil, errors.Wrap(err, "rendered manifests contain a resource that already exists. Unable to continue with install") + } + } + + // Bail out here if it is a dry run + if i.DryRun { + rel.Info.Description = "Dry run complete" + return rel, nil } // If Replace is true, we need to supercede the last release. diff --git a/pkg/action/upgrade.go b/pkg/action/upgrade.go index 91d31b95c..3d53ff99e 100644 --- a/pkg/action/upgrade.go +++ b/pkg/action/upgrade.go @@ -199,12 +199,6 @@ func (u *Upgrade) performUpgrade(originalRelease, upgradedRelease *release.Relea return upgradedRelease, errors.Wrap(err, "unable to build kubernetes objects from new release manifest") } - if u.DryRun { - u.cfg.Log("dry run for %s", upgradedRelease.Name) - upgradedRelease.Info.Description = "Dry run complete" - return upgradedRelease, nil - } - // Do a basic diff using gvk + name to figure out what new resources are being created so we can validate they don't already exist existingResources := make(map[string]bool) for _, r := range current { @@ -222,6 +216,12 @@ func (u *Upgrade) performUpgrade(originalRelease, upgradedRelease *release.Relea return nil, errors.Wrap(err, "rendered manifests contain a new resource that already exists. Unable to continue with update") } + if u.DryRun { + u.cfg.Log("dry run for %s", upgradedRelease.Name) + upgradedRelease.Info.Description = "Dry run complete" + return upgradedRelease, nil + } + u.cfg.Log("creating upgraded release for %s", upgradedRelease.Name) if err := u.cfg.Releases.Create(upgradedRelease); err != nil { return nil, err diff --git a/pkg/kube/client.go b/pkg/kube/client.go index 3c53801e2..62112060b 100644 --- a/pkg/kube/client.go +++ b/pkg/kube/client.go @@ -191,9 +191,13 @@ func (c *Client) Update(original, target ResourceList, force bool) (*Result, err for _, info := range original.Difference(target) { c.Log("Deleting %q in %s...", info.Name, info.Namespace) res.Deleted = append(res.Deleted, info) - if err := deleteResource(info); err != nil && !apierrors.IsNotFound(err) { - c.Log("Failed to delete %q, err: %s", info.Name, err) - return res, errors.Wrapf(err, "Failed to delete %q", info.Name) + if err := deleteResource(info); err != nil { + if apierrors.IsNotFound(err) { + c.Log("Attempted to delete %q, but the resource was missing", info.Name) + } else { + c.Log("Failed to delete %q, err: %s", info.Name, err) + return res, errors.Wrapf(err, "Failed to delete %q", info.Name) + } } } return res, nil