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:
parent
74cd2bc147
commit
81b04fcb8b
2
go.mod
2
go.mod
|
|
@ -28,7 +28,7 @@ require (
|
||||||
github.com/spf13/cobra v1.1.1
|
github.com/spf13/cobra v1.1.1
|
||||||
github.com/tatsushid/go-prettytable v0.0.0-20141013043238-ed2d14c29939
|
github.com/tatsushid/go-prettytable v0.0.0-20141013043238-ed2d14c29939
|
||||||
github.com/urfave/cli v1.22.5
|
github.com/urfave/cli v1.22.5
|
||||||
github.com/variantdev/chartify v0.7.3
|
github.com/variantdev/chartify v0.8.0
|
||||||
github.com/variantdev/dag v0.0.0-20191028002400-bb0b3c785363
|
github.com/variantdev/dag v0.0.0-20191028002400-bb0b3c785363
|
||||||
github.com/variantdev/vals v0.13.0
|
github.com/variantdev/vals v0.13.0
|
||||||
go.uber.org/multierr v1.6.0
|
go.uber.org/multierr v1.6.0
|
||||||
|
|
|
||||||
2
go.sum
2
go.sum
|
|
@ -581,6 +581,8 @@ github.com/variantdev/chartify v0.7.2 h1:H7a9xD4rfyKkLDhCO/Oj3VfYnJRb92Dqk+GR6vp
|
||||||
github.com/variantdev/chartify v0.7.2/go.mod h1:qF4XzQlkfH/6k2jAi1hLas+lK4zSCa8kY+r5JdmLA68=
|
github.com/variantdev/chartify v0.7.2/go.mod h1:qF4XzQlkfH/6k2jAi1hLas+lK4zSCa8kY+r5JdmLA68=
|
||||||
github.com/variantdev/chartify v0.7.3 h1:uX0mN8PmYHZDWILcg41sQfasJ7TT/CYnYWSmDgsIBIA=
|
github.com/variantdev/chartify v0.7.3 h1:uX0mN8PmYHZDWILcg41sQfasJ7TT/CYnYWSmDgsIBIA=
|
||||||
github.com/variantdev/chartify v0.7.3/go.mod h1:qF4XzQlkfH/6k2jAi1hLas+lK4zSCa8kY+r5JdmLA68=
|
github.com/variantdev/chartify v0.7.3/go.mod h1:qF4XzQlkfH/6k2jAi1hLas+lK4zSCa8kY+r5JdmLA68=
|
||||||
|
github.com/variantdev/chartify v0.8.0 h1:yIBsS/dIUeMjWP8U6JWlT3PM0Lky7en9QBi+MgDu2U8=
|
||||||
|
github.com/variantdev/chartify v0.8.0/go.mod h1:qF4XzQlkfH/6k2jAi1hLas+lK4zSCa8kY+r5JdmLA68=
|
||||||
github.com/variantdev/dag v0.0.0-20191028002400-bb0b3c785363 h1:KrfQBEUn+wEOQ/6UIfoqRDvn+Q/wZridQ7t0G1vQqKE=
|
github.com/variantdev/dag v0.0.0-20191028002400-bb0b3c785363 h1:KrfQBEUn+wEOQ/6UIfoqRDvn+Q/wZridQ7t0G1vQqKE=
|
||||||
github.com/variantdev/dag v0.0.0-20191028002400-bb0b3c785363/go.mod h1:pH1TQsNSLj2uxMo9NNl9zdGy01Wtn+/2MT96BrKmVyE=
|
github.com/variantdev/dag v0.0.0-20191028002400-bb0b3c785363/go.mod h1:pH1TQsNSLj2uxMo9NNl9zdGy01Wtn+/2MT96BrKmVyE=
|
||||||
github.com/variantdev/vals v0.13.0 h1:zdtTBjoWKkUGdFauxETkDVjqWXdjUNwI+ggWcUmpxv8=
|
github.com/variantdev/vals v0.13.0 h1:zdtTBjoWKkUGdFauxETkDVjqWXdjUNwI+ggWcUmpxv8=
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/roboll/helmfile/pkg/helmexec"
|
"github.com/roboll/helmfile/pkg/helmexec"
|
||||||
"github.com/roboll/helmfile/pkg/remote"
|
"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) {
|
func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSpec, chart string, workerIndex int) (*Chartify, func(), error) {
|
||||||
chartify := &Chartify{
|
c := &Chartify{
|
||||||
Opts: &chartify.ChartifyOpts{
|
Opts: &chartify.ChartifyOpts{
|
||||||
WorkaroundOutputDirIssue: true,
|
WorkaroundOutputDirIssue: true,
|
||||||
EnableKustomizeAlphaPlugins: true,
|
EnableKustomizeAlphaPlugins: true,
|
||||||
|
|
@ -110,25 +109,25 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, d := range release.Dependencies {
|
for _, d := range release.Dependencies {
|
||||||
var dep string
|
chart := d.Chart
|
||||||
|
if st.directoryExistsAt(chart) {
|
||||||
|
var err error
|
||||||
|
|
||||||
if d.Alias != "" {
|
// Otherwise helm-dependency-up on the temporary chart generated by chartify ends up errors like:
|
||||||
dep += d.Alias + "="
|
// Error: directory /tmp/chartify945964195/myapp-57fb4495cf/test/integration/charts/httpbin not found]
|
||||||
} else {
|
// which is due to that the temporary chart is generated outside of the current working directory/basePath,
|
||||||
a := strings.Split(d.Chart, "/")
|
// and therefore the relative path in `chart` points to somewhere inexistent.
|
||||||
|
chart, err = filepath.Abs(filepath.Join(st.basePath, chart))
|
||||||
chart := a[len(a)-1]
|
if err != nil {
|
||||||
|
return nil, clean, err
|
||||||
dep += chart + "="
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dep += d.Chart
|
c.Opts.AdhocChartDependencies = append(c.Opts.AdhocChartDependencies, chartify.ChartDependency{
|
||||||
|
Alias: d.Alias,
|
||||||
if d.Version != "" {
|
Chart: chart,
|
||||||
dep += ":" + d.Version
|
Version: d.Version,
|
||||||
}
|
})
|
||||||
|
|
||||||
chartify.Opts.AdhocChartDependencies = append(chartify.Opts.AdhocChartDependencies, dep)
|
|
||||||
|
|
||||||
shouldRun = true
|
shouldRun = true
|
||||||
}
|
}
|
||||||
|
|
@ -143,7 +142,7 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
|
||||||
filesNeedCleaning = append(filesNeedCleaning, generatedFiles...)
|
filesNeedCleaning = append(filesNeedCleaning, generatedFiles...)
|
||||||
|
|
||||||
for _, f := range generatedFiles {
|
for _, f := range generatedFiles {
|
||||||
chartify.Opts.JsonPatches = append(chartify.Opts.JsonPatches, f)
|
c.Opts.JsonPatches = append(c.Opts.JsonPatches, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
shouldRun = true
|
shouldRun = true
|
||||||
|
|
@ -157,7 +156,7 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, f := range generatedFiles {
|
for _, f := range generatedFiles {
|
||||||
chartify.Opts.StrategicMergePatches = append(chartify.Opts.StrategicMergePatches, f)
|
c.Opts.StrategicMergePatches = append(c.Opts.StrategicMergePatches, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
filesNeedCleaning = append(filesNeedCleaning, generatedFiles...)
|
filesNeedCleaning = append(filesNeedCleaning, generatedFiles...)
|
||||||
|
|
@ -173,7 +172,7 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, f := range generatedFiles {
|
for _, f := range generatedFiles {
|
||||||
chartify.Opts.Transformers = append(chartify.Opts.Transformers, f)
|
c.Opts.Transformers = append(c.Opts.Transformers, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
filesNeedCleaning = append(filesNeedCleaning, generatedFiles...)
|
filesNeedCleaning = append(filesNeedCleaning, generatedFiles...)
|
||||||
|
|
@ -182,7 +181,7 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
|
||||||
}
|
}
|
||||||
|
|
||||||
if release.ForceNamespace != "" {
|
if release.ForceNamespace != "" {
|
||||||
chartify.Opts.OverrideNamespace = release.ForceNamespace
|
c.Opts.OverrideNamespace = release.ForceNamespace
|
||||||
|
|
||||||
shouldRun = true
|
shouldRun = true
|
||||||
}
|
}
|
||||||
|
|
@ -195,11 +194,11 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
|
||||||
|
|
||||||
filesNeedCleaning = append(filesNeedCleaning, generatedFiles...)
|
filesNeedCleaning = append(filesNeedCleaning, generatedFiles...)
|
||||||
|
|
||||||
chartify.Opts.ValuesFiles = generatedFiles
|
c.Opts.ValuesFiles = generatedFiles
|
||||||
chartify.Opts.TemplateData = st.newReleaseTemplateData(release)
|
c.Opts.TemplateData = st.newReleaseTemplateData(release)
|
||||||
chartify.Opts.TemplateFuncs = st.newReleaseTemplateFuncMap(dir)
|
c.Opts.TemplateFuncs = st.newReleaseTemplateFuncMap(dir)
|
||||||
|
|
||||||
return chartify, clean, nil
|
return c, clean, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, clean, nil
|
return nil, clean, nil
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue