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
|
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) {
|
func (st *HelmState) prepareDiffReleases(helm helmexec.Interface, additionalValues []string, concurrency int, detailedExitCode, suppressSecrets bool) ([]diffPrepareResult, []error) {
|
||||||
releases := []ReleaseSpec{}
|
releases := []*ReleaseSpec{}
|
||||||
for _, r := range st.Releases {
|
for i, _ := range st.Releases {
|
||||||
if r.Installed == nil || *r.Installed {
|
if !st.Releases[i].Desired() {
|
||||||
releases = append(releases, r)
|
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 diffPrepareResult, numReleases)
|
results := make(chan diffPrepareResult, numReleases)
|
||||||
|
|
@ -586,7 +588,7 @@ func (st *HelmState) prepareDiffReleases(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)
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
func TestHelmState_UpdateDeps(t *testing.T) {
|
||||||
state := &HelmState{
|
state := &HelmState{
|
||||||
basePath: "/src",
|
basePath: "/src",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue