fix: helmfile should not complain on missing values files for undesired releases (#526)
Fixes #519
This commit is contained in:
		
							parent
							
								
									3edc7d6f33
								
							
						
					
					
						commit
						eb36e93c5a
					
				|  | @ -202,7 +202,14 @@ type syncPrepareResult struct { | ||||||
| 
 | 
 | ||||||
| // SyncReleases wrapper for executing helm upgrade on the releases
 | // SyncReleases wrapper for executing helm upgrade on the releases
 | ||||||
| func (st *HelmState) prepareSyncReleases(helm helmexec.Interface, additionalValues []string, concurrency int) ([]syncPrepareResult, []error) { | 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) | 	numReleases := len(releases) | ||||||
| 	jobs := make(chan *ReleaseSpec, numReleases) | 	jobs := make(chan *ReleaseSpec, numReleases) | ||||||
| 	results := make(chan syncPrepareResult, numReleases) | 	results := make(chan syncPrepareResult, numReleases) | ||||||
|  | @ -215,7 +222,7 @@ func (st *HelmState) prepareSyncReleases(helm helmexec.Interface, additionalValu | ||||||
| 		numReleases, | 		numReleases, | ||||||
| 		func() { | 		func() { | ||||||
| 			for i := 0; i < numReleases; i++ { | 			for i := 0; i < numReleases; i++ { | ||||||
| 				jobs <- &releases[i] | 				jobs <- releases[i] | ||||||
| 			} | 			} | ||||||
| 			close(jobs) | 			close(jobs) | ||||||
| 		}, | 		}, | ||||||
|  | @ -284,7 +291,7 @@ func (st *HelmState) DetectReleasesToBeDeleted(helm helmexec.Interface) ([]*Rele | ||||||
| 	detected := []*ReleaseSpec{} | 	detected := []*ReleaseSpec{} | ||||||
| 	for i, _ := range st.Releases { | 	for i, _ := range st.Releases { | ||||||
| 		release := st.Releases[i] | 		release := st.Releases[i] | ||||||
| 		if release.Installed != nil && !*release.Installed { | 		if !release.Desired() { | ||||||
| 			installed, err := isReleaseInstalled(helm, release) | 			installed, err := isReleaseInstalled(helm, release) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return nil, err | 				return nil, err | ||||||
|  | @ -322,7 +329,7 @@ func (st *HelmState) SyncReleases(helm helmexec.Interface, additionalValues []st | ||||||
| 				flags := prep.flags | 				flags := prep.flags | ||||||
| 				chart := normalizeChart(st.basePath, release.Chart) | 				chart := normalizeChart(st.basePath, release.Chart) | ||||||
| 				var relErr *ReleaseError | 				var relErr *ReleaseError | ||||||
| 				if release.Installed != nil && !*release.Installed { | 				if !release.Desired() { | ||||||
| 					installed, err := isReleaseInstalled(helm, *release) | 					installed, err := isReleaseInstalled(helm, *release) | ||||||
| 					if err != nil { | 					if err != nil { | ||||||
| 						relErr = &ReleaseError{release, err} | 						relErr = &ReleaseError{release, err} | ||||||
|  | @ -457,6 +464,10 @@ func (st *HelmState) TemplateReleases(helm helmexec.Interface, additionalValues | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	for _, release := range st.Releases { | 	for _, release := range st.Releases { | ||||||
|  | 		if !release.Desired() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		flags, err := st.flagsForTemplate(helm, &release) | 		flags, err := st.flagsForTemplate(helm, &release) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			errs = append(errs, err) | 			errs = append(errs, err) | ||||||
|  | @ -513,6 +524,10 @@ func (st *HelmState) LintReleases(helm helmexec.Interface, additionalValues []st | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	for _, release := range st.Releases { | 	for _, release := range st.Releases { | ||||||
|  | 		if !release.Desired() { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		flags, err := st.flagsForLint(helm, &release) | 		flags, err := st.flagsForLint(helm, &release) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			errs = append(errs, err) | 			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 { | func (st *HelmState) ReleaseStatuses(helm helmexec.Interface, workerLimit int) []error { | ||||||
| 	return st.scatterGatherReleases(helm, workerLimit, func(release ReleaseSpec) error { | 	return st.scatterGatherReleases(helm, workerLimit, func(release ReleaseSpec) error { | ||||||
|  | 		if !release.Desired() { | ||||||
|  | 			return nil | ||||||
|  | 		} | ||||||
| 		return helm.ReleaseStatus(release.Name) | 		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
 | // TestReleases wrapper for executing helm test on the releases
 | ||||||
| func (st *HelmState) TestReleases(helm helmexec.Interface, cleanup bool, timeout int, concurrency int) []error { | func (st *HelmState) TestReleases(helm helmexec.Interface, cleanup bool, timeout int, concurrency int) []error { | ||||||
| 	return st.scatterGatherReleases(helm, concurrency, func(release ReleaseSpec) error { | 	return st.scatterGatherReleases(helm, concurrency, func(release ReleaseSpec) error { | ||||||
|  | 		if !release.Desired() { | ||||||
|  | 			return nil | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		flags := []string{} | 		flags := []string{} | ||||||
| 		if cleanup { | 		if cleanup { | ||||||
| 			flags = append(flags, "--cleanup") | 			flags = append(flags, "--cleanup") | ||||||
|  |  | ||||||
|  | @ -1126,12 +1126,51 @@ func TestHelmState_ReleaseStatuses(t *testing.T) { | ||||||
| 			helm:    &mockHelmExec{}, | 			helm:    &mockHelmExec{}, | ||||||
| 			wantErr: true, | 			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 { | 	for _, tt := range tests { | ||||||
| 		i := func(t *testing.T) { | 		i := func(t *testing.T) { | ||||||
| 			state := &HelmState{ | 			state := &HelmState{ | ||||||
| 				Releases: tt.releases, | 				Releases: tt.releases, | ||||||
| 				logger:   logger, | 				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) | 			errs := state.ReleaseStatuses(tt.helm, 1) | ||||||
| 			if (errs != nil) != tt.wantErr { | 			if (errs != nil) != tt.wantErr { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue