Skip to content

Commit

Permalink
Merge pull request roboll#223 from mumoshu/show-which-release-failed
Browse files Browse the repository at this point in the history
feat: emit error message containing which release in which helmfile an upgrade failed
  • Loading branch information
mumoshu authored Aug 23, 2018
2 parents 0541731 + 313b5de commit a5d42e7
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 11 deletions.
11 changes: 8 additions & 3 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -519,19 +519,24 @@ func loadDesiredStateFromFile(c *cli.Context, file string) (*state.HelmState, he
return st, helmexec.New(logger, kubeContext), false, nil
}

func clean(state *state.HelmState, errs []error) error {
func clean(st *state.HelmState, errs []error) error {
if errs == nil {
errs = []error{}
}

cleanErrs := state.Clean()
cleanErrs := st.Clean()
if cleanErrs != nil {
errs = append(errs, cleanErrs...)
}

if errs != nil && len(errs) > 0 {
for _, err := range errs {
fmt.Printf("err: %s\n", err.Error())
switch e := err.(type) {
case *state.ReleaseError:
fmt.Printf("err: release \"%s\" in \"%s\" failed: %v\n", e.Name, st.FilePath, e)
default:
fmt.Printf("err: %v\n", e)
}
}
switch e := errs[0].(type) {
case *exec.ExitError:
Expand Down
25 changes: 17 additions & 8 deletions state/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (
// HelmState structure for the helmfile
type HelmState struct {
BaseChartPath string
file string
FilePath string
HelmDefaults HelmSpec `yaml:"helmDefaults"`
Context string `yaml:"context"`
DeprecatedReleases []ReleaseSpec `yaml:"charts"`
Expand Down Expand Up @@ -100,7 +100,7 @@ func readFromYaml(content []byte, file string, logger *zap.SugaredLogger) (*Helm
if err := yaml.UnmarshalStrict(content, &state); err != nil {
return nil, err
}
state.file = file
state.FilePath = file

if len(state.DeprecatedReleases) > 0 {
if len(state.Releases) > 0 {
Expand Down Expand Up @@ -202,12 +202,21 @@ func (state *HelmState) SyncRepos(helm helmexec.Interface) []error {
return nil
}

type ReleaseError struct {
*ReleaseSpec
underlying error
}

func (e *ReleaseError) Error() string {
return e.underlying.Error()
}

// SyncReleases wrapper for executing helm upgrade on the releases
func (state *HelmState) SyncReleases(helm helmexec.Interface, additionalValues []string, workerLimit int) []error {
errs := []error{}
jobQueue := make(chan *ReleaseSpec)
doneQueue := make(chan bool)
errQueue := make(chan error)
errQueue := make(chan *ReleaseError)

if workerLimit < 1 {
workerLimit = len(state.Releases)
Expand All @@ -218,7 +227,7 @@ func (state *HelmState) SyncReleases(helm helmexec.Interface, additionalValues [
state.applyDefaultsTo(release)
flags, flagsErr := state.flagsForUpgrade(helm, state.BaseChartPath, release)
if flagsErr != nil {
errQueue <- flagsErr
errQueue <- &ReleaseError{release, flagsErr}
doneQueue <- true
continue
}
Expand All @@ -227,12 +236,12 @@ func (state *HelmState) SyncReleases(helm helmexec.Interface, additionalValues [
for _, value := range additionalValues {
valfile, err := filepath.Abs(value)
if err != nil {
errQueue <- err
errQueue <- &ReleaseError{release, err}
haveValueErr = true
}

if _, err := os.Stat(valfile); os.IsNotExist(err) {
errQueue <- err
errQueue <- &ReleaseError{release, err}
haveValueErr = true
}
flags = append(flags, "--values", valfile)
Expand All @@ -245,7 +254,7 @@ func (state *HelmState) SyncReleases(helm helmexec.Interface, additionalValues [

chart := normalizeChart(state.BaseChartPath, release.Chart)
if err := helm.SyncRelease(release.Name, chart, flags...); err != nil {
errQueue <- err
errQueue <- &ReleaseError{release, err}
}
doneQueue <- true
}
Expand Down Expand Up @@ -605,7 +614,7 @@ func (state *HelmState) FilterReleases(labels []string) error {
filteredReleases = append(filteredReleases, r)
}
if len(filteredReleases) == 0 {
state.logger.Debugf("specified selector did not match any releases in %s\n", state.file)
state.logger.Debugf("specified selector did not match any releases in %s\n", state.FilePath)
return nil
}
state.Releases = filteredReleases
Expand Down

0 comments on commit a5d42e7

Please sign in to comment.