Skip to content

Commit

Permalink
fix: Do not skip passing values files when adhocDependencies/jsonPatc…
Browse files Browse the repository at this point in the history
…hes/jsonPatches exist

This is a follow-up for #1172
  • Loading branch information
mumoshu committed May 27, 2020
1 parent 16288df commit 68432b1
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 19 deletions.
22 changes: 18 additions & 4 deletions pkg/state/helmx.go
@@ -1,6 +1,7 @@
package state

import (
"github.com/roboll/helmfile/pkg/helmexec"
"github.com/variantdev/chartify"
"strings"
)
Expand All @@ -19,11 +20,15 @@ func (st *HelmState) appendHelmXFlags(flags []string, release *ReleaseSpec) ([]s
return flags, nil
}

func (st *HelmState) PrepareChartify(release *ReleaseSpec) (bool, *chartify.ChartifyOpts) {
func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSpec, workerIndex int) (bool, *chartify.ChartifyOpts, error) {
var opts chartify.ChartifyOpts

var shouldRun bool

opts.EnableKustomizeAlphaPlugins = true

opts.ChartVersion = release.Version

for _, d := range release.Dependencies {
var dep string

Expand Down Expand Up @@ -52,7 +57,7 @@ func (st *HelmState) PrepareChartify(release *ReleaseSpec) (bool, *chartify.Char
if len(jsonPatches) > 0 {
generatedFiles, err := st.generateTemporaryValuesFiles(jsonPatches, release.MissingFileHandler)
if err != nil {
return false, nil
return false, nil, err
}

for _, f := range generatedFiles {
Expand All @@ -68,7 +73,7 @@ func (st *HelmState) PrepareChartify(release *ReleaseSpec) (bool, *chartify.Char
if len(strategicMergePatches) > 0 {
generatedFiles, err := st.generateTemporaryValuesFiles(strategicMergePatches, release.MissingFileHandler)
if err != nil {
return false, nil
return false, nil, err
}

for _, f := range generatedFiles {
Expand All @@ -80,5 +85,14 @@ func (st *HelmState) PrepareChartify(release *ReleaseSpec) (bool, *chartify.Char
shouldRun = true
}

return shouldRun, &opts
if shouldRun {
generatedFiles, err := st.generateValuesFiles(helm, release, workerIndex)
if err != nil {
return false, nil, err
}

opts.ValuesFiles = generatedFiles
}

return shouldRun, &opts, nil
}
76 changes: 61 additions & 15 deletions pkg/state/state.go
Expand Up @@ -718,6 +718,7 @@ func PrepareCharts(helm helmexec.Interface, st *HelmState, dir string, concurren
type downloadResults struct {
releaseName string
chartPath string
err error
}
errs := []error{}

Expand All @@ -739,11 +740,17 @@ func PrepareCharts(helm helmexec.Interface, st *HelmState, dir string, concurren
}
close(jobQueue)
},
func(_ int) {
func(workerIndex int) {
for release := range jobQueue {
var chartPath string

if shouldChartify, opts := st.PrepareChartify(release); shouldChartify {
shouldChartify, opts, err := st.PrepareChartify(helm, release, workerIndex)
if err != nil {
results <- &downloadResults{err: err}
return
}

if shouldChartify {
c := chartify.New(
chartify.HelmBin(st.DefaultHelmBinary),
chartify.UseHelm3(helm3),
Expand Down Expand Up @@ -787,12 +794,18 @@ func PrepareCharts(helm helmexec.Interface, st *HelmState, dir string, concurren
}
}

results <- &downloadResults{release.Name, chartPath}
results <- &downloadResults{releaseName: release.Name, chartPath: chartPath}
}
},
func() {
for i := 0; i < len(st.Releases); i++ {
downloadRes := <-results

if downloadRes.err != nil {
errs = append(errs, downloadRes.err)

return
}
temp[downloadRes.releaseName] = downloadRes.chartPath
}
},
Expand Down Expand Up @@ -1886,12 +1899,7 @@ func (st *HelmState) generateTemporaryValuesFiles(values []interface{}, missingF
return generatedFiles, nil
}

func (st *HelmState) namespaceAndValuesFlags(helm helmexec.Interface, release *ReleaseSpec, workerIndex int) ([]string, error) {
flags := []string{}
if release.Namespace != "" {
flags = append(flags, "--namespace", release.Namespace)
}

func (st *HelmState) generateVanillaValuesFiles(release *ReleaseSpec) ([]string, error) {
values := []interface{}{}
for _, v := range release.Values {
switch typedValue := v.(type) {
Expand All @@ -1918,12 +1926,14 @@ func (st *HelmState) namespaceAndValuesFlags(helm helmexec.Interface, release *R
return nil, err
}

for _, f := range generatedFiles {
flags = append(flags, "--values", f)
}

release.generatedValues = append(release.generatedValues, generatedFiles...)

return generatedFiles, nil
}

func (st *HelmState) generateSecretValuesFiles(helm helmexec.Interface, release *ReleaseSpec, workerIndex int) ([]string, error) {
var generatedFiles []string

for _, value := range release.Secrets {
paths, skip, err := st.storage().resolveFile(release.MissingFileHandler, "secrets", release.ValuesPathPrefix+value)
if err != nil {
Expand All @@ -1944,9 +1954,45 @@ func (st *HelmState) namespaceAndValuesFlags(helm helmexec.Interface, release *R
return nil, err
}

release.generatedValues = append(release.generatedValues, valfile)
flags = append(flags, "--values", valfile)
generatedFiles = append(generatedFiles, valfile)
}

release.generatedValues = append(release.generatedValues, generatedFiles...)

return generatedFiles, nil
}

func (st *HelmState) generateValuesFiles(helm helmexec.Interface, release *ReleaseSpec, workerIndex int) ([]string, error) {
valuesFiles, err := st.generateVanillaValuesFiles(release)
if err != nil {
return nil, err
}

secretValuesFiles, err := st.generateSecretValuesFiles(helm, release, workerIndex)
if err != nil {
return nil, err
}

files := append(valuesFiles, secretValuesFiles...)

return files, nil
}

func (st *HelmState) namespaceAndValuesFlags(helm helmexec.Interface, release *ReleaseSpec, workerIndex int) ([]string, error) {
flags := []string{}
if release.Namespace != "" {
flags = append(flags, "--namespace", release.Namespace)
}

generatedFiles, err := st.generateValuesFiles(helm, release, workerIndex)
if err != nil {
return nil, err
}

for _, f := range generatedFiles {
flags = append(flags, "--values", f)
}

if len(release.SetValues) > 0 {
for _, set := range release.SetValues {
if set.Value != "" {
Expand Down

0 comments on commit 68432b1

Please sign in to comment.