fix: `helmfile diff` should not leave temp values files (#525)
Fixes #503 once again. A follow-up to #520 which was incomplete.
This commit is contained in:
parent
57df25c3ff
commit
3edc7d6f33
|
|
@ -67,3 +67,7 @@ func (r ReleaseSpec) Clone() (*ReleaseSpec, error) {
|
|||
|
||||
return &deserialized, nil
|
||||
}
|
||||
|
||||
func (r ReleaseSpec) Desired() bool {
|
||||
return r.Installed == nil || *r.Installed
|
||||
}
|
||||
|
|
|
|||
|
|
@ -568,12 +568,14 @@ type diffPrepareResult struct {
|
|||
}
|
||||
|
||||
func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValues []string, concurrency int, detailedExitCode, suppressSecrets bool) ([]diffPrepareResult, []error) {
|
||||
releases := []ReleaseSpec{}
|
||||
for _, r := range st.Releases {
|
||||
if r.Installed == nil || *r.Installed {
|
||||
releases = append(releases, r)
|
||||
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 diffPrepareResult, numReleases)
|
||||
|
|
@ -586,7 +588,7 @@ func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValu
|
|||
numReleases,
|
||||
func() {
|
||||
for i := 0; i < numReleases; i++ {
|
||||
jobs <- &releases[i]
|
||||
jobs <- releases[i]
|
||||
}
|
||||
close(jobs)
|
||||
},
|
||||
|
|
|
|||
|
|
@ -973,6 +973,95 @@ func TestHelmState_SyncReleasesCleanup(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestHelmState_DiffReleasesCleanup(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
releases []ReleaseSpec
|
||||
helm *mockHelmExec
|
||||
expectedNumRemovedFiles int
|
||||
}{
|
||||
{
|
||||
name: "normal release",
|
||||
releases: []ReleaseSpec{
|
||||
{
|
||||
Name: "releaseName",
|
||||
Chart: "foo",
|
||||
},
|
||||
},
|
||||
helm: &mockHelmExec{},
|
||||
expectedNumRemovedFiles: 0,
|
||||
},
|
||||
{
|
||||
name: "inline values",
|
||||
releases: []ReleaseSpec{
|
||||
{
|
||||
Name: "releaseName",
|
||||
Chart: "foo",
|
||||
Values: []interface{}{
|
||||
map[interface{}]interface{}{
|
||||
"someList": "a,b,c",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
helm: &mockHelmExec{},
|
||||
expectedNumRemovedFiles: 1,
|
||||
},
|
||||
{
|
||||
name: "inline values and values file",
|
||||
releases: []ReleaseSpec{
|
||||
{
|
||||
Name: "releaseName",
|
||||
Chart: "foo",
|
||||
Values: []interface{}{
|
||||
map[interface{}]interface{}{
|
||||
"someList": "a,b,c",
|
||||
},
|
||||
"someFile",
|
||||
},
|
||||
},
|
||||
},
|
||||
helm: &mockHelmExec{},
|
||||
expectedNumRemovedFiles: 2,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
numRemovedFiles := 0
|
||||
state := &HelmState{
|
||||
Releases: tt.releases,
|
||||
logger: logger,
|
||||
readFile: func(f string) ([]byte, error) {
|
||||
if f != "someFile" {
|
||||
return nil, fmt.Errorf("unexpected file to read: %s", f)
|
||||
}
|
||||
someFileContent := []byte(`foo: bar
|
||||
`)
|
||||
return someFileContent, nil
|
||||
},
|
||||
removeFile: func(f string) error {
|
||||
numRemovedFiles += 1
|
||||
return nil
|
||||
},
|
||||
fileExists: func(f string) (bool, error) {
|
||||
return true, nil
|
||||
},
|
||||
}
|
||||
if _, errs := state.DiffReleases(tt.helm, []string{}, 1, false, false, false); errs != nil && len(errs) > 0 {
|
||||
t.Errorf("unexpected errors: %v", errs)
|
||||
}
|
||||
|
||||
if errs := state.Clean(); errs != nil && len(errs) > 0 {
|
||||
t.Errorf("unexpected errors: %v", errs)
|
||||
}
|
||||
|
||||
if numRemovedFiles != tt.expectedNumRemovedFiles {
|
||||
t.Errorf("unexpected number of removed files: expected %d, got %d", tt.expectedNumRemovedFiles, numRemovedFiles)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestHelmState_UpdateDeps(t *testing.T) {
|
||||
state := &HelmState{
|
||||
basePath: "/src",
|
||||
|
|
|
|||
Loading…
Reference in New Issue