helmfile/state
KUOKA Yusuke 4f83e69bf6
Various U/X improvements for `helmfile apply` (#586)
* Various U/X improvements for `helmfile apply`

This improves the U/X of `helmfile apply`, by allowing you to selectively apply sub-helmfiles.
When you have two or more sub-helmfiles processed, typing `n` to cancel the first doesn't automatically stop the whole helmfile execution.
Instead, it proceeds by diffing the next sub-helmfile, and asks you to apply it, which should be what the user would expect.

To support this workflow, I have suppressed useless exec logs, correct exit status when diff exists in sub-helmfiles but not in the parent helmfile, and made the final error message emitted by helmfile better.

More concretely, this moves more output from `helm` to STDERR and the `debug` log-level.

The overall output from `helmfile` should be a bit more cleaner especially for `apply`, `sync`, `diff` and perhaps other `helmfile` sub-commands, too.

For example, when one of release failed, `helmfile`'s final error message now includes the error message from the failed `helm` execution, like seen in the last line:

```
List of updated releases :
RELEASE   CHART          VERSION
envoy     stable/envoy     1.5.0

List of releases in error :
RELEASE
envoy2
in ./helmfile.yaml: in .helmfiles[0]: in /Users/c-ykuoka/helmfile/helmfile.1.yaml: failed processing release envoy2: helm exited with status 1:
  Error: UPGRADE FAILED: "envoy2" has no deployed releases
```

This way you can better understand what caused helmfile to finally fail.

`helmfile` has been streaminig a lot of stdout and stderr contents from the `helm` commands regardless of the helmfile's log-level. It has been suppressed by default and moved to the `debug` log-level.
You will see that it helps you focus on what was the cause of a failure.

While working on the above, I found an another bug that made `--detailed-exitcode` useless in some case.
That is, `helmfile diff --detailed-exitcode`, when any diff existed only in sub-helmfiles, has been returning an exit code of `1`. It should return `2` when any release had diff and no release had an error, regardless of the target is a sub-helmfile or a parent helmfile. Why? Because that's what `--detailed-exitcode` meant for!

After this PR gets merged, `helmfile diff --detailed-exitcode`  propery return exit code `2` in such cases.

Fixes #543
Resolves #540
2019-05-12 16:26:11 +09:00
..
create.go feat(#502): display summary of upgraded, deleted and error releases (#560) 2019-04-25 13:33:34 +09:00
create_test.go feat: removes dictionary key for subhelm and uses selectorsInherited (#576) 2019-05-06 10:06:32 +09:00
environment.go feat: Environment Secrets (#274) 2018-09-02 21:07:35 +09:00
release.go fix: `helmfile diff` should not leave temp values files (#525) 2019-04-01 22:24:18 +09:00
release_error.go Various U/X improvements for `helmfile apply` (#586) 2019-05-12 16:26:11 +09:00
release_filters.go fix: prevent panicing on invalid selector format (#323) 2018-09-09 17:20:44 +09:00
state.go Various U/X improvements for `helmfile apply` (#586) 2019-05-12 16:26:11 +09:00
state_exec_tmpl.go feat: Release Template (#439) 2019-01-22 01:19:07 +09:00
state_exec_tmpl_test.go feat: Release Template (#439) 2019-01-22 01:19:07 +09:00
state_run.go Simple implementation of the tillerless mode (#531) 2019-04-05 19:02:37 +09:00
state_test.go feat(#344): add sub helmfiles explicit selectors (#567) 2019-05-05 13:38:52 +09:00
types.go feat: Release Template (#439) 2019-01-22 01:19:07 +09:00