fix: helmfile should not complain on missing values files for undesired releases (#526)

Fixes #519
This commit is contained in:
KUOKA Yusuke 2019-04-01 22:29:16 +09:00 committed by GitHub
parent 3edc7d6f33
commit eb36e93c5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 65 additions and 4 deletions

View File

@ -202,7 +202,14 @@ type syncPrepareResult struct {
// SyncReleases wrapper for executing helm upgrade on the releases
func (st *HelmState) prepareSyncReleases(helm helmexec.Interface, additionalValues []string, concurrency int) ([]syncPrepareResult, []error) {
releases := st.Releases
releases := []*ReleaseSpec{}
for i, _ := range st.Releases {
if !st.Releases[i].Desired() {
continue
}
releases = append(releases, &st.Releases[i])
}
numReleases := len(releases)
jobs := make(chan *ReleaseSpec, numReleases)
results := make(chan syncPrepareResult, numReleases)
@ -215,7 +222,7 @@ func (st *HelmState) prepareSyncReleases(helm helmexec.Interface, additionalValu
numReleases,
func() {
for i := 0; i < numReleases; i++ {
jobs <- &releases[i]
jobs <- releases[i]
}
close(jobs)
},
@ -284,7 +291,7 @@ func (st *HelmState) DetectReleasesToBeDeleted(helm helmexec.Interface) ([]*Rele
detected := []*ReleaseSpec{}
for i, _ := range st.Releases {
release := st.Releases[i]
if release.Installed != nil && !*release.Installed {
if !release.Desired() {
installed, err := isReleaseInstalled(helm, release)
if err != nil {
return nil, err
@ -322,7 +329,7 @@ func (st *HelmState) SyncReleases(helm helmexec.Interface, additionalValues []st
flags := prep.flags
chart := normalizeChart(st.basePath, release.Chart)
var relErr *ReleaseError
if release.Installed != nil && !*release.Installed {
if !release.Desired() {
installed, err := isReleaseInstalled(helm, *release)
if err != nil {
relErr = &ReleaseError{release, err}
@ -457,6 +464,10 @@ func (st *HelmState) TemplateReleases(helm helmexec.Interface, additionalValues
}
for _, release := range st.Releases {
if !release.Desired() {
continue
}
flags, err := st.flagsForTemplate(helm, &release)
if err != nil {
errs = append(errs, err)
@ -513,6 +524,10 @@ func (st *HelmState) LintReleases(helm helmexec.Interface, additionalValues []st
}
for _, release := range st.Releases {
if !release.Desired() {
continue
}
flags, err := st.flagsForLint(helm, &release)
if err != nil {
errs = append(errs, err)
@ -717,6 +732,9 @@ func (st *HelmState) DiffReleases(helm helmexec.Interface, additionalValues []st
func (st *HelmState) ReleaseStatuses(helm helmexec.Interface, workerLimit int) []error {
return st.scatterGatherReleases(helm, workerLimit, func(release ReleaseSpec) error {
if !release.Desired() {
return nil
}
return helm.ReleaseStatus(release.Name)
})
}
@ -742,6 +760,10 @@ func (st *HelmState) DeleteReleases(helm helmexec.Interface, purge bool) []error
// TestReleases wrapper for executing helm test on the releases
func (st *HelmState) TestReleases(helm helmexec.Interface, cleanup bool, timeout int, concurrency int) []error {
return st.scatterGatherReleases(helm, concurrency, func(release ReleaseSpec) error {
if !release.Desired() {
return nil
}
flags := []string{}
if cleanup {
flags = append(flags, "--cleanup")

View File

@ -1126,12 +1126,51 @@ func TestHelmState_ReleaseStatuses(t *testing.T) {
helm: &mockHelmExec{},
wantErr: true,
},
{
name: "complain missing values file for desired release",
releases: []ReleaseSpec{
{
Name: "error",
Values: []interface{}{
"foo.yaml",
},
},
},
helm: &mockHelmExec{},
wantErr: true,
},
{
name: "should not complain missing values file for undesired release",
releases: []ReleaseSpec{
{
Name: "error",
Values: []interface{}{
"foo.yaml",
},
Installed: boolValue(false),
},
},
helm: &mockHelmExec{},
wantErr: false,
},
}
for _, tt := range tests {
i := func(t *testing.T) {
state := &HelmState{
Releases: tt.releases,
logger: logger,
fileExists: func(f string) (bool, error) {
if f != "foo.yaml" {
return false, fmt.Errorf("unexpected file: %s", f)
}
return true, nil
},
readFile: func(f string) ([]byte, error) {
if f != "foo.yaml" {
return nil, fmt.Errorf("unexpected file: %s", f)
}
return []byte{}, nil
},
}
errs := state.ReleaseStatuses(tt.helm, 1)
if (errs != nil) != tt.wantErr {