Add support for adhoc dependency to local chart

Helmfile has been providing a feature called "adhoc chart dependency" that basially enabled you to add Chart.yaml `dependencies` entry adhocly without forking or modifying the chart.

It was missing the support for using a local chart as the adhoc dependency. This patch adds that.

Usage:

`releases[].dependencies[].chart` is enhanced to accept the fs path to the local chart:

```
releases:
- name: foo
  chart: ./path/to/foo
  dependencies:
  - chart: ./path/to/bar
```

Resolves #1762
This commit is contained in:
Yusuke Kuoka
2021-04-10 16:09:27 +09:00
parent 74cd2bc147
commit 81b04fcb8b
3 changed files with 28 additions and 27 deletions
+25 -26
View File
@@ -4,7 +4,6 @@ import (
"fmt"
"os"
"path/filepath"
"strings"
"github.com/roboll/helmfile/pkg/helmexec"
"github.com/roboll/helmfile/pkg/remote"
@@ -85,7 +84,7 @@ func (st *HelmState) goGetterChart(chart, dir, cacheDir string, force bool) (str
}
func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSpec, chart string, workerIndex int) (*Chartify, func(), error) {
chartify := &Chartify{
c := &Chartify{
Opts: &chartify.ChartifyOpts{
WorkaroundOutputDirIssue: true,
EnableKustomizeAlphaPlugins: true,
@@ -110,25 +109,25 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
}
for _, d := range release.Dependencies {
var dep string
chart := d.Chart
if st.directoryExistsAt(chart) {
var err error
if d.Alias != "" {
dep += d.Alias + "="
} else {
a := strings.Split(d.Chart, "/")
chart := a[len(a)-1]
dep += chart + "="
// Otherwise helm-dependency-up on the temporary chart generated by chartify ends up errors like:
// Error: directory /tmp/chartify945964195/myapp-57fb4495cf/test/integration/charts/httpbin not found]
// which is due to that the temporary chart is generated outside of the current working directory/basePath,
// and therefore the relative path in `chart` points to somewhere inexistent.
chart, err = filepath.Abs(filepath.Join(st.basePath, chart))
if err != nil {
return nil, clean, err
}
}
dep += d.Chart
if d.Version != "" {
dep += ":" + d.Version
}
chartify.Opts.AdhocChartDependencies = append(chartify.Opts.AdhocChartDependencies, dep)
c.Opts.AdhocChartDependencies = append(c.Opts.AdhocChartDependencies, chartify.ChartDependency{
Alias: d.Alias,
Chart: chart,
Version: d.Version,
})
shouldRun = true
}
@@ -143,7 +142,7 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
filesNeedCleaning = append(filesNeedCleaning, generatedFiles...)
for _, f := range generatedFiles {
chartify.Opts.JsonPatches = append(chartify.Opts.JsonPatches, f)
c.Opts.JsonPatches = append(c.Opts.JsonPatches, f)
}
shouldRun = true
@@ -157,7 +156,7 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
}
for _, f := range generatedFiles {
chartify.Opts.StrategicMergePatches = append(chartify.Opts.StrategicMergePatches, f)
c.Opts.StrategicMergePatches = append(c.Opts.StrategicMergePatches, f)
}
filesNeedCleaning = append(filesNeedCleaning, generatedFiles...)
@@ -173,7 +172,7 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
}
for _, f := range generatedFiles {
chartify.Opts.Transformers = append(chartify.Opts.Transformers, f)
c.Opts.Transformers = append(c.Opts.Transformers, f)
}
filesNeedCleaning = append(filesNeedCleaning, generatedFiles...)
@@ -182,7 +181,7 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
}
if release.ForceNamespace != "" {
chartify.Opts.OverrideNamespace = release.ForceNamespace
c.Opts.OverrideNamespace = release.ForceNamespace
shouldRun = true
}
@@ -195,11 +194,11 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
filesNeedCleaning = append(filesNeedCleaning, generatedFiles...)
chartify.Opts.ValuesFiles = generatedFiles
chartify.Opts.TemplateData = st.newReleaseTemplateData(release)
chartify.Opts.TemplateFuncs = st.newReleaseTemplateFuncMap(dir)
c.Opts.ValuesFiles = generatedFiles
c.Opts.TemplateData = st.newReleaseTemplateData(release)
c.Opts.TemplateFuncs = st.newReleaseTemplateFuncMap(dir)
return chartify, clean, nil
return c, clean, nil
}
return nil, clean, nil